docs(projects): update claude-in-a-box project text and diagram

The box now runs an agent pipeline, assist mode and evals.
The old card and diagram only described rule loading and the commit hook.
This commit is contained in:
lobo committed 2026-10-21 08:27:27 +02:00
1 parent 910822028b
commit 82228e9141
4 files changed
+139 -89

No files matched your search

+98 -60
View File
@@ -1,6 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 630" width="1200" height="630" role="img" aria-labelledby="title desc">
<title id="title">Claude-in-a-Box</title>
<desc id="desc">A containerised agent: repository detection routes stack rules into the box, and a commit gate blocks anything with a failing build.</desc>
<desc id="desc">Repository detection loads the rules per stack and per repo into an agent pipeline: clarify, plan, implement, simplify, security when relevant, review and commit message, one agent per step with its model. The human approves the plan and every commit; review findings go back to the implementer for at most two rounds. Hooks outside the agents run a compile check at turn end, a commit gate, a secret guard and a work-mode guard.</desc>
<defs>
<linearGradient id="bg" x1="0" y1="0" x2="0" y2="1">
@@ -14,8 +14,8 @@
<marker id="arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="6" markerHeight="6" orient="auto-start-reverse">
<path d="M 0 0 L 10 5 L 0 10 z" fill="#4a5563"/>
</marker>
<marker id="arrowCyan" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="6" markerHeight="6" orient="auto-start-reverse">
<path d="M 0 0 L 10 5 L 0 10 z" fill="#26c6da"/>
<marker id="arrowOrange" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="6" markerHeight="6" orient="auto-start-reverse">
<path d="M 0 0 L 10 5 L 0 10 z" fill="#ffa726"/>
</marker>
</defs>
@@ -33,77 +33,115 @@
<text x="64" y="72" class="mono" fill="#26c6da" font-size="26" font-weight="600">claude-in-a-box</text>
<text x="64" y="102" class="sans lbl">the harness, not the prompt</text>
<!-- ── Left: repository detection ─────────────────────────── -->
<text x="64" y="176" class="sans cap">detect</text>
<g>
<rect x="64" y="196" width="228" height="62" rx="10" fill="#212a35" stroke="#2f3a47"/>
<text x="86" y="223" class="mono chip">pom.xml</text>
<text x="86" y="245" class="sans lbl" font-size="15">→ java / spring rules</text>
<rect x="64" y="188" width="228" height="52" rx="10" fill="#212a35" stroke="#2f3a47"/>
<text x="86" y="210" class="mono chip">pom.xml</text>
<text x="86" y="230" class="sans" fill="#8b97a6" font-size="15">→ java / spring rules</text>
</g>
<g>
<rect x="64" y="278" width="228" height="62" rx="10" fill="#212a35" stroke="#2f3a47"/>
<text x="86" y="305" class="mono chip">package.json</text>
<text x="86" y="327" class="sans lbl" font-size="15">→ typescript rules</text>
<rect x="64" y="248" width="228" height="52" rx="10" fill="#212a35" stroke="#2f3a47"/>
<text x="86" y="270" class="mono chip">package.json</text>
<text x="86" y="290" class="sans" fill="#8b97a6" font-size="15">→ typescript rules</text>
</g>
<g>
<rect x="64" y="360" width="228" height="62" rx="10" fill="#212a35" stroke="#2f3a47"/>
<text x="86" y="387" class="mono chip">pyproject.toml</text>
<text x="86" y="409" class="sans lbl" font-size="15">→ python rules</text>
<rect x="64" y="308" width="228" height="52" rx="10" fill="#212a35" stroke="#2f3a47"/>
<text x="86" y="330" class="mono chip">Assets/</text>
<text x="86" y="350" class="sans" fill="#8b97a6" font-size="15">→ unity rules</text>
</g>
<g>
<rect x="64" y="442" width="228" height="62" rx="10" fill="#212a35" stroke="#2f3a47" stroke-dasharray="4 4"/>
<text x="86" y="469" class="mono chip">&lt;repo&gt;.md</text>
<text x="86" y="491" class="sans lbl" font-size="15">→ architecture profile</text>
<rect x="64" y="368" width="228" height="52" rx="10" fill="#212a35" stroke="#2f3a47" stroke-dasharray="4 4"/>
<text x="86" y="390" class="mono chip">&lt;repo&gt;.md</text>
<text x="86" y="410" class="sans" fill="#8b97a6" font-size="15">→ architecture profile</text>
</g>
<path d="M 300 214 H 340" stroke="#4a5563" stroke-width="2" marker-end="url(#arrow)"/>
<path d="M 300 274 H 340" stroke="#4a5563" stroke-width="2" marker-end="url(#arrow)"/>
<path d="M 300 334 H 340" stroke="#4a5563" stroke-width="2" marker-end="url(#arrow)"/>
<path d="M 300 394 H 340" stroke="#4a5563" stroke-width="2" marker-end="url(#arrow)"/>
<path d="M 300 227 H 360" stroke="#4a5563" stroke-width="2" marker-end="url(#arrow)"/>
<path d="M 300 309 H 360" stroke="#4a5563" stroke-width="2" marker-end="url(#arrow)"/>
<path d="M 300 391 H 360" stroke="#4a5563" stroke-width="2" marker-end="url(#arrow)"/>
<path d="M 300 473 H 360" stroke="#4a5563" stroke-width="2" marker-end="url(#arrow)"/>
<!-- ── Centre: the container ──────────────────────────────── -->
<rect x="376" y="150" width="330" height="380" rx="18" fill="#1a222c" stroke="#26c6da" stroke-width="2"/>
<text x="400" y="184" class="sans cap" fill="#26c6da">container</text>
<rect x="404" y="212" width="274" height="96" rx="12" fill="#243040" stroke="#33475c"/>
<circle cx="440" cy="248" r="14" fill="none" stroke="#26c6da" stroke-width="2"/>
<circle cx="440" cy="248" r="5" fill="#26c6da"/>
<text x="470" y="246" class="sans" fill="#e3e9f0" font-size="21" font-weight="600">agent</text>
<text x="470" y="270" class="sans lbl" font-size="15">scoped context only</text>
<text x="424" y="296" class="mono" fill="#6c7887" font-size="14">/workspace · no root</text>
<text x="404" y="348" class="sans cap">pinned toolchain</text>
<g class="mono" font-size="16" fill="#9aa7b5">
<text x="404" y="380">sdkman · jdk · maven</text>
<text x="404" y="408">node · npm</text>
<text x="404" y="436">mcp: codegraph, jira (ro)</text>
<rect x="356" y="150" width="780" height="290" rx="18" fill="#1a222c" stroke="#26c6da" stroke-width="2"/>
<text x="380" y="184" class="sans cap" style="fill:#26c6da">agent pipeline</text>
<text x="1112" y="184" class="sans cap" text-anchor="end" style="font-size:13px;letter-spacing:.08em">one job each · fresh context · hand-over by files</text>
<g>
<rect x="380" y="230" width="90" height="84" rx="12" fill="#243040" stroke="#33475c"/>
<text x="425" y="262" class="mono" text-anchor="middle" fill="#e3e9f0" font-size="14" font-weight="600">clarify</text>
<text x="425" y="284" class="sans" text-anchor="middle" fill="#8b97a6" font-size="13">Fable</text>
<text x="425" y="302" class="sans" text-anchor="middle" fill="#6c7887" font-size="13">main session</text>
</g>
<rect x="404" y="462" width="274" height="44" rx="10" fill="#2a2118" stroke="#5c4326"/>
<text x="424" y="490" class="mono" fill="#ffa726" font-size="16">review subagents</text>
<path d="M 714 340 H 776" stroke="#26c6da" stroke-width="2" marker-end="url(#arrowCyan)"/>
<!-- ── Right: the gate ────────────────────────────────────── -->
<text x="792" y="176" class="sans cap">gate</text>
<rect x="792" y="196" width="344" height="288" rx="14" fill="#1c242e" stroke="#2f3a47"/>
<g class="mono" font-size="17">
<circle cx="822" cy="243" r="7" fill="#4caf50"/>
<text x="844" y="249" fill="#cdd6e0">lint</text>
<circle cx="822" cy="291" r="7" fill="#4caf50"/>
<text x="844" y="297" fill="#cdd6e0">build</text>
<circle cx="822" cy="339" r="7" fill="#ef5350"/>
<text x="844" y="345" fill="#cdd6e0">tests</text>
<g>
<rect x="486" y="230" width="90" height="84" rx="12" fill="#243040" stroke="#33475c"/>
<text x="531" y="262" class="mono" text-anchor="middle" fill="#e3e9f0" font-size="14" font-weight="600">plan</text>
<text x="531" y="284" class="sans" text-anchor="middle" fill="#8b97a6" font-size="13">Fable</text>
</g>
<g>
<rect x="592" y="230" width="90" height="84" rx="12" fill="#243040" stroke="#33475c"/>
<text x="637" y="262" class="mono" text-anchor="middle" fill="#e3e9f0" font-size="14" font-weight="600">implement</text>
<text x="637" y="284" class="sans" text-anchor="middle" fill="#8b97a6" font-size="13">Sonnet</text>
</g>
<g>
<rect x="698" y="230" width="90" height="84" rx="12" fill="#243040" stroke="#33475c"/>
<text x="743" y="262" class="mono" text-anchor="middle" fill="#e3e9f0" font-size="14" font-weight="600">simplify</text>
<text x="743" y="284" class="sans" text-anchor="middle" fill="#8b97a6" font-size="13">Opus</text>
</g>
<g>
<rect x="804" y="230" width="90" height="84" rx="12" fill="#243040" stroke="#33475c" stroke-dasharray="4 4"/>
<text x="849" y="262" class="mono" text-anchor="middle" fill="#e3e9f0" font-size="14" font-weight="600">security</text>
<text x="849" y="284" class="sans" text-anchor="middle" fill="#8b97a6" font-size="13">Opus</text>
<text x="849" y="302" class="sans" text-anchor="middle" fill="#6c7887" font-size="13">if relevant</text>
</g>
<g>
<rect x="910" y="230" width="90" height="84" rx="12" fill="#243040" stroke="#33475c"/>
<text x="955" y="262" class="mono" text-anchor="middle" fill="#e3e9f0" font-size="14" font-weight="600">review</text>
<text x="955" y="284" class="sans" text-anchor="middle" fill="#8b97a6" font-size="13">Fable</text>
</g>
<g>
<rect x="1016" y="230" width="90" height="84" rx="12" fill="#243040" stroke="#33475c"/>
<text x="1061" y="262" class="mono" text-anchor="middle" fill="#e3e9f0" font-size="14" font-weight="600">commit</text>
<text x="1061" y="284" class="sans" text-anchor="middle" fill="#8b97a6" font-size="13">Haiku</text>
<text x="1061" y="302" class="sans" text-anchor="middle" fill="#6c7887" font-size="13">message</text>
</g>
<path d="M 470 272 H 486" stroke="#4a5563" stroke-width="2" marker-end="url(#arrow)"/>
<path d="M 576 272 H 592" stroke="#4a5563" stroke-width="2" marker-end="url(#arrow)"/>
<path d="M 682 272 H 698" stroke="#4a5563" stroke-width="2" marker-end="url(#arrow)"/>
<path d="M 788 272 H 804" stroke="#4a5563" stroke-width="2" marker-end="url(#arrow)"/>
<path d="M 894 272 H 910" stroke="#4a5563" stroke-width="2" marker-end="url(#arrow)"/>
<path d="M 1000 272 H 1016" stroke="#4a5563" stroke-width="2" marker-end="url(#arrow)"/>
<path d="M 955 230 V 214 H 637 V 230" fill="none" stroke="#ffa726" stroke-width="2" marker-end="url(#arrowOrange)"/>
<text x="796" y="207" class="sans" text-anchor="middle" fill="#ffa726" font-size="13">findings · max 2 rounds</text>
<rect x="812" y="378" width="304" height="76" rx="10" fill="#2b1b1c" stroke="#7d3a3c"/>
<text x="836" y="408" class="mono" fill="#ef8b8d" font-size="17">git commit — blocked</text>
<text x="836" y="434" class="sans lbl" font-size="15">hook runs outside the agent</text>
<path d="M 531 314 V 352" stroke="#ffa726" stroke-width="2" marker-end="url(#arrowOrange)"/>
<path d="M 1061 314 V 352" stroke="#ffa726" stroke-width="2" marker-end="url(#arrowOrange)"/>
<rect x="486" y="352" width="90" height="40" rx="10" fill="#2a2118" stroke="#5c4326"/>
<text x="531" y="377" class="mono" text-anchor="middle" fill="#ffa726" font-size="14">you: ok?</text>
<rect x="1016" y="352" width="90" height="40" rx="10" fill="#2a2118" stroke="#5c4326"/>
<text x="1061" y="377" class="mono" text-anchor="middle" fill="#ffa726" font-size="14">you: yes?</text>
<text x="592" y="377" class="sans" fill="#8b97a6" font-size="14">RED after 2 failed fixes → you decide</text>
<text x="792" y="524" class="sans lbl" font-size="16">a failing build cannot be argued with</text>
<text x="380" y="424" class="mono" fill="#6c7887" font-size="13">size S: clarify → implement → commit</text>
<text x="1112" y="424" class="mono" text-anchor="end" fill="#6c7887" font-size="13">Fable budget &lt; 20% → Opus, shown in statusline</text>
<text x="64" y="462" class="sans cap">hooks · outside every agent, no way around</text>
<g>
<rect x="64" y="474" width="256" height="66" rx="10" fill="#1c242e" stroke="#2f3a47"/>
<text x="84" y="501" class="mono" fill="#cdd6e0" font-size="15">turn end</text>
<text x="84" y="524" class="sans" fill="#8b97a6" font-size="13">compile or type check</text>
</g>
<g>
<rect x="336" y="474" width="256" height="66" rx="10" fill="#2b1b1c" stroke="#7d3a3c"/>
<text x="356" y="501" class="mono" fill="#ef8b8d" font-size="15">git commit → gate</text>
<text x="356" y="524" class="sans" fill="#8b97a6" font-size="13">build + tests · red blocks</text>
</g>
<g>
<rect x="608" y="474" width="256" height="66" rx="10" fill="#1c242e" stroke="#2f3a47"/>
<text x="628" y="501" class="mono" fill="#cdd6e0" font-size="15">secret guard</text>
<text x="628" y="524" class="sans" fill="#8b97a6" font-size="13">no reads of .env, keys, tokens</text>
</g>
<g>
<rect x="880" y="474" width="256" height="66" rx="10" fill="#1c242e" stroke="#2f3a47"/>
<text x="900" y="501" class="mono" fill="#cdd6e0" font-size="15">work-mode guard</text>
<text x="900" y="524" class="sans" fill="#8b97a6" font-size="13">assist: core code stays yours</text>
</g>
<line x1="64" y1="566" x2="1136" y2="566" stroke="#2a333e"/>
<text x="64" y="598" class="mono" fill="#5b6673" font-size="15">docker · claude code · mcp · hooks</text>
<text x="64" y="598" class="mono" fill="#5b6673" font-size="15">rootless container · pinned toolchains · mcp: codegraph, jira (ro), gitea · evals</text>
</svg>

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 9.6 KiB