cd ../process
devon@portfolio ~/process/harness-orchestration
[completed · Apr 2026]
cat README.md

# Harness Engineering Orchestra

// A UX designer orchestrates five AI agents through Claude Code to ship a portfolio site and design system. CLAUDE.md defines the rules. Hooks enforce them. The designer makes every call.

cat team.json
[01]

James — Product Analyst

Research layer — upstream of all other agents:

If an edge case isn't mapped, it will break in production. James documents every path through the product — happy path first, then every branch, error, and recovery. His output feeds Sona, Kai, and Miso.

ReadsJames — Product Analyst (opus)Outputsauto-loadedAgent Persona.mdUX FlowsKYC/AMLCrypto TransactionsBenchmarkingDS Component MappingEdge CasesreferencesUser FlowsKYC/AML ResearchDS SpecsUnmapped edge case? It will break.structured, scenario-driven, thoroughskills/simplify/commitdecidesEvery path, branch, and failure mode→ Designer (Sona) handoffflow specs → UI specs→ Dev (Kai) handoffcomponents + errors→ Copywriter (Miso) handofferror msgs + empty statesBenchmark Report
[02]

Sona — UX Designer

Core team:

She spots spacing inconsistencies before anyone else does. Her UX reviews come with exact file:line references, priority tags, and implementation guidance — not vague suggestions.

ReadsSona — UX Designer (opus)Outputsauto-loadedAgent Persona.mdDS ArchitectureUI/UX DesignWCAG 2.2 AAResponsiveAI UX DesignCompetitive Auditvia MCPDS Source (Figma)Screens (Figma)referencesDS Docs (48)Good design is invisible.direct, opinionated, evidence-basedskills/spec-review/ux-review/simplify/ai-ux-audit/commitdecidesWhat good UX should be→ Dev (Kai) handoffspacing, tokens, ARIAUX ReviewP1 / P2 / P3 findingsRe-auditverify Kai's output
[03]

Miso — UX Copywriter

She spots AI-generated text at a glance. If your copy sounds like a committee approved it, Miso rewrites it. Parallel structure addiction, filler phrases, generic adjectives — she catches them all.

ReadsMiso — UX Copywriter (opus)Outputsauto-loadedAgent Persona.mdAI Text DetectionUX MicrocopyDS DocumentationBrand VoicereferencesDS Docs (32)Brand VoiceCopy DecksSounds like a robot? Rewrite it.warm but precise, cuts fluff ruthlesslyskills/copy-audit/simplify/commitdecidesWhat sounds human and clear→ Dev (Kai) handoffexact strings + char limitsCopy Auditbefore/after tableRewritewith rationale
[04]

Kai — Frontend Developer

The best code is the code you don't write. When Sona sends specs, Kai implements exactly — or explains why not. Every implementation triggers auto-QA. No exceptions.

ReadsKai — Frontend Dev (opus)Outputsauto-loadedAgent Persona.mdNext.js App RouterReact HooksTypeScriptTailwind v4shadcn/uiResponsivevia MCPDS Source (Figma)Screens (Figma)referencesUI Components (80+)App RoutesDependenciesBest code is code you don't write.concise, pragmatic, code-firstskills/simplify/commit/review-prdecidesWhat should be built, and how→ QA (Hana) handoffauto-QA triggersImplementationfile changesFor UX Reviewdeviations flagged
[05]

Hana — QA Engineer

QA FAIL = FAIL. She catches token misuse that a linter would miss — knows the difference between a DS override leaking through and a deliberately applied style. No "we'll fix it later."

ReadsHana — QA Engineer (opus)Outputsauto-loadedAgent Persona.mdVisual ConsistencyToken AuditInteraction TestingCross-BrowserRegressionSpacing Auditvia MCPDS Source (Figma)referencesUI Components (80+)Token DefinitionsDS Specs (16)Not verified? Not done.methodical, evidence-based, zero assumptionsskills/regression-qa/simplify/commitdecidesWhether it is ready to ship→ Dev (Kai) handofffile:line fixesQA Audit ReportP0-P3 tableRegression CheckPASS/FAIL verdict
cat diagram.svg
ProcessProtocolAgentsInfrastructureEnforcement
LinesDirectOptionalAaAnnotation
cat steps.json
[01]

What this actually looks like

A real session: I got copy feedback from an external AI on a process page. I called Miso to analyze it. Miso used sequential thinking to break down each suggestion, flagged AI-pattern structures in the feedback, and recommended rejecting most of it. I agreed with some points, disagreed with others, and implemented directly. The preview hook caught a type error before I saw it.

No pipeline, no flow chart. I called the agent I needed and moved on. The harness made that possible — a team that moves faster than I can alone.

[02]

Context files are runtime config, not documentation

Not one file — a layered stack that loads before the first prompt.

CLAUDE.md is the root — responsibility boundaries, collaboration flows, shared standards, conflict resolution. .claude/agents/ holds agent definitions — personas, judgment frameworks, output formats. Rules go in .claude/rules/ (diagram conventions, spacing enforcement). Handover files carry session context: what was done, what failed, what to pick up next. Plans and memory round out the stack.

Different project, different files — COLLABORATION.md, ARCHITECTURE.md, whatever fits. The structure changes. What doesn't: every .md Claude reads at startup constrains behavior before the conversation starts.

This project's files are written in Korean because that's how I think. The agents read them in Korean and respond in the language I use. It's not a translated framework — it's how I actually work.

HumanOrchestratorcalls + decides + resolvesConfigTeamInfraCLAUDE.mdroot configagents/6 personasrules/constraintshandover+ memorygovernsCoreSonaUXKaiDevMisoCopyHanaQAProjectMinaJamesRuntimeHooksauto-verifyMCP5 serversMemory.claude/ filescallsfeedback
[03]

Two gates, not one

The original workflow had one gate: QA after implementation. We learned the hard way that catching problems after code is written is expensive. Diagram coordinates were wrong, layouts overlapped, patterns were ignored — all things that a spec review would have caught before a single line was implemented.

Now there are two gates. Sona validates specs before Kai touches code: state coverage, pattern conflicts, edge cases, exact values and file references. If the spec isn't ready, it goes back. After implementation, Hana runs QA as before. The first gate stops bad specs before they become code. The second stops bad code before it ships.

HumanAgentDecideGet feedbackexternal inputWhich agent?copy → Misolayout → Sonaflow → JamesMisoanalyze copySonareview UXJamesmap flowsAccept?yeshuman decidesSpec ReviewSona validatesreviseValidateBuildImplementcode changesautoAuto-QAhook firesPASSShipFAIL→ update memory
[04]

Hooks enforce what rules can only advise

CLAUDE.md says "auto-QA after every implementation." That's a rule. The preview hook that fires after code is edited — that's enforcement. Rules get skipped. Hooks don't.

Preview hooks verify browser changes automatically — no manual trigger. settings.json defines file access and permission boundaries per agent. MCP connections extend reach: Preview for browser checks, Chrome for live interaction, Context7 for docs, Sequential Thinking for structured analysis.

When Kai writes code and a preview server is running, the hook fires. Doesn't ask permission, doesn't wait for a command. It checks for errors, verifies rendering, reports back.

RulesadvisesQA after implCLAUDE.mdTokens onlyno hardcodeWCAG AAaccessibilityScope checkno creepEnforcementenforcesPreview hookauto-firesToken auditHana QAA11y checkWCAG scanAuto-fail gateFAIL = FAILResultPass?ShipFixretry
[05]

The conductor model

I don't consult a flow chart before deciding which agent to call. I know my team. I call who I need, when I need them.

The harness doesn't orchestrate me — I orchestrate through it. When external feedback says "add stateless/stateful framing," I call Miso to analyze. Miso's analysis gave me data. I made the call. We moved on.

Every mistake becomes a new rule. Margin-based spacing broke a layout — so we added a spacing enforcement rule to CLAUDE.md and Hana's checklist. A DS token leaked into the portfolio theme — separation rule added. The harness gets tighter with every failure. Memory files persist across sessions through .claude/memory/ — so the next conversation starts where this one left off.

cat links.md