Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
git clone --depth 1 https://github.com/zhyx12/projtoolWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/commands/zhyx12/projtool/exp-run)<a href="https://agentmods.dev/commands/zhyx12/projtool/exp-run"><img src="https://agentmods.dev/badge/commands/zhyx12/projtool/exp-run/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/commands/zhyx12/projtool/exp-run"><img src="https://agentmods.dev/badge/commands/zhyx12/projtool/exp-run.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00027 | $0.00548 |
| Opus 5.5 | $0.00011 | $0.00219 |
| Sonnet 5.5 | $0.00005 | $0.00110 |
| Haiku 4.5 | $0.00003 | $0.00055 |
Grade A, and why
exp-run scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2mo ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 50 lines — stays where its author put it; the contents beside it link to each section on GitHub.
You are running the user's /exp-run command. Treat this as a request to
launch training, end-to-end, with minimal back-and-forth. Read
.proj-tool/project.toml for paths and entrypoint conventions.
Steps
-
Verify branch + cleanliness.
- Call
mcp__projtool__worktree_status. If the current worktree is themainbranch, refuse — training only happens onexp/*branches. Tell the user tomcp__projtool__new_experimentfirst. - If dirty: ask the user whether to commit-and-train or abort. Don't pass
allow_dirty=trueunless the user explicitly says so.
- Call
-
Provision the instance.
- Call
mcp__projtool__instance_upwith the experiment_id from the branch name (exp/<topic>→exp-<topic>). - The pre-tool hook may warn if a binding already exists; act on its output.
- Call
-
Pick a config.
- List
.proj-tool/project.toml[entrypoint].config_dir. - If the user provided a config in the slash-command argument, use it. Otherwise ask which config to run.
- List
-
Start training.
- Call
mcp__projtool__start_trainingwithexperiment_idandconfig_path. The tool flushes the code sync, writes the manifest stub, and starts a tmux session on the remote. - Report the
run_idand the predicted duration (read it from the config if present, otherwise say "unknown — I'll poll").
- Call
-
Hand back to the user.
- Tell them whether you're going to poll proactively or wait for them to come back.
- Do NOT block the conversation by polling in a tight loop.
On failure
start_trainingreturning a hook block: explain the block (dirty worktree / unpushed commit / no instance), do not retry blindly.instance_upfailing on quota: tell the user, don't loop.sync_flushtaking >2min: ask the user whether to continue waiting or diagnose withmcp__projtool__diagnose.
Reminder
The full workflow rules live in .claude/skills/ml-research-workflow/. Load
that skill if anything below the surface is unclear.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2mo ago First seen · 50 lines · 27 tokens per session scan A 21c0d65706db
exp-run is a command published in the GitHub repository zhyx12/projtool (1 stars, last pushed 2mo ago), licensed MIT. It adds 27 tokens to every session and 548 once invoked, about $0.0001 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
exp-run compared with commands from other repositories
| Mod | Type | Stars | Last push | Licence | Scan | Tokens | Works with |
|---|---|---|---|---|---|---|---|
| exp-runzhyx12/projtool | Command | 1 | 2mo ago | MIT | A | 27 | Claude Code |
| bootmicrosoft/PromptKit | Command | 113 | 9d ago | MIT | A | 14 | GitHub Copilot |
| music-suno-promptfrankxai/Starlight-Intelligence-System | Command | 10 | yesterday | MIT | A | 23 | Claude Code |
| audit-promptOwl-Listener/ai-design-skills | Command | 199 | 5mo ago | MIT | A | 13 | Claude Code |
| laravel-ai-sdkjpcaparas/superpowers-laravel | Command | 157 | 4mo ago | MIT | A | 27 | Claude Code |
| vlm-ocr-evaluationscdenney/open-science-skills | Command | 69 | yesterday | none | A | 0 | Claude Code |
| dare-llm-integrationdewtech-technologies/dare-method | Command | 5 | 3mo ago | MIT | A | 0 | Claude Code |