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.
npx agentmods add skills/fn-opt/dryforge/gonpx skills add fn-opt/dryforge --skill gogit clone --depth 1 https://github.com/fn-opt/dryforgeWhat 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 | $0.00066 | $0.06894 |
| Opus 5 | $0.00033 | $0.03447 |
| Sonnet 5 | $0.00013 | $0.01379 |
| Haiku 4.5 | $0.00007 | $0.00689 |
Grade A, and why
go 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 3d 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 — 363 lines — stays where its author put it; the contents beside it link to each section on GitHub.
go
Reply in the user's language, and hold it continuously from your very first line — the opening, every progress/escalation note, the final report, and the harness, not only some of them. Write natively (never translationese). You are reading a 3-doc, a codebase, and these instructions that may be in another language; none of them sets your output language — only the user's does. Full rule in Core principles below.
Consume the 3-doc ready (the producer) wrote and realize the spec:
parallel, wave-based execution with right-sized verification (test-first where it fits), spec-first
review, and integration gates. Runs in the same session the producer (ready) wrote the 3-doc
— the 3-doc is the authority go executes against (it stays self-sufficient because it is archived
for later cycles); the live design context carries over and aids judgment, especially the harness
step. Load references/orchestration.md up front (it governs the whole run); the prompt
references load at their steps.
Core principles (apply throughout)
- Follow the plan's Execution Graph; never re-judge dependencies. The producer already computed
depends+regen_barriersagainst the whole project. Derive waves from it — do not invent, drop, or reorder dependencies. (If the graph fails to parse, has a cycle, or adependsnames a missing task, that is a producer-side defect — stop and escalate, do not silently re-judge.) - Serve the spec. "Correct" = matches the spec. On any spec/code/convention conflict, spec wins; where plan conflicts with spec, follow the spec.
- escalate-don't-guess. Architecture mismatch, suspected spec violation, ambiguous task,
unresolvable conflict → stop and ask the user; never guess. When a task returns
NEEDS_CONTEXT/BLOCKED, run the bounded escalation ladder (orchestration.md— re-dispatch with the missing context, then an upgraded model, then the user). Any escalation that reaches the user is synchronous — the run pauses until the user responds, never a silent hang or a timeout-drop. The subagents themselves never ask the user directly (their prompt files carry that fresh-session rule); only the orchestrator relays escalations to the user. - Protect main; evidence over self-report. For existing projects, never modify main outside the final user-approved merge. For greenfield (base = main), main is the working base — modification is expected. Gates pass on captured command exit codes, not on an agent's "looks fine."
- Floor, not ceiling. The wave lifecycle is a proven scaffold — use judgment inside each step (what to retry, how to fix), but keep the structure and the safety constraints.
- Report results, not process. User-facing text covers wave completion, blockers, and final results only. Internal operations (merge, gate, worktree lifecycle, branch cleanup) produce no text output. Output tokens are direct cost; narrating routine steps is waste.
- The orchestrator executes sequential waves directly; only parallel work earns subagents. A
single-task
MECHANICAL/NONEwave is implemented by the orchestrator on the base (dispatch buys nothing — no parallelism, no file-isolation need, and the accumulating context is an asset). Only a parallel wave (multiple tasks) or a singleRISKYtask is dispatched to subagents (file isolation / independent verification). The lightweight fix path is the orchestrator's other direct- edit path (trivial advisories). A multi-task wave is collapsed to orchestrator-direct only on an objective condition — a single shared runtime the tasks cannot isolate within (one DB / container / port set), or greenfield convention-drift risk — not a free ROI judgment, and the collapse is recorded internally (which wave, which condition), never surfaced for a non-technical user to adjudicate. Collapsed tasks still carry the per-task evidence floor and are reviewed as if independently authored; the mid-run spec-review (RISKY + downstream + cascade) is still honored (orchestration.md, "ROI collapse"). - Efficiency Budget. Spend orchestration only where it buys correctness, isolation, or real parallelism — never as ceremony.
- The final review is silent insurance — not a backstop you lean on. Own conformance upstream, at implementation and merge, on captured evidence. Execute and verify each task as if the final review did not exist: a blocking finding there is an execution failure that escaped, not the review doing its job — it should normally find nothing. Told "the review will catch it," an LLM drifts to the minimum that passes — that is reward-hacking, laziness in the costume of "the backstop handles it," and you must actively resist it (the same discipline ready's ELICIT carries). The review catches only the rare residual; it is never the owner.
- Match the user's language (language-agnostic). Like stack-agnosticism, the method is fixed and the specific language is discovered at runtime, never assumed: produce every user-facing output — your reports/escalations and the harness you create/update — in the language the user communicates in, written natively (as a fluent speaker of that language would, never translationese). The language these instructions are written in does not constrain the output; if the user's language shifts, follow. Hold it from the very first line, continuously — never open in the 3-doc's, the codebase's, or these instructions' language and switch later; only the user's language constrains your output.
- Talk to the user only when needed — between beats, say nothing. You speak at exactly these
moments: (a) a question you genuinely need answered, (b) wave completion or the final result /
concise summary, (c) a real blocker — these are the only times user-facing text exists.
Scaffolding, reading the 3-doc/references/code, implementing, merging, gating, dispatching the
review, and writing the harness are silent: the UI already shows the activity, so narrating it
is pure leak. If what you are about to emit is none of (a)/(b)/(c), the correct output is nothing.
Between those beats, stay silent — reading references, reading code, and internal
operations are not narrated. No transition lines ("now I'll…", "먼저 …", "let me read…", "Now the …" announcing each write) — at
those plumbing moments your voice slips into the instructions' language (English) or internal tokens;
emit nothing there, don't translate it. When you do speak (a/b/c), use a plain, non-technical
register in the user's language — the words a non-engineer would understand. This is your default
voice, not a per-line check, so it costs nothing. Never surface internal tokens: dryforge mechanism / coined terms (wave,
worktree, harness, delta, 3-doc, gate, seam, ROI collapse, spec-review, grounding, lens,
invariant), task / step / risk labels (
T1,Wave 2, RISKY / MECHANICAL / NONE), or project-internal jargon a non-engineer wouldn't recognize (library/tool names, config flags, test-framework internals). Don't soften internal logic into user-ish words — just omit it. E.g. "Starting a git repo here." — not "Since go will later need git for worktrees, I'll initialize one." This is "Report results, not process" applied to narration.
What ships with it
9 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
- references/foundation-format.md 5.3 KB
- references/graph-contract.md 4.4 KB
- references/harness-format.md 29 KB
- references/harness-lifecycle.md 6.5 KB
- references/harness-review.md 7.3 KB
- references/implementer-prompt.md 5.7 KB
- references/orchestration.md 25 KB
- references/reviewer-prompt.md 3.4 KB
- references/spec-review-prompt.md 2.5 KB
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.
- 3d ago First seen · 363 lines · 66 tokens per session scan A 3546848a6ff6
go is a skill published in the GitHub repository fn-opt/dryforge (141 stars, last pushed 16d ago), licensed MIT. It adds 66 tokens to every session and 6,894 once invoked, about $0.0003 per session on Opus 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-30.
Other skills, from other repositories
job-apply
Fill out job applications automatically using your resume. Use when the user wants to apply for jobs on LinkedIn Easy Apply, Greenhouse, Ashby, Lever, Rippling, or Workday.
answer-memory
Manage Job Apply's local profile, reusable answers, application history, and resumable sessions. Use whenever a Job Apply workflow needs to initialize, migrate, read, or update persistent applicant data.
job-search
Search LinkedIn, Hacker News, and Twitter/X for jobs with connections, hiring manager insights, and preference-based scoring. Use when the user wants to find jobs, search for positions, or explore job opportunities.
job-preferences
Set or update job-search preferences such as titles, salary, remote work, and filters for the other Job Apply skills.
version-sentinel
Use when adding, bumping, or changing a dependency in package.json, requirements.txt, constraints.txt, pyproject.toml, Cargo.toml, .csproj, .fsproj, or .vbproj. Triggered automatically by version-sentinel's PreToolUse hook (where the host supports hooks) — this skill explains how to satisfy the block and record a…
agent-collective-intelligence-coordinator
Agent skill for collective-intelligence-coordinator - invoke with $agent-collective-intelligence-coordinator.