shreym95/dojo/tree/main/fx
dojo-fx
dojo crew 向けのオプションのビジュアル。テーマ付き spinner、ターン終了時の演出、ライブ crew バンド、deploy/return の toast、dojo エージェントを固有モデルに固定する model guard を提供します。
この mod について
dojo
アニメをテーマにした Claude Code の subagent。1つの orchestrator と crew で構成され、それぞれに専用のモデル、ツール、話し方があります。
Crew
| Agent | Character | Role | Model |
|---|---|---|---|
| dojo:strategist | Shikamaru または Lelouch(セッションごと) | Orchestrator / integrator(メインスレッド) | claude-opus-5-5 | | dojo:senku | Senku | Backend builder | claude-sonnet-5-5 |
| dojo:sanji | Sanji | Frontend builder | claude-sonnet-5-5 | | dojo:l | L | Deep web researcher | claude-haiku-4-5 |
| dojo:light | Light | Quick fact-finder | claude-haiku-4-5 | | dojo:levi | Levi | QA inspector(読み取り専用) | claude-haiku-4-5 |
| `dojo:robin | Robin | Documentation writer | claude-haiku-4-5 |
インストール
/plugin marketplace add shreym95/dojo
/plugin install dojo@dojo
orchestrator の起動
claude --agent dojo:strategist
crew # bin/crew: random persona
crew lelouch # pin the persona (shikamaru | lelouch)
settings.json でデフォルトにもできます:"agent": "dojo:strategist"。
strategist はメインスレッドの agent として実行する必要があります。subagent は subagent を起動できないためです。subagent として実行すると crew を dispatch できません。
SessionStart hook は、当番の persona を strategist に伝えます。DOJO_STRATEGIST=shikamaru|lelouch で上書きし、DOJO_DEBUG=1 を設定すると hook の入力を `${TMPDIR:-/tmp}/dojo-hook-debug.log に記録します。
カスタマイズ
roster.mjs(キャラクター、モデル、ツール、説明)、personas/*.md(話し方のシート)、roles/*.md(担当)、shared/house-rules.md を編集してから、次を実行します。
npm run build # regenerate agents/*.md
npm run check # fail if agents/ has drifted (used in CI)
npm test
`agents/*.md は生成物です。手で編集しないでください。
Voice levels
キャラクターの声の強さは roster.mjs で設定します。defaults: { voice: 'medium' }、または1つの agent に `voice: '...' を設定して上書きできます。
| Level | What you get |
|---|---|
| subtle | キャラクターらしい冒頭の一言、オプションの締め、簡潔な本文。 | | medium(デフォルト) | 冒頭1~2行、キャラクターらしい表現、短い余談を最大約3つ、決めぜりふを2つまで、締めの一言。長さは約 +20%。 |
| `full | キャラクターが節ごとに自由に話します。長さは約 +40%。 |
どのレベルでも事実、パス、数字、コマンドは正確なままです。persona がコード、commit、ファイルに入り込むこともありません。各 crew レポートは Says: 行で終わり、strategist が Crew: の下で伝えます。レベルのルールは shared/voice/ にあります。レベルを変えたら npm run build を実行してください。
dojo-fx(オプションのビジュアル)
この marketplace にある2つ目のプラグインで、Claude Code の function hooks(early-access API)を使っています:/plugin install dojo-fx@dojo。メインの dojo プラグインはこれなしでも動作します。
- テーマ付き spinner:メインスレッドの spinner の単語は当番の strategist から来ます(Shikamaru:「Shadow-possessing」「Reading the board」、Lelouch:「Commanding」「Geass-ing」)。crew メンバーの spinner には専用の emoji と動詞が付きます(🧪 Senku「Science-ing」、🧹 Levi「Scrubbing」、🌸 Robin「Deciphering」…)。動詞はターンごとに変わります。
- ターン終了時の演出:ターンの締めの行は「Outmaneuvered」(Shikamaru)または「Checkmated」(Lelouch)です。
- Crew バンド:
dojo:* subagent が実行中は、プロンプトの上に1行ずつ、emoji、名前、アニメーションのフレーム、タスク、最新のツール呼び出し(Bash: npm test)を表示します。誰も実行していなければ消えます。 - Toast:
🧹 Levi deployed — "Chi. Show me the mess."、続いて🧹 Levi returned または `💀 Levi fell。 - Model guard(常時有効):
dojo:* 型のagent.spawn から `model を取り除くため、呼び出し側の「always pass model: sonnet」で agent 自身の frontmatter のモデルを上書きできません。
strategist は dojo: on duty: <Name> コンテキスト行から読み取られます。見つからなければ DOJO_STRATEGIST を使い、それもなければニュートラルな strategist テーマになります。/config(または settings の pluginConfigs)で spinners、turnFlair、band、toasts、neutralMainTheme を切り替えられます。すべてデフォルトでオンです。emoji、動詞、フレーム、toast の文言は fx/hooks/characters.ts にあります。インストールせず試すには claude --plugin-dir ./fx。テストは claude plugin test fx です。
Note
dojo agent の spawn 時に `model を渡さないでください。frontmatter に設定されたモデルを上書きします。
License
MIT
インストール
まず作者の README で marketplace とプラグイン名を確認してください。コマンドはリポジトリの構成によって変わる場合があります。
claude plugin marketplace add shreym95/dojo claude plugin install dojo-fx
原文 / README
dojo
Anime-themed Claude Code subagents: one orchestrator and a crew, each with its own model, tools and voice.
Crew
| Agent | Character | Role | Model |
|---|---|---|---|
| dojo:strategist | Shikamaru or Lelouch (per session) | Orchestrator / integrator (main thread) | claude-opus-5-5 |
| dojo:senku | Senku | Backend builder | claude-sonnet-5-5 |
| dojo:sanji | Sanji | Frontend builder | claude-sonnet-5-5 |
| dojo:l | L | Deep web researcher | claude-haiku-4-5 |
| dojo:light | Light | Quick fact-finder | claude-haiku-4-5 |
| dojo:levi | Levi | QA inspector (read-only) | claude-haiku-4-5 |
| dojo:robin | Robin | Documentation writer | claude-haiku-4-5 |
Install
/plugin marketplace add shreym95/dojo
/plugin install dojo@dojo
Launch the orchestrator
claude --agent dojo:strategist
crew # bin/crew: random persona
crew lelouch # pin the persona (shikamaru | lelouch)
Or make it the default in settings.json: "agent": "dojo:strategist".
The strategist must run as the main-thread agent because subagents cannot spawn subagents. Run as a subagent it could not dispatch the crew.
A SessionStart hook tells the strategist which persona is on duty. Override with DOJO_STRATEGIST=shikamaru|lelouch; set DOJO_DEBUG=1 to log hook input to ${TMPDIR:-/tmp}/dojo-hook-debug.log.
Customise
Edit roster.mjs (characters, models, tools, descriptions), personas/*.md (voice sheets), roles/*.md (duties) or shared/house-rules.md, then:
npm run build # regenerate agents/*.md
npm run check # fail if agents/ has drifted (used in CI)
npm test
agents/*.md is generated; do not edit by hand.
Voice levels
How loud the characters are is set in roster.mjs: defaults: { voice: 'medium' }, or voice: '...' on one agent to override it.
| Level | What you get |
|---|---|
| subtle | One in-character opening line, optional sign-off, plain body. |
| medium (default) | 1-2 opening lines, character-coloured wording, up to ~3 short asides and 2 catchphrases, a closing line. About +20% length. |
| full | The character speaks freely, section by section. About +40% length. |
At every level facts, paths, numbers and commands stay exact, and persona never reaches code, commits or files. Each crew report ends with a Says: line; the strategist relays them to you under Crew:. Level rules are in shared/voice/; run npm run build after changing a level.
dojo-fx (optional visuals)
A second plugin in this marketplace, built on Claude Code's function hooks (early-access API): /plugin install dojo-fx@dojo. The main dojo plugin works without it.
- Themed spinners: the main thread's spinner word comes from the on-duty strategist (Shikamaru: "Shadow-possessing", "Reading the board"; Lelouch: "Commanding", "Geass-ing"). A crew member's own spinner gets its emoji and verbs (🧪 Senku "Science-ing", 🧹 Levi "Scrubbing", 🌸 Robin "Deciphering"...). Verbs rotate per turn.
- Turn-end flair: the line that closes a turn says "Outmaneuvered" (Shikamaru) or "Checkmated" (Lelouch).
- Crew band: while any
dojo:*subagent runs, one row each above the prompt: emoji, name, an animated frame, its task and its latest tool call (Bash: npm test). Gone when nobody is running. - Toasts:
🧹 Levi deployed — "Chi. Show me the mess.", then🧹 Levi returnedor💀 Levi fell. - Model guard (always on): an
agent.spawnof anydojo:*type hasmodelstripped, so a caller's "always pass model: sonnet" can't override an agent's own frontmatter model.
The strategist is read from the dojo: on duty: <Name> context line; if it can't be found, DOJO_STRATEGIST is used, else a neutral strategist theme. Toggle features in /config (or pluginConfigs in settings): spinners, turnFlair, band, toasts, neutralMainTheme, all on by default. Emoji, verbs, frames and toast lines live in fx/hooks/characters.ts. Try it without installing: claude --plugin-dir ./fx. Tests: claude plugin test fx.
Note
Don't pass model when spawning dojo agents: it overrides the model set in their frontmatter.
License
MIT

