SOC 직업 분류 기준
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/mangowhoiscloud/crumb --skill crumb명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SKILL.md 표시 중
Recommend a Crumb preset (ambient / video-research / mock) based on the user's setup intent. Trigger on "preset 추천", "추천해줘", "어떤 셋업", "which preset", "suggest a config", "혼자 돌릴까", or hints about installed tools / API keys. Output: recommended preset + reason + alternatives. Default recommendation = ambient (no --preset, entry host follows every actor). Crumb suggests only — user picks. Read-only. Do NOT trigger for game pitches (use `crumb` skill) or status checks (use `crumb-status` skill).
Audit a feature/component for defects by cross-referencing with mature OSS patterns. Produce a prioritized matrix of defects + improvement proposals BEFORE implementing. Use when user says "결함 더 파고들어", "audit this", "find more defects", "improvement proposals first", "이 기능에서 뭐가 잘못됐는지 찾아".
>-
| name | crumb |
| description | >- |
Multi-agent collaboration tool for the Bagelcode new-IP team (mobile casual). One natural-language pitch and Planner Lead → Builder → qa_check effect → Verifier (CourtEval) collaborate to ship a Phaser 3.80 multi-file PWA under artifacts/game/ plus spec.md + DESIGN.md + tuning.json.
3-layer separation (
wiki/synthesis/bagelcode-host-harness-decision.md):
- NL interface = Claude Code (this skill's host) — top of the multi-host 4-entry list
- NL → backend routing = this SKILL.md +
agents/*.mdsandwiches + 5 procedural skills (skills/*.md)- Orchestration control plane =
src/{transcript,reducer,validator,adapter,dispatcher,loop}/v0.1 highlights (
wiki/concepts/bagelcode-system-architecture-v0.1.md):
- Engineering Lead → builder + verifier actor split (true cross-provider boundary)
--cross-providerflag →--preset <name>(named preset, BYO)- 38 kind → 39 kind (+
qa.resultdeterministic effect)- scores → D1-D6 source-of-truth matrix (reducer-auto / qa-check-effect / verifier-llm — single origin per dim; D3/D5 split into LLM + auto components combined deterministically in code)
- Multi-host 4-entry (Claude Code / Codex CLI / Gemini CLI / headless) + ambient fallback
- MCP Provider (cross-host fan-in) + auth-manager (
crumb doctor) + persistence boost (crumb resume)
NL trigger recognition:
mock, "video research" / "YouTube 영상 분석" → video-research, "cross-vendor verifier" / "Codex 빌더" → per-actor --bind flags (no named cross-3way preset since 2026-05-07; explain the binding override path)mcp__crumb__crumb_status + mcp__crumb__crumb_suggest instead of spawning a new sessionDo NOT activate on:
wiki/ only)The Claude Code SessionStart hook (.claude/hooks/session-start.cjs) scans ~/.crumb/projects/<id>/sessions/*/meta.json at startup and injects ULIDs + goals + last kinds for any session with status ∈ {running, paused} into the system context. When the user's utterance is ambiguous between a new game pitch and a follow-up:
mcp__crumb__crumb_status + mcp__crumb__crumb_suggest (or guide the user to the /crumb-watch <ulid> slash command).mcp__crumb__crumb_run regardless of existing sessions (concurrent sessions are fine).Additionally, the Stop hook (.claude/hooks/stop.cjs) emits one line per turn: [crumb] <ulid> · <last_kind> · agg=N verdict=X into the system context — keeps progress visibility inline without requiring the user to ask.
From the user's utterance:
/crumb prefix, Korean particles, sentence-ending markers like "만들어줘".crumb doctor and show the preset list, then defer the choice.cross-3way named preset was retired 2026-05-07 — if user types it, recommend per-actor --bind flags instead (e.g. --bind builder=codex --bind verifier=gemini-cli:gemini-3.1-pro-preview).→ Core principle: provider × harness × model is the user's call. Crumb is a helper, never a default-setter (Anthropic 2026-03 "wrong tradeoff" lesson).
mcp__crumb__crumb_run (preferred)mcp__crumb__crumb_run({
goal: "<extracted goal>",
preset: "<name>" /* optional — pass only when user named one */,
// adapter / idle_timeout_ms / label are also optional
})
→ The MCP tool spawns crumb run as a detached subprocess and immediately returns { session_id, session_dir, log_path }. The host CLI is never blocked. Report the session ULID to the user and announce the next step.
Bash fallback — for environments where the MCP server is not active (use the installed
crumbbin ornpx tsx):crumb run --goal "$GOAL" ${PRESET:+--preset "$PRESET"} # Or, without npm link: npx tsx "$CLAUDE_PROJECT_DIR/src/index.ts" run --goal "$GOAL"Prefer
mcp__crumb__crumb_runwhenever possible — no permission prompt, one shot.
Environment doctor — when the user asks "어떤 preset 가능?" or you suspect the environment is incomplete:
npx tsx src/index.ts doctorOutputs 4 host entries × adapter health × installed/authenticated preset matrix. The user picks — Crumb only surfaces the runnable options.
While the session runs, surface only meaningful events to the user:
tail -f sessions/<ulid>/transcript.jsonl | jq -r '
select(.kind | IN("goal","question.socratic","spec","build","qa.result","judge.score","done","error","handoff.requested")) |
"[\(.ts | split("T")[1] | split(".")[0])] \(.from)\t\(.kind)\t\(.body // (.data | tostring) | .[0:120])"
'
Skip these kinds: ack, audit, tool.call, tool.result, agent.thought_summary. Surface these: the 4 sub-steps of step.judge (grader/critic/defender/regrader) + qa.result (the v0.1 deterministic ground truth).
While the session runs, user intervention lands on the same transcript line regardless of which of the 5 surfaces is used — routing is source-agnostic (agents/coordinator.md Routing Rules).
Preference order (on top of Claude Code):
mcp__crumb__crumb_intervene MCP tool — direct call from NL. One permission prompt and done./crumb-approve <ulid>, /crumb-veto <ulid> <reason>, /crumb-redo <ulid>, /crumb-pause <ulid> [@actor], /crumb-resume <ulid> [@actor], /crumb-watch <ulid>, /crumb-cancel <ulid>. Each is a thin wrapper around the MCP tool above.inbox.txt (headless / other host).crumb event CLI — direct JSON event input (low-level).crumb tui slash bar (only when the user has a separate terminal open).mcp__crumb__crumb_intervene (Claude Code preferred)mcp__crumb__crumb_intervene({
session: "<ulid>",
action: "approve" | "veto" | "pause" | "resume" | "redo" | "goto" | "append" | "note" | "reset_circuit" | "swap" | "free",
body?: "<reason or free text>",
target_actor?: "builder" | "verifier" | ...,
swap_to?: "<adapter>" /* required only when action=swap */,
})
→ Internally appends one line to sessions/<ulid>/inbox.txt. The watcher (500 ms tick) parses it into a transcript event. Grammar matches src/inbox/parser.ts.
inbox.txt (other hosts / fallback)SESSION_ID="<active ulid>"
echo "@builder use red/green palette only" >> sessions/$SESSION_ID/inbox.txt
The 500 ms watcher parses each line and appends it to the transcript. This skill should map natural-language user input like "빌더한테 빨강/초록만 쓰라고 해" into the slash-bar grammar above and append to the inbox.
crumb tui open)/approve /veto <id> /pause [@<a>] [reason]
/resume [@<a>] /goto <a> [body] /swap <from>=<adapter>
/reset-circuit <a|all> /append [@<a>] <text>
/note <text> /redo [body] /q /quit
@<a> <body> (free text mention)
The TUI and inbox.txt share one grammar (src/inbox/parser.ts). Bidirectional muscle-memory compatible.
SESSION_ID="<active ulid>"
echo '{"from":"user","kind":"user.intervene","body":"<original text>","data":{"target_actor":"builder","sandwich_append":"phaser 3.80 only"}}' \
| CRUMB_TRANSCRIPT_PATH="sessions/$SESSION_ID/transcript.jsonl" \
CRUMB_SESSION_ID="$SESSION_ID" \
CRUMB_SESSION_DIR="sessions/$SESSION_ID" \
crumb event
data field semantics (shared by all 5 user.* events)data.<key> | Effect (reducer handling) |
|---|---|
target_actor: <actor> | Fact tagged @<actor> — surfaced in the next <actor> spawn's sandwich (no routing change). |
goto: <actor> | next_speaker = <actor> forced + immediate spawn (LangGraph Command(goto)). |
swap: { from: <a>, to: <adapter> } | progress_ledger.adapter_override[a] = <adapter> (Paperclip BYO swap). |
reset_circuit: <a> | true | Clears circuit_breaker[<a>] (or all when true). |
sandwich_append: <text> | Adds a fact with category='sandwich_append' — the dispatcher concatenates it onto every subsequent matching spawn's system prompt (v0.2.0 G4). |
actor: <actor> (only on user.pause / user.resume) | Pause/resume that single actor instead of the whole session. |
Frontier mapping: LangGraph
Command(goto/update={...})53/60 + Paperclip BYO swap 38/60 + CodexAPPEND_SYSTEM.md38/60. Background:wiki/synthesis/bagelcode-user-intervention-frontier-2026-05-02.md.
The reducer applies it and updates progress.next_speaker (typically falls back to planner-lead and emits spec.update; if data.goto is set, jumps directly to the named actor).
When kind=done arrives:
✅ session complete — sessions/<ulid>/
▸ artifacts/game/ (multi-file PWA — open game/index.html)
▸ artifacts/spec.md (acceptance criteria + rule book)
▸ artifacts/DESIGN.md (color / mechanics / motion)
▸ artifacts/tuning.json (balance numbers)
▸ transcript.jsonl (replay-deterministic, 40 kind × 11 field × 8 from)
▸ judge.score (D1-D6) (source-of-truth matrix: reducer-auto / qa-check-effect / verifier-llm)
If the user says "열어줘" / "play":
open sessions/<ulid>/artifacts/game/index.html
If the session is Ctrl-C'd or crashes mid-run:
npx tsx src/index.ts resume <session-id>
Reads the adapter-native session id (Claude Code --resume / Codex --thread) from metadata and restores host-harness state, preserving cache_carry_over.
provider × harness × model is the user's call. Crumb only surfaces what crumb doctor says is runnable; it does not force a default.
| Preset | Composition | Install / auth required | Use case |
|---|---|---|---|
| (no preset) ambient ★ | Every actor follows the entry host (Claude Code → Opus 4.7) — Crumb does NOT decide bindings | One auth on the entry host | Recommended default — strongest model your env offers across every actor. |
video-research | researcher=gemini-sdk (Gemini 3.1 Pro video Part) / rest=ambient | claude + GEMINI_API_KEY | Use case — video evidence path: gameplay clip → mechanic extraction. |
mock | All actors = mock adapter, deterministic | 0 | Use case — CI / evaluator env: works without keys, replay-deterministic |
→ Detailed preset format: .crumb/presets/*.toml. The user picks. Crumb does not guess or force.