shreym95/dojo/tree/main/fx
dojo-fx
为 dojo crew 提供可选视觉效果:主题 spinner、回合结束装饰、实时 crew 状态带、部署/返回 toast,以及让 dojo agent 使用各自模型的模型保护。
关于这个 mod
dojo
以动漫为主题的 Claude Code subagent:一个 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。
SessionStart hook 会告诉 strategist 当前值班的 persona。使用 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 是生成文件;不要手动编辑。
语气等级
角色说话有多活跃,由 roster.mjs 设置:defaults: { voice: 'medium' },或者在单个 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 中的第二个插件,基于 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 运行时,提示列上方会出现一行:emoji、名称、动画帧、任务和最新工具调用(Bash: npm test)。无人运行时消失。 - Toast:
🧹 Levi deployed — "Chi. Show me the mess.",随后是🧹 Levi returned 或 `💀 Levi fell。 - 模型保护(始终开启):任何
dojo:* 类型的agent.spawn 都会移除 `model,因此调用方的「always pass model: sonnet」不能覆盖 agent 自己 frontmatter 中的模型。
strategist 从 dojo: on duty: <Name> 上下文行读取;找不到时使用 DOJO_STRATEGIST,否则使用中性的 strategist 主题。在 /config(或设置中的 pluginConfigs)切换功能:spinners、turnFlair、band、toasts、neutralMainTheme 默认全部开启。emoji、动词、帧和 toast 文案位于 fx/hooks/characters.ts。不安装也可以试用:claude --plugin-dir ./fx。测试:claude plugin test fx。
注意
生成 dojo agent 时不要传 `model:它会覆盖 frontmatter 中设置的模型。
许可证
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

