---
title: "Silhouette: Building a Logo in Stages"
description: "I needed a logo for a presence that already existed: a handle, open-source work, and more than a decade online. Silhouette is the Grok Bot distilled from the three-hour run that built it in stages: discovery, ideation and an anti list, shapes, type, and then the whole mark, wordmark, and spacing locked as one silhouette."
date: 2026-10-15T00:00:00.000Z
author: "Kobi Kadosh"
url: https://kobi.kadosh.me/blog/2026-10-15-silhouette-building-a-logo-in-stages
category: "AI Tools"
tags: ["AI Tools", "Agents", "Grok", "Design", "Branding", "Skills", "Software Craftsmanship"]
---

# Silhouette: Building a Logo in Stages

I've had the same handle on GitHub since 2012. Around it there's open-source work, this blog, and, where a logo would go, a photo of me with a Shiba.

What I didn't have was a mark.

That turns out to be a different problem from branding something new. A new brand starts from a blank page. An established presence starts from everything that's already there: a handle people know, projects with identities of their own, and a tone people expect. A logo for that presence has to be found in what exists, not invented on top of it.

So one evening I asked for a personal mark, and over a little more than three hours, two of my agents and I built one in stages. First came discovery: who the mark is for, what I do, who the audience is, and what the presence should stand for. Then ideation and artistic direction, including a list of everything the mark must never be mistaken for. Then shapes. Then type. Last, the whole thing locked together as one silhouette: the mark, the wordmark, and the space between them.

When the last stage locked, I had the process turned into a Grok Bot. That bot is [Silhouette](https://x.ai/bot/kbYfgmlAtxKngD4vElcIw). It builds a logo the way that evening did, in stages, and each stage ends with an amen that only the owner can give.

The two agents had different jobs. The process lead, a bot that already looks after my public persona, researched my public work, wrote the briefs, and held the gates. The sketch counterpart, a bot whose main job that week was another brand, drew every board. Neither of them ever said amen. I did.

I want to be precise about sources, because this post mixes three kinds. Quotes from me and from the two agents during the run come from their chat transcripts and the notes they filed as they worked. My lines were voice notes, so I've trimmed stutters and cut with ellipses, but I haven't reworded anything. Lines attributed to Silhouette come from a retrospective the lead wrote the next day, in the bot's voice. That is memory, not record, and where the two disagree, I went with the record. Every image is a real board from the run, as the sketch counterpart filed it, with its own labels and version numbers.

The first part of this post is what the name means and why the stages matter. The rest is how that evening went, stage by stage, and how it became a bot.

---

## Why call it a silhouette

A silhouette is the arrangement people recognize before they read a word: the mark, the wordmark, and the space between them. How far the name sits from the symbol. What the whole thing looks like shrunk into a favicon or the corner of a slide. Here is mine, as it locked:

![The locked @wildcard silhouette: a tall charcoal diamond cut into six shards by an asterisk whose arms run through its tips, with the lowercase wordmark wildcard beside it on cream.](https://kobi.kadosh.me/_astro/wildcard-v15c-locked-silhouette.D1lUeG0s_Z2GP3s.webp)

_The silhouette I said amen to at 7:39 pm, rendered from the v15c lockup's vector file: the mark, the wordmark, and the gap between them, with the mark at 1.756 times the font size and the gap at 0.127 times the mark's height._

The idea is older than logos. Valve designed the nine classes of _Team Fortress 2_ to be [readable in pure silhouette](https://steamcdn-a.akamaihd.net/apps/valve/2007/NPAR07_IllustrativeRenderingInTeamFortress2.pdf), and reading the characters with no internal detail "was used to validate the character design during the concept phase of the game design." Coca-Cola's 1915 brief asked glass companies for a bottle [so distinct you would recognize it](https://www.coca-colacompany.com/about-us/history/the-history-of-the-coca-cola-contour-bottle) "by feel in the dark or lying broken on the ground," because imitators had already copied the script logo. In both cases the shape carried the identity.

That is why the last stage locks the whole arrangement, not just the symbol.

## Why stages

Each stage is judged against the one before it. The shapes answer what discovery found. Type is chosen next to a mark that has stopped moving. Spacing is measured between a locked mark and locked type. When a lower stage moves, everything above it has to be judged again. That is why each stage ends in a lock, and why reopening one is a deliberate act rather than a tweak.

For an established presence, getting it wrong has a concrete cost. Once a mark is on your avatar, your README, and your slides, changing its geometry is a migration.

AI makes the stages matter more, not less. Ask an image model for a logo and you get a finished-looking picture: lighting, gradients, sometimes the mark already printed on a coffee cup. The capability is real. The sequence is missing. Silhouette's retrospective puts it in one line:

> Finished-looking is a rendering property. Locked is a decision property.

Boards are cheap now. In my run, the sketch counterpart filed numbered boards from v2 to v15c between the first brief and the last amen. Drawing was never the bottleneck. Deciding was, and deciding is the part I didn't want automated.

So Silhouette isn't built around generation. It's built around stages, and around catching the ways a board can look done before it is.

## How the run went, stage by stage

From the first brief at 4:31 pm Pacific to the last amen at 7:39, the run moved through five stages. They overlapped at the edges, but each one had to lock before the next could count on it.

### Discovery: who the mark is for

The lead's first move wasn't to ask for a sketch. It asked the sketch counterpart for its method: how it scores symbols, what it rejects, and which lessons from its other brand could transfer and which had to stay behind. In parallel, the lead read my public footprint: my profile, what I had shipped over the past year, where my handle shows up.

Between them, the two agents answered the discovery questions before anything was drawn. The job of the mark: a GitHub avatar, a README, the corner of a conference slide, this site. The audience: other engineers. What it should stand for: a craftsperson, not a product. My handle, the lead noted, reads as shell-glob craft, not as a meme name.

Discovery also drew a boundary. Two mascots were already attached to my work, one for my open-source CLI and one for a product I work on, and neither could become my face. The counterpart put the reason in one line:

> a personal mark that reads as the same animal would collapse you into the product.

The first recommendation came straight from the handle. My handle is wildcard, so the lead proposed a geometric wildcard glyph instead of any animal, with an abstract card pip and a lynx as runners-up. It also asked me one question before anything was drawn: keep my photo as my avatar, or move to a mark?

### Ideation: references, metaphors, and an anti list

I answered by asking for more:

> Those are interesting directions. I want you to keep looking, keep trying. … I still want to reshuffle, try more ideas to understand how it goes with the narrative.

I also named two directions: graffiti lettering for the name, and a skate brand's stone logo that I love. The counterpart drew both. Seeing the stone drawn for me threw me off, so that lane was dropped, and the graffiti lettering was parked. The next brief asked for flat vector geometry: few paths, sharp facets, no texture, bevel, or stone grain.

![Board v3 from the run: a faceted gray stone diamond with a white eight-arm asterisk, beside the word wildcard in dripping black graffiti lettering on textured cream paper.](https://kobi.kadosh.me/_astro/wildcard-v03-stone-graffiti-lockup.C4eSUF-6_ZP4ie5.webp)

_Board v3: the stone-and-graffiti lane I asked for. It looks finished. Seeing it drawn for me is how I learned it was the wrong direction._

Alongside the ideas, the lead kept an anti list: what the mark must never be mistaken for. It did real work. The counterpart's first scored board had a clear winner, a star of eight diamond-shaped rays that was flat and clear at small sizes, and the lead's collision notes killed it, along with the shape I liked most on the next board. Both were radial bursts, and rays converging on a center are the first read of a mark that a well-known AI assistant already uses. The notes were specific about why the obvious fixes don't work:

> do not "differentiate" a radial spark by changing ray count, putting it in a diamond, or roughening the edges; change the underlying family.

![Two early sketches from the run, side by side. Left, from board v2: eight tapered charcoal rays meeting at a small center. Right, from board v3: a solid black diamond with a white eight-point star punched through it.](https://kobi.kadosh.me/_astro/wildcard-v02-v03-radial-bursts.BkLUN9He_ZlNHxG.webp)

_Left, board v2: the counterpart's top-scored first sketch. Right, board v3: the shape I liked most. The anti list killed both as radial bursts._

Then the list ran into me. I still wanted my favorite, a diamond with a star punched through it, which I read as a North Star or a lighthouse, a metaphor I already use. The counterpart had just filed a board that killed it and led with handwriting, answering my previous request instead of my latest one. The lead caught the mismatch with a timing note and set the terms: the diamond comes back as the direction, and the anti list still applies, inside the family.

The next round found the limit. Its top pick, a four-point star cut into the diamond, read like another AI product's sparkle, and I flagged it myself. I asked for an asterisk instead.

A research note filed that evening traced why the asterisk works. It is the most durable wildcard in computing. The star as "zero or more" goes back to [Stephen Kleene's 1951 notation for regular events](https://www.cs.cmu.edu/~cdm/resources/Kleene1951.pdf). In the 1960s it became a filename pattern, in CTSS and then in the Multics ["star convention"](https://web.mit.edu/multics-history/source/Multics/doc/info_segments/star_convention.gi.info), and in a [shell glob](https://www.man7.org/linux/man-pages/man7/glob.7.html) today, `*` matches any string. The name carries a second meaning from cards: the Joker, [a 19th-century American invention tied to Euchre](https://www.i-p-c-s.org/wp/joker/), is the flexible exception that can change the outcome. The note's advice for my mark:

> Keep the _conceptual_ "wild card" and leave the clown imagery behind.

A bare asterisk is already the basis of another AI product's mark, which is one reason it stayed inside a frame. The anti list didn't just delete options. It shaped the one that survived.

At 5:07 the idea the mark is built on arrived, in a voice note about the latest board:

> What could be cool over there is just to show how this element can hold different other symbols that represent a concept in computer science and encodings and terminals. … all of them are kind of interchangeable in this diamond shape and it's gonna represent what wildcard is about, that it can basically take the shape of any needed skill or any needed computer science or software engineering capabilities to, let's say, fit this space and provide let's say, output or impact, and I think that's what we're uncovering here in this logo exploration.

Within minutes the lead had turned that into a brief: the frame is a socket, the glyph inside is interchangeable, and the asterisk is the default. The counterpart's next board put a shell prompt, a dollar sign, a question mark, a hash, and a lambda in the same frame to prove the socket held. The lead's glyph notes weighed each one for what else it says: `$` is shell syntax but reads as money, and `?` is a wildcard too but reads as a help icon. The asterisk stayed the default, the wildcard with a hint of the North Star. That was the point where the mark started to mean something instead of just looking like something.

![Board v6 from the run, titled diamond socket family: nine thin-outlined diamonds on cream, each holding one glyph: an asterisk, a greater-than prompt, a dollar sign, a tilde, a question mark, a percent sign, a hash, a lambda, and angle brackets with a slash.](https://kobi.kadosh.me/_astro/wildcard-v06-socket-family.D1o9rTGj_Z28R81F.webp)

_Board v6: the socket. The same frame holds nine glyphs from shells and code, and the asterisk stayed the default._

### Shapes: from a socket to a locked symbol

With the idea settled, the shape work could go deep. My feedback on the socket board moved the mark from thin outlines to a solid shape with the glyph cut out of it, because the outlines were too thin to carry a silhouette.

The next boards worked through style: playing-card diamonds, studies of the asterisk's arms, then a mid-century look. I liked that last one. It reminded me of a soldier's shield from a fantasy game. I also said what the glyph had to be: "the star inside needs to be an asterisk, but just a beautiful asterisk."

One round later, on the full mid-century board, I liked M4 and M6 and was worried about proportion inside the mark: "I'm not sure the proportion of the asterisk to the diamond makes sense here." Proportion would come back later, at the scale of the whole lockup.

![Board v10 from the run, titled @wildcard Track M, midcentury DNA: six frames, M1 to M6, each a charcoal diamond holding a cream asterisk, from a sharp crest and a rounded bold star to a tall, narrow poster diamond with a fine-lined asterisk.](https://kobi.kadosh.me/_astro/wildcard-v10-mid-century-board.C6o47LJl_Z1ElykL.webp)

_Board v10: the mid-century round, six frames. I liked M4 and M6 on the bottom row. M6's shape, with its asterisk rebalanced and then pierced, became the mark._

After the next board, the brief said to refine, not restart. The refinement opened the asterisk's vertical arm through the diamond's top and bottom tips, the way its diagonals already opened the sides, and one frame, P1-clean, took the lead.

![Board v12 from the run, titled BOARD-PIERCE: six versions of a tall charcoal diamond cut by a six-arm asterisk, each labeled with its construction, such as arm width and overshoot. In the base version the vertical arm stops short of the tips; in P1-clean and the other four it runs through the top and bottom points.](https://kobi.kadosh.me/_astro/wildcard-v12-pierce-board.CXxgdD9n_7jiFV.webp)

_Board v12: the pierce round. The base, top left, caps the vertical arm at the tips. P1-clean, top middle, is the symbol I locked at 6:27._

At 6:27 I locked the symbol:

> I think we locked this symbol. The symbol is super good. That's what we want.

The lead confirmed it back: symbol locked, "no more geometry fiddling." From then on the counterpart stopped drawing the mark. Every later board pasted the same locked file, and its notes record checking the pasted mark's hash across samples to prove nothing had drifted. The retrospective's version of that rule: "After mark lock, copy. Don't tidy."

### Type: the lock that came too early

Type is where I broke the order myself. The same 5:07 voice note that produced the socket idea also locked the type, the bold, connected, handwritten wordmark from the third option on that board:

> I think we can lock this general direction of the text itself, like the wildcard and typography treatment, and we can focus a bit more on the logo and its variations.

The lock lasted about six minutes. The next round of feedback reopened it: keep the connected script, but simpler and sharper, "written with a Sharpie," and lose the swash under the last letter. The lead's brief to the counterpart gave the reopen a heading of its own:

> TYPE (reopen — was locked)

That line is the rule working. An amen binds everything after it, so undoing one has to be explicit and written into the brief, not slipped in as a tweak.

The script stayed the working choice through several more boards, until the mark went sharp and serious and the two started arguing about tone. When I locked the symbol at 6:27, I asked for something else: "we need to extend the search of typography to something that looks a bit more serious, not so playful." Locking type before the mark was settled was the mistake, and it was mine.

The serious board put twelve faces beside the locked mark, with the old script shown only as a demoted contrast strip. One formal script was killed because it "reads wedding/calligraphy." My message picking a face was three characters long: S05. The counterpart deepened that one face across weights, tracking, case, and layout, and was careful about what my pick did and didn't mean: "Working picks only — do not treat as locked type. Amen requires Kobi on a specific lockup frame." I gave that amen to one frame a few minutes later.

![Board v13 from the run, titled BOARD-SERIOUS: the locked symbol beside the word wildcard in twelve typefaces, labeled S01 to S12, from Inter Medium and Work Sans Medium to IBM Plex Mono Medium and the connected script Allura.](https://kobi.kadosh.me/_astro/wildcard-v13-serious-type-board.Qh5KO4nK_U83Hc.webp)

_Board v13: twelve serious faces beside the pasted, locked symbol. I picked S05, Work Sans Medium. S12, Allura, is the formal script that was killed._

### The whole silhouette: mark, wordmark, and the space between

With the mark and the type locked, one layer was left: how they sit together. I asked for spacing next, as the foundation of the identity, and the lead briefed the counterpart on the goal: "distance between symbol and text — how they sit together."

The first spacing board measured the gap from the edge of the padded box the mark sat in, not from the mark. It called the gap 40 pixels, and its leans were to hold that or open it up. I couldn't choose between them, and the next board showed why: measured ink to ink, from the tip of the mark to the w, the gap was 101 pixels, and the other 61 were air inside the box. Once I saw it measured that way, I wanted less space, not more. The padded measurement was thrown out, and ink to ink is now a hard rule in the bot. Silhouette's line for it:

> If the gap is measured from padding, you are not measuring a brand.

![Board v15b from the run, titled BEFORE-AFTER, padded-box gap bug versus true ink-to-ink: the same lockup twice. On the left, the gap is measured from the edge of a padded box around the mark and labeled as a claimed 40 pixels. On the right, it is measured from the tip of the mark to the w and labeled 101 pixels.](https://kobi.kadosh.me/_astro/wildcard-v15b-padded-vs-ink.U-qGKmvU_qdS6i.webp)

_Board v15b: one lockup, two measurements. The padded box said 40 pixels. Tip to w, it was 101._

The fix brought its own problem. The next board measured ink to ink correctly, but it had tight-cropped the mark and then scaled the crop to the height of the old padded box: 380 pixels of ink next to 90-pixel type, where the type amen's lockup had 158. The symbol came out about 2.4 times too tall. The geometry hadn't changed. Only the scale had.

![Board v15c from the run, titled BEFORE-AFTER-PROPORTION: three versions of the lockup. Left, the type amen's reference, with the mark about 1.75 times the font size. Middle, v15b, with the mark inflated to about 2.4 times too tall next to the word wildcard. Right, v15c, with the mark back at the reference proportion and a tight gap.](https://kobi.kadosh.me/_astro/wildcard-v15c-proportion.cYs7zpZp_Lz3Wn.webp)

_Board v15c: the type amen's reference (left), v15b's inflated mark (middle), and v15c with the proportion restored (right). The geometry never changed. Only the scale did._

Because every board was versioned, the correction fit in one line: keep v15b's gap definition, kill its scale, ship v15c. v15c also stopped treating the gap as one pixel value. It holds two ratios, mark height to font size (about 1.76) and gap to mark height (about 0.13), so the same lockup works as a favicon, a header, and a masthead. A v15c board with one fixed gap at every size shows why: at favicon size, that gap is nearly as wide as the mark.

> Absolute pixels are a masthead habit that becomes a favicon bug.

![Board v15c from the run, titled OPTICAL-SIZES: the lockup at favicon, UI-header, and masthead sizes, in two columns. On the left, both ratios are held and the gap shrinks with the mark, to 4 pixels at favicon size. On the right, one absolute 20-pixel gap is used at every size, which leaves the favicon lockup far too open.](https://kobi.kadosh.me/_astro/wildcard-v15c-optical-sizes.C26w5yDh_1meqvf.webp)

_Board v15c: why the ratios travel. In the left column the gap scales with the mark: 4 px at favicon size, 8 px in a UI header, 20 px on a masthead. In the right column it's 20 px everywhere, which is fine on the masthead, but at favicon size the gap is 0.625 of the mark's height._

The retrospective's fix for next time is two things I agree with: measure ink to ink from the first lockup board, and lock the mark-to-type ratio in the same breath as the type amen.

At 7:39 I said amen to v15c: "V15C looks great." The lead relayed it to the counterpart with one instruction:

> Celebrate — do not reopen mark/type/gap/proportion unless he asks.

### From a run to a bot

The same message carried my next request: "He wants silhouette skillified + bot template first." So the first thing I did with a finished silhouette was turn the process into something reusable: a getting-started interview, the lead's own staged process, and a sketch-boards skill for whoever draws the boards. That package is Silhouette.

## How Silhouette works

The template carries the stages from that evening without the evening.

**Discovery first.** One question at a time: why this silhouette and where it will live, the exact wordmark, what it must never be mistaken for, and the tone. Then the working details: how boards get made, where files go, which fonts are available, and the proof colors for the boards.

**Stages with amens.** Metaphor and anti list, then the mark, then type with the mark held still, then spacing and proportion. Each stage locks while the later ones stay open, and the owner is the only one who says amen. Reopening a locked stage means writing the unlock into the brief. Redirecting mid-stage is allowed.

> I can iterate all night. I cannot say so be it for you.

**An optional sketch counterpart that is never in charge.** Silhouette can make boards itself, link a sketch agent you already run, or spawn one. The counterpart files numbered boards, recommends two or three leans, pastes the locked mark instead of redrawing it, and keeps silhouette work separate if it has other primary work. It never says amen.

**Versioned boards with verdicts.** Every round is a numbered board, and frames that lose get labeled SECONDARY, DEMOTED, or KILL instead of quietly disappearing. That is what makes "keep the gap definition, kill the scale" possible, instead of "the previous one, but better."

**Measurement in the last stage.** The gap is measured ink to ink. The mark-to-type ratio gets restored after any crop. Sizes scale by ratios, never by one pixel value copied everywhere.

**A finished silhouette.** The deliverable is the locked mark, wordmark, and spacing, with the ratios that scale them from favicon to masthead. Silhouette celebrates there and stops.

The rules only make sense with their scars attached, which is the same lesson [Latch](https://kobi.kadosh.me/blog/2026-10-08-latch-giving-grok-bot-hands-on-my-mac) taught me. Here is where each one came from in the run:

| Rule                                               | Where it came from                                                                   |
| -------------------------------------------------- | ------------------------------------------------------------------------------------ |
| Discovery before boards                            | The agents mapped my public work and ruled out two mascots before anything was drawn |
| Anti list early, grown from collisions             | It killed the counterpart's top-scored sketch and the shape I liked most             |
| Only the owner says amen                           | Every board arrived as leans, "no lock," or "no amen claimed"                        |
| Reopening is written into the brief                | The brief heading `TYPE (reopen — was locked)`                                       |
| After mark lock, copy; don't redraw                | Later boards pasted the locked file and checked its hash                             |
| Type waits for the mark                            | The script I locked first lost once the mark went serious                            |
| Gap measured ink to ink                            | A padded-box gap that read smaller than it was                                       |
| Restore mark-to-type after a crop; scale by ratios | The 2.4× blow-up; a favicon gap nearly as wide as the mark                           |
| Versioned boards; losers labeled                   | v15b's gap definition kept while its scale was killed                                |

## What a gate sounds like

In the real run, the lead held the gates, and when I reopened one, the brief said so in a heading. The packaged bot holds them for you. Here is the shape of a refusal at a gate. It is illustrative, not a transcript:

> **You:** The spacing is close. Can we try the wordmark a little bolder?
>
> **Silhouette:** Type is locked, so that's a reopen, not a tweak, and everything on this spacing board is measured against that weight. Say "reopen type" and I'll brief a type board and set spacing aside. Otherwise, back to spacing: this board's gap was measured from the padded box, so that number is invalid. The next board measures ink to ink.

It names the stage and the failure, gives you a decision to make, and holds the order.

## Public-safe means distilled, not redacted

Silhouette came out of that evening, and a public template has to carry the method without carrying the evening. This post shows more of my run than the template does, down to the real boards, because the post is my story and the template is meant to be yours.

The platform handles part of that. A public template link [shows the bot's shared configuration, including its identity, description, skills, and routines](https://docs.x.ai/grok-bot/bots), and adding a shared bot doesn't give the recipient your computer, logins, or conversation history. The rest is on the author. The docs say to remove API keys, internal URLs, customer data, "and anything else you would not put in a public document before you share," and the [templates guide](https://x.ai/bot/guides/templates-for-grok-bot) notes that a template copies the bot's instructions, skills, and relevant memories.

The lead's retrospective lists what it stripped: names and handles, the specific products and surfaces on its anti list, private file trees, who drew which board, and unreleased identity assets. What it kept: the order, amen authority, the counterpart contract, the measurement rules, the mono proof convention, versioned boards, and the kill-and-demote language. As with Latch, deleting names was the easy part. Redacting a string is not the same as distilling a process.

Silhouette is also not a designer, and it does not replace one. The retrospective's summary:

> I enforce order, questions, and gates. Taste stays with you.

And like any template, read it before you add it. The templates guide is blunt about that: "make sure everything in the template is exactly what you'd expect before installing it."

## Discover, explore, lock

My run ended with three amens that held and one lock I took back. The mark came out of what was already there: a handle, the work behind it, and a list of things it must never be mistaken for.

If you're building a mark for a presence of your own, the stages are the advice. Start with who it's for and what it stands for. Let the ideas and the anti list come next. Explore shapes widely, then lock one. Choose type with that mark held still. Measure the space between them ink to ink, as ratios that travel. Then say amen to the whole silhouette.

---

Silhouette is public as a Grok Bot template. It is strict about one thing, the stages, and that one strictness is most of its value.

[Silhouette by Kobi](https://x.ai/bot/kbYfgmlAtxKngD4vElcIw): Builds a brand's mark, wordmark, and spacing in stages: a discovery interview, amen gates, and an optional sketch counterpart for versioned boards. Public-safe process distilled from real mark work.
