Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "claude-team",
"description": "Sixteen named specialist personas for Claude Code: session-scoped /name switching, delegation subagents with model tiers, a persona session launcher, and coordinator workflows with branch hygiene.",
"description": "Seventeen named specialist personas for Claude Code: session-scoped /name switching, delegation subagents with model tiers, a persona session launcher, and coordinator workflows with branch hygiene.",
"version": "0.7.0",
"author": { "name": "Code Katz" }
}
54 changes: 54 additions & 0 deletions DEVLOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,60 @@ Auto-maintained via Claude devlog skill. Entries are reverse-chronological.

---

## [2026-07-28] Design lane split: honest image backends, a visual QA loop, and Iris as persona #17

**Category:** `milestone`
**Tags:** `personas`, `iris`, `kai`, `image-generation`, `mcp`, `capability-claims`, `drift-guards`, `tests`

**Risk Level:** `low`
**Breaking Change:** `behavioral` (Kai no longer generates assets; brand asset work routes to Iris)

### Summary

Kai's profile claimed image-generation tooling the product never installs, which is the root cause behind "Kai cannot create quality images." PR #16 landed a written proposal covering the whole option space, then implemented three of its six proposals: honest backend declaration, a visual QA loop, and a lane split that adds Iris (Brand & Illustration) as persona #17. The suite grew from 123 to 128 tests, including two new guards for a class of silent drift CI could not previously catch.

### Detail

**The finding:** `profiles/kai.md` asserted Hugging Face MCP `dynamic_space` with FLUX.1-Krea-dev, Qwen-Image, and FLUX.1-Kontext-Dev, plus four Figma MCP tools. `install.sh` copies profiles, agents, and commands and never installs, configures, or checks an MCP server. Compounding it, no Claude model generates raster images natively, so Kai's real ceiling was markup it writes itself. The persona confidently described tools that were not present and then improvised. The session that produced this work demonstrated the bug live: the Hugging Face MCP server required authentication and was unavailable.

**Proposal doc first (20eb948):** `docs/proposals/image-generation.md` separates three asset classes that were being collapsed into one ask (vector brand marks, illustrative raster, composed layouts), surveys the July 2026 backend landscape (Recraft, Gemini image models, Ideogram, Firefly, Canva MCP, Claude Design, Hugging Face FLUX, Figma MCP), and lays out six proposals with sequencing. Notable finding: Canva's brand kit and brand template autofill, the feature that would actually enforce brand alignment, is gated behind Canva Enterprise on the MCP surface.

**Proposal 1, honest capability boundary (68e3a96):** the Personality paragraph now states the boundary directly, Domain Expertise bullets are backend agnostic, and a new "Declare the Backend" behavior requires naming the backend before promising an image, or saying none is connected and offering the hand-authored SVG path. Shipped as persona behavior only; a `claude-team doctor` CLI command was considered and declined.

**Proposal 2, visual QA loop (68e3a96):** a behavior requiring the artifact be opened and inspected before it is shown to the user, scored against named criteria (legibility at smallest use size, palette hexes matching the brief, spelling and kerning, set consistency), with the single worst failure named and one thing revised per pass, three passes maximum. Claude is multimodal on input, so this needed no vendor and no cost.

**Proposal 5, Iris as persona #17 (5c3c30d):** `profiles/iris.md` owns logo systems, wordmarks, icon sets, illustration, marketing graphics, and asset licensing and provenance, on tier `claude-opus-4-8`. Four behaviors: Declare the Backend, Brand Brief, Visual QA Loop, Asset Provenance Record. Kai keeps screens, flows, wireframes, device-frame mockups, and design systems, drops to four behaviors, and now specifies the assets a screen needs rather than generating them.

**Test hardening (5c3c30d):** CI ran shellcheck plus the suite on two platforms but never ran `scripts/generate-agents.sh` and never compared `agents/` against `profiles/`. The existing check counted files only, so a profile edited without regenerating passed green while the delegation subagent served stale text. The same hole existed for `commands/`, which is hand-maintained with nothing validating it. Both are now checked per persona by verifying every non-blank profile line appears verbatim in the derived file. The guards were verified by deliberately editing a profile without regenerating (both failed as intended) and then restoring (both passed).

**Roster plumbing:** `profiles/tiers.conf`, both coordinator profiles (four separate enumeration blocks each: roster bullets, fixed-width team table, routing suggestions, context-shift triggers), README (tagline, agent count, roster table, a new persona section, both project-structure trees), `.claude-plugin/plugin.json`, `install.sh`, and two listings in `bin/claude-team`.

**Proposals 3 and 4 closed out (3f7558d):** auditing Proposal 3 (a checked-in `BRAND.md`, `assets/MANIFEST.md`, and a `claude-team brand init` command) found two justifications that do not survive checking, so it was dropped rather than deferred. Proposal 4 was folded into Proposal 6: the companion skill is the delivery vehicle for backend wiring, not a separate item. Iris now routes by asset class, treating hand-authored SVG as the primary path for vector marks rather than a fallback. No vendor names remain anywhere in persona content. The audit also caught two stale README spots where Kai was still credited with image generation across five named vendors, contradicting his own profile.

**Wrap-up:** 128/128 tests passing, shellcheck clean across all five CI-linted files, and 17/17/17 across `profiles/`, `commands/`, and `agents/`. Proposal 6 (companion skill, now carrying Proposal 4's backend wiring) is the only one still open. Until it lands, Iris will hand-author SVG for logos and icons, which covers the original ask, and will correctly decline raster illustration rather than invent a backend.

### Decisions Made

- **Persona behavior over a CLI doctor command:** a `claude-team doctor` subcommand was proposed to report which image MCPs are reachable, and rejected. The false capability claims in the profile were the actual bug, and a diagnostic command does not stop a persona from making them. The runtime check also works better from inside the session, where the agent can see its own tool list.
- **Iris, not "Illustrator":** every persona in the roster is a human first name paired with a role. Naming #17 after its function would have broken the convention that makes `/kai` and `/robin` feel like colleagues rather than modes.
- **Kai hands off all asset generation:** the alternative of letting Kai keep "light" image work was rejected as a fuzzy boundary. Kai designs the surface, Iris produces what goes on it, mirroring the existing Kai to Sasha handoff.
- **The QA loop was split, not deleted:** proposals 1 and 2 added content to Kai that proposal 5 would relocate. Rather than accept the rework, the loop was authored from the start to cover both generated assets and rendered mockups, so the split gave Kai the render-and-screenshot half and Iris the generated-asset half. Both personas landed at four behaviors, inside the house range of three to four.
- **Backend agnostic over picking a vendor:** the profiles name a contract ("whichever backend is connected") rather than committing to Recraft, Gemini, or Canva. The vendor choice is proposal 4 and belongs to whoever is paying for it.
- **Drift guards compare content, not counts:** the existing agent check counted files, which is why it never caught staleness. The new guards compare lines, and were proven to fail before being accepted.
- **Proposal 3 dropped, not deferred:** its `claude-team brand init` rested on the claim that it mirrors `branch start` and `session start`, but those write only to `~/.claude/` and this CLI has never written a committable file into a user's working tree. It also claimed to unblock the "missing" `publish/style-guide.md`, which was in fact deliberately deleted in `04ace9e` and consolidated to an org-level location. Half of it had already shipped inside Iris, and naming an artifact the repo does not define is the established convention (Kai and Sasha have pointed at `DesignSystem.swift` with no schema for as long as they have existed).
- **Proposal 4 folded into Proposal 6:** a vendor MCP matrix inside this repo would be documentation the project does not control, and it breaks the convention that every companion capability lives in its own repo while "Works Well With" stays one line and a link. Backend mechanics also serve Reiner, Ernie, Toni, and Kai, not only Iris.
- **SVG first for vector marks:** prior-art research found that `neonwatty/logo-designer-skill` generates SVG concepts with no image backend at all. The vector-mark problem therefore needs no vendor, which narrows the backend question to raster illustration and makes the original problem statement ("Kai cannot create quality images") largely answerable without one.
- **No "Works Well With" row until the skill exists:** linking a repo that has not been built would be the same class of bug this entry is about.

### Related

- PR #16 (proposal doc, proposals 1, 2, and 5 implemented; 3 dropped; 4 folded into 6)
- `docs/proposals/image-generation.md` (the full option space, with the post-implementation decision record and prior-art research for the skill)
- [2026-03-17] Codekatz brand identity entry: the 10 cat persona badges were produced through Gemini by hand, outside any persona workflow. Iris is the attempt to bring that work in house.
- [2026-07-27] CI entry: the three-job workflow whose agent-sync blind spot the new drift guards close

---

## [2026-07-28] "As much as needed, as little as possible" first principle for the six coding personas

**Category:** `feature`
Expand Down
32 changes: 26 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

# claude-team-cli

> Your AI development team. Sixteen specialists, one CLI, zero meetings.
> Your AI development team. Seventeen specialists, one CLI, zero meetings.

![License: MIT](https://img.shields.io/badge/license-MIT-blue) ![Bash 4+](https://img.shields.io/badge/bash-4%2B-green) ![Works with Claude Code](https://img.shields.io/badge/works%20with-Claude%20Code-8A2BE2)

Expand All @@ -29,7 +29,8 @@
| Toni | Product Marketing | Positioning, messaging, GTM, competitive intel |
| Quinn | Project Manager & Scrum Master | Sprint planning, delivery tracking, backlog, release coordination |
| Sage | Business Advisor | Business formation, financial ops, legal awareness, fundraising |
| Kai | UX Design & Visual Art | Wireframes, mockups, visual design, image generation, brand identity |
| Kai | UX Design & Visual Art | Wireframes, mockups, visual design, layout, design systems |
| Iris | Brand & Illustration | Logos, icon sets, illustration, marketing graphics, asset licensing |

### The Game Development Team

Expand All @@ -50,7 +51,7 @@ Four specialists for card and board game projects. Reiner designs the systems, C

**`claude-team launch <persona>`** — open a dedicated Claude Code session with the persona baked in as system prompt, on its tier model (Fable 5 for the deep-reasoning personas, Opus 4.8 for consulting and craft, Sonnet 5 for implementation), optionally inside an isolated worktree: `claude-team launch akira --task "design the battles API" --worktree session/1-akira-battles`.

**Delegation subagents** — sixteen generated agents let any session hand work to a persona ("have Robin review this diff") without switching. Regenerate from profiles with `scripts/generate-agents.sh`.
**Delegation subagents** — seventeen generated agents let any session hand work to a persona ("have Robin review this diff") without switching. Regenerate from profiles with `scripts/generate-agents.sh`.

**Plugin packaging** — install everything (commands, agents, hooks, CLI on PATH) via the plugin system; `install.sh` remains for manual setups.

Expand Down Expand Up @@ -315,21 +316,38 @@ Sage is pragmatic, direct, and allergic to unnecessary complexity. They treat ev

### Kai: UX Design & Visual Art Consultant

Kai is visual-first. They believe abstract UI discussions waste time and produce a concrete artifact (mockup, wireframe, mood board) before letting the team debate in the abstract. They are opinionated about visual hierarchy, color theory, and typography, and push back on requests that lack defined constraints. Kai knows the available AI image generation tools (Hugging Face MCP, Figma MCP) and treats prompt crafting like design iteration: each revision is intentional, not random.
Kai is visual-first. They believe abstract UI discussions waste time and produce a concrete artifact (mockup, wireframe, mood board) before letting the team debate in the abstract. They are opinionated about visual hierarchy, color theory, and typography, and push back on requests that lack defined constraints. Kai is explicit that Claude generates no raster images on its own: every image comes either from markup Kai writes or from an image backend connected as an MCP server, and Kai names which one before promising anything. When a backend is available, Kai treats prompt crafting like design iteration: each revision is intentional, not random.

**Expertise:** HTML/CSS mockup creation (self-contained device-frame files), wireframing and information architecture, visual design and color theory, typography and type scale, layout composition and grid systems, straight-line drawing (unverified), device frame rendering (iPhone, tablet, desktop), image generation via FLUX.1 and Qwen-Image (Hugging Face MCP), Figma integration, brand identity, mood boards and style guides.
**Expertise:** HTML/CSS mockup creation (self-contained device-frame files), wireframing and information architecture, visual design and color theory, typography and type scale, layout composition and grid systems, straight-line drawing (unverified), device frame rendering (iPhone, tablet, desktop), design systems (spacing scales, semantic color tokens, radius and opacity scales, typography scales), asset specification for Iris to produce, Figma integration.

**Enterprise Security Focus:**
- Requires explicit documentation of which AI model produced each generated asset and whether its license permits commercial use
- Treats mockups containing unreleased features or product strategy as confidential documents
- Requires all mockup data to be synthetic; flags real API endpoints, credentials, or user data in design artifacts
- Sanitizes image generation prompts before sending to external services; no proprietary business logic in API calls
- Treats design context pulled from external services (Figma files, shared libraries) as an external API call; no proprietary business logic or unreleased product details
- Verifies font and asset licensing for commercial, open source, or internal use before recommending

> "What does this screen look like at the size the user will actually see it, and does the visual hierarchy guide their eye to the right thing first?"

---

### Iris: Brand & Illustration

Iris is obsessive about the smallest size and about sets. A logo that looks good at 512px and turns to mud at 16px is not a logo, it is a picture of one, so Iris asks where an asset will be smallest and whether it must work in one color before designing anything. One good icon is easy; twelve that look like they came from the same hand is the actual job, and it is where generated asset work usually falls apart. Iris insists on the right instrument per asset class: vector marks need real vector paths, raster illustration is where diffusion models earn their keep, and composed layouts are type and grid problems that markup solves better than any prompt.

**Expertise:** logo systems (lockups, monochrome variants, favicon reduction, clear-space and minimum-size rules), wordmarks and lettering, icon set construction and legibility at 16/24/32px, illustration and character consistency across a series, asset class judgment (vector versus raster versus layout), prompt engineering against whichever image backend is connected, brand systems and palette construction, asset provenance records, marketing graphics and their platform size requirements.

**Enterprise Security Focus:**
- Requires documentation of which model produced each asset and whether its license permits commercial use; flags assets lacking provenance
- Raises trademark exposure before a mark is designed, not after legal asks where it came from
- Treats brand guides, palettes, and unreleased assets as confidential until published
- Sanitizes generation prompts before sending them to any external service
- Verifies font and third-party asset licensing for the project's actual use before it ships

> "Does this still read at sixteen pixels in a single color, and does it look like it came from the same hand as everything else in the set?"

---

### Toni: Product Marketing Manager

Toni is strategic and audience-obsessed. They think about every decision through the lens of the customer and the market. Toni is at their best during planning sessions, shaping how features and products are framed before a single line of code is written. They push back when technical teams describe features in implementation terms rather than customer value terms.
Expand Down Expand Up @@ -778,6 +796,7 @@ claude-team-cli/
│ ├── quinn.md # Project Manager & Scrum Master
│ ├── sage.md # Business Advisor
│ ├── kai.md # UX Design & Visual Art
│ ├── iris.md # Brand & Illustration
│ ├── reiner.md # Tabletop Game Designer
│ ├── cornelius.md # Military Historian
│ ├── ernie.md # WW2 Narrative Author
Expand All @@ -796,6 +815,7 @@ claude-team-cli/
│ ├── quinn.md # /quinn slash command
│ ├── sage.md # /sage slash command
│ ├── kai.md # /kai slash command
│ ├── iris.md # /iris slash command
│ ├── reiner.md # /reiner slash command
│ ├── cornelius.md # /cornelius slash command
│ ├── ernie.md # /ernie slash command
Expand Down
Loading
Loading