Skip to content

[Feature]: Give webcmd a terminal mascot #510

Description

@Agnik47

Feature Description

webcmd has a logo but no character. Nothing greets a fresh npm install -g @agentrhq/webcmd, and webcmd --help opens with wordmark art that carries no personality.
Image

This proposes Weaver: a chunky block spider who drops in on a thread when you install webcmd, and stands beside the wordmark in the help banner.

        ││        
        ││        
        ││        
    ▓▓      ▓▓    
    ██████████    
  ▓▓██ ●  ● ██▓▓  
  ▓▓██  ▾   ██▓▓  
    ██████████    
 ▓▓  ▓▓    ▓▓  ▓▓ 

In the help banner, beside the existing wordmark:

    ▓▓      ▓▓      ██╗    ██╗███████╗██████╗  ██████╗███╗   ███╗██████╗
    ██████████      ██║    ██║██╔════╝██╔══██╗██╔════╝████╗ ████║██╔══██╗
  ▓▓██ ●  ● ██▓▓    ██║ █╗ ██║█████╗  ██████╔╝██║     ██╔████╔██║██║  ██║
  ▓▓██  ▾   ██▓▓    ██║███╗██║██╔══╝  ██╔══██╗██║     ██║╚██╔╝██║██║  ██║
    ██████████      ╚███╔███╔╝███████╗██████╔╝╚██████╗██║ ╚═╝ ██║██████╔╝
 ▓▓  ▓▓    ▓▓  ▓▓    ╚══╝╚══╝ ╚══════╝╚═════╝  ╚═════╝╚═╝     ╚═╝╚═════╝

The seven animation frames, played once on install. The blink swaps for ; the leg rows shift one column as he lands:

01 drops in on a thread 05 settles
02 descends further 06 blinks
03 lands, stance shifts 07 rests
04 bounce

Use Case

The mascot argues for itself on product grounds, not only on taste. A spider that crawls a site once and weaves what it learns into its web is sitemap memory — it draws "explore once, execute forever" without a sentence of explanation.

As a user, I want the install to feel like something arrived, the way it does for other agent CLIs. As a project, webcmd gets a character it can put on docs, stickers, and merchandise later — which a wordmark alone cannot do.

Proposed Solution

  • src/mascot.ts holds the art, the seven frames, the renderer and the animator. ACCENT_RGB / SHADE_RGB move to src/brand.ts so #56C5FF is declared once and shared with the help banner.
  • The sprite joins ROOT_HELP_BANNER_PARTS as a third column. Total banner width becomes 73 display columns — the wordmark's 52, a two-column gutter, and Weaver's 18 — leaving headroom inside an 80-column terminal. The Hangul-filler spacer row is left untouched.
  • scripts/postinstall.js animates the drop on a global install; src/hosted/setup.ts greets first-run setup.
  • docs/webcmd-weaver.svg is a vector twin generated from the same sprite, so the terminal character and the illustrated one cannot drift.

Two constraints shaped the implementation:

The art is filled block glyphs, not box-drawing outlines. Each part of Weaver is a different character ( body, legs, eyes) rather than the same character in a different color. That keeps color purely additive, which is what preserves the existing invariant at command-presentation.test.ts:170 — stripping ANSI from a colored help screen must return the plain one byte for byte. All 14 existing banner tests pass untouched, including the local/hosted byte-identity assertions.

Animation is gated on the output stream being a TTY, not on prompting being possible. Piped installs get a single static frame with no escape sequences, CI gets nothing (the existing process.env.CI guard), and WEBCMD_NO_MASCOT=1 opts out entirely. webcmd list -f json and the other machine-readable paths are untouched.

14 new tests cover frame geometry (every frame the same size, or the in-place redraw tears), the additive-color property, cursor restoration when a write throws mid-animation, and a guard that the frames inlined in scripts/postinstall.js match src/mascot.ts — that script must run with no build step, so it cannot import the module.

Alternatives Considered

  • Half-block sprites with truecolor foreground and background. Double the vertical resolution, but stripped of ANSI they degrade to a rectangle of identical characters. That breaks the additive-color invariant and makes piped output meaningless.
  • Animating the browser-run spinner. Deliberately left out: that is hot-path output agents parse, and it is a much larger review surface. Worth a follow-up only if this lands well.
  • A new character unrelated to the existing mark. Weaver's body is the terminal window from docs/webcmd.svg with legs, so it reinforces the brand rather than asking for a second identity.

Happy to change the character, the palette, or drop any of the three surfaces — the art lives behind one module, so the placement is easy to trim.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions