orchraft
AGENTS.md1 starsChanged 51 days agoApache-2.0View on GitHub
orchraft automates the mundane, repetitive git/PR/issue chores of shipping software — branch naming, commit hygiene, review, landing, status — built first for solo developers with no one else to hand the busywork to. By default the user approves every git, pull request, issue, and release mutation; the one documented exception is the opt-in Autonomous Mode in context/policies/approval-policy.md, off unless a repo owner writes it in. The current skills cover setup, planning, implementation, issues, pull requests, status, documentation, and release notes…
- Commits and pushes
Where files are headingNew AGENTS.md files have more rules about keeping secrets out of the code, and fewer about code style.
Of the AGENTS.md files we read, the 31,774 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.
The file
Show its rules and text
We split this AGENTS.md into the rules it gives an agent
19 rules. About 0 are common, 10 are distinctive, and 9 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈10
Distinctive · estimate
This author's own choices. Worth a look.
9
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 22
No commit, push, branch create/update, PR create/update/merge, PR comment/review, issue change, or release create/edit happens without the …
- Very specific: line 34
Use the skills in skills/ for end-to-end agent workflows.
- Very specific: line 35
Use the portable role skills in skills/: forgehand, warplan, yap, lore, roast, chronicle, runes, and warpath.
- Very specific: line 39
Use the policies in context/policies/ for reusable naming and writing standards.
- Very specific: line 41
Use context/personality.md for the orc voice on user-facing surfaces (README intro, plugin descriptions, skill handoff lines).
- Distinctive: line 45
Prefer project-local rules, templates, hooks, and CI checks over these defaults when this workflow pack is installed into another …
- Distinctive: line 47
Keep guidance generic unless a file is intentionally project-specific.
- Distinctive: line 48
Do not duplicate policy details here.
- Very specific: line 293
Keep prompts in natural language.
- Distinctive: line 343
Add workflow behavior to the relevant skill.
- Distinctive: line 344
Add reusable naming or writing rules to the relevant policy.
- Very specific: line 345
When adding or removing a skill, skills/ is the inventory and every doc that restates it has to follow.
- Distinctive: line 368
Keep examples realistic and portable.
- Distinctive: line 369
When a policy and a project-local template disagree, the target project wins.
- Distinctive: line 370
Keep CLAUDE.md as a pointer to this file instead of duplicating these instructions.
- Very specific: line 375
Don't edit the plugin manifest's version by hand.
- Distinctive: line 380
Do not add project-specific build, test, deploy, or package commands.
- Distinctive: line 381
Do not duplicate full skill or policy contents.
- Very specific: line 382
Do not duplicate tool-specific mirrors, and do not reach for a symlink to paper over a directory-layout mismatch — skills/ at the repo root …
≈ “Common” is an estimate: at least 1 in 5 of the 40,246 AGENTS.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
orchraft
orchraft automates the mundane, repetitive git/PR/issue chores of shipping
software — branch naming, commit hygiene, review, landing, status — built
first for solo developers with no one else to hand the busywork to. By
default the user approves every git, pull request, issue, and release
mutation; the one documented exception is the opt-in Autonomous Mode in
context/policies/approval-policy.md, off unless a repo owner writes it in.
The current skills cover setup, planning, implementation, issues, pull
requests, status, documentation, and release notes (shaman, forgehand, warchief, warpath, watchtower, warplan,
quest, ship, roast, land, runes, reckoning, plunder,
muster, yap, lore, chronicle, herald); more workflows will cover
the rest of the lifecycle.
It is distributed as a Claude Code plugin and can also be copied into other
projects. Keep this file as the map, not the rulebook: detailed branch,
commit, PR, warplan, quest, ship, roast, warpath, land, runes, reckoning,
plunder, muster, yap, lore, chronicle, herald, warchief, and watchtower
behavior lives in the files linked below.
Non-Negotiable: Ask Before Every Mutating Action
No commit, push, branch create/update, PR create/update/merge, PR
comment/review, issue change, or release create/edit happens without the
user's explicit go-ahead in the current turn, and approval never carries
forward, unless a repo owner has written a scoped Autonomous Mode opt-in
into their own approval-policy.md naming that exact action — and even then,
merging, force-pushing, deleting, and issue close/reopen stay gated
regardless. The full rule lives in context/policies/approval-policy.md so it
ships with the plugin; read it before any of those actions. It overrides any
skill step that could be read as running to completion unattended.
How To Use This Repo
- Use the skills in
skills/for end-to-end agent workflows. - Use the portable role skills in
skills/:forgehand,warplan,yap,lore,roast,chronicle,runes, andwarpath. Hosts with packaged-agent support may expose the matchingagents/adapters, but those adapters never bypass approval gates. - Use the policies in
context/policies/for reusable naming and writing standards. - Use
context/personality.mdfor the orc voice on user-facing surfaces (README intro, plugin descriptions, skill handoff lines). Everything that file excludes, including policies, commits, PR text, and release notes, stays plain. - Prefer project-local rules, templates, hooks, and CI checks over these defaults when this workflow pack is installed into another repository.
- Keep guidance generic unless a file is intentionally project-specific.
- Do not duplicate policy details here; update the source policy or skill instead.
Design Intent
orchraft is meant to be portable. The workflows should explain how an AI agent ships, reviews, lands, and explains work safely without assuming a specific app stack, CI provider, branch protection setup, or hosting platform.
The files here are defaults, not overrides. When copied into another project, the target project's local instructions, PR templates, branch protections, hooks, and CI checks should win.
Skills
skills/shaman/SKILL.md: read-only setup preflight for skills, policies, GitHub access, tools, config, and hooks.skills/forgehand/SKILL.md: portable implementation workflow that edits and tests without committing, pushing, or changing GitHub.skills/warplan/SKILL.md: AI-driven planning workflow that drafts an implementation plan grounded in this repo's own conventions and precedent, before any code is written.skills/quest/SKILL.md: AI-driven issue triage, creation, and update workflow — the lifecycle stage beforeship.skills/ship/SKILL.md: AI-driven branch, commit, push, and pull request creation/update workflow.skills/land/SKILL.md: AI-driven pull request landing workflow, including merge checks, local cleanup, and handoff.skills/roast/SKILL.md: AI-driven pull request review workflow that checks a PR against this repo's own policies and posts findings as a PR review with inline comments and a summary, CodeRabbit-style.skills/yap/SKILL.md: AI-driven explainer workflow that explains a PR/diff, file, error/log, policy, or dependency grounded in real sources (code, git history, docs) with citations, read-only.skills/lore/SKILL.md: AI-driven workflow that adds or fixes code comments and docstrings across a diff, file, or PR to matchcontext/policies/lore-policy.md, without committing or pushing.skills/chronicle/SKILL.md: AI-driven workflow that drafts or updates standalone Markdown docs — README sections, ROADMAP entries, design docs, feature write-ups — grounded in the real diff, code, commit history, or PR/issue text, percontext/policies/docs-policy.md, without committing or pushing.skills/runes/SKILL.md: AI-driven status workflow that summarizes a branch's live state — its PR, checks, and unresolvedroastfindings — so the user doesn't have to re-explain where things stand. Read-only.skills/reckoning/SKILL.md: AI-driven status workflow that lists every review finding consciously declined rather than fixed, across the whole repo's pull requests (open, closed, and merged), by finding repliesshipmarked with<!-- orchraft:declined -->. Read-only.skills/plunder/SKILL.md: AI-driven status workflow that reports real repo-wide shipping signal — PRs opened,roastfindings caught and their fixed/declined/open fate, and time-to-land — grounded in live git/GitHub history rather than an invented benchmark score. Read-only.skills/muster/SKILL.md: AI-driven status workflow that reports actionable open-PR state (failing/pending checks, merge conflicts, unresolved review threads) across every repo the connected account personally owns, not just the current one. Read-only.skills/herald/SKILL.md: AI-driven release-notes workflow that drafts notes from the pull requests merged in a release's range, plus any commit that reached the base branch without one, cited by short SHA, and, on the user's go-ahead, writes them into the GitHub release. Never editsCHANGELOG.md, which release tooling owns.skills/warchief/SKILL.md: AI-driven orchestration workflow that chooses the next lifecycle role and hands off without weakening approval gates.skills/warpath/SKILL.md: AI-driven orchestration workflow that repeats fix → ship → roast until the latest roast reports zero findings, then hands off to land without merging.skills/watchtower/SKILL.md: AI-driven read-only status nudge that surfaces actionable PR state without mutating git or GitHub.
Role Agents
skills/forgehand/SKILL.md: portable implementation workflow; edits and tests, but never ships.agents/forgehand.md: optional packaged-agent adapter for that skill.agents/tactician.md: read-only planning agent backed bywarplan.agents/scout.md: read-only explanation agent backed byyap.agents/loremaster.md: comment/docstring editing agent backed bylore.agents/trialmaster.md: read-only review agent backed byroast.agents/warpath.md: approval-sensitive loop orchestrator backed bywarpath.agents/chronicler.md: Markdown documentation agent backed bychronicle.agents/rune-reader.md: read-only status agent backed byrunes.
These are optional packaged-agent components. Approval-sensitive lifecycle work stays in skills so every host can require the user's current-turn approval.
Codex should use the matching portable skill for a named role and may delegate
that skill's task through its native subagent collaboration when enabled. Do
not assume a named agents/ component exists outside hosts that document it.
.claude-plugin/plugin.jsonand.claude-plugin/marketplace.json: Claude Code plugin manifest and single-plugin marketplace. The manifest declares noskillsfield —skills/at the repo root is the default component directory Claude Code scans without one, so installed users get/orchraft:shaman,/orchraft:forgehand,/orchraft:warplan,/orchraft:quest,/orchraft:ship,/orchraft:land,/orchraft:roast,/orchraft:runes,/orchraft:reckoning,/orchraft:plunder,/orchraft:muster,/orchraft:yap,/orchraft:lore,/orchraft:chronicle,/orchraft:herald,/orchraft:warpath,/orchraft:warchief, and/orchraft:watchtowerfrom the same canonical files..codex-plugin/plugin.json: Codex CLI compatibility manifest. It explicitly declaresskills: "./skills/"so Codex loads the portable role and workflow skills from the plugin package.plugin.json(repo root): the current-preferred Agent Plugins 1.0.0 manifest location, alongside.codex-plugin/plugin.jsonrather than replacing it — real, credible plugins (Sanity, Resend,gemini-cli-extensions/postgres) ship this exact root file with the same$schema, and none of the ones checked removed their legacy-path copy either. Read by any Agent-Plugins-compliant host. Note:gemini-cli-extensions/postgresships thisplugin.jsonalongside a separategemini-extension.jsonwith its own distinct schema — that second file, notplugin.json, is Gemini CLI's own native manifest; don't assume Gemini CLI reads this format directly. Keep itsversionin sync viarelease-please-config.json'sextra-files, same as the other two manifests..grok-plugin/marketplace.json: self-hosted marketplace listing for Grok Build, the same bypass-the-central-catalog mechanism Claude Code's own.claude-plugin/marketplace.jsonuses — separate from xAI's centralxai-org/plugin-marketplacecatalog, which needs its own PR to list orchraft there..cursor-plugin/plugin.jsonand.cursor-plugin/marketplace.json: Cursor plugin manifest and self-hosted marketplace listing, installed via Cursor's Customize → From GitHub Repository GUI, or via thecursor-agentCLI's interactive/pluginslash command — unlike Claude Code/Codex/Grok Build, there's no scriptable one-line install command for either. Unlike Codex's pure directory-convention discovery, Cursor'splugin.jsonschema declares an explicit"skills": "./skills/"field pointing at the same canonicalskills/directory this repo already uses — confirmed against two real manifests incursor/plugins(teaching,create-plugin), both of which declareskills/categorythe same way. Still no directory restructuring needed, just the one explicit field. Not yet verified live: unlike every other ecosystem entry in this file, this hasn't been installed into a real Cursor app and checked for a full 18-skill catalog — say so if you ever confirm or refute it live.- Devin (Devin Desktop, formerly Windsurf, and the Devin CLI) needs no new
manifest: it checks
.devin-plugin/plugin.json, then.claude-plugin/plugin.json, then rootplugin.json, so it picks up.claude-plugin/plugin.json, loads rootskills/, and exposes them as/orchraft:<skill>afterdevin plugins install karloows/orchraft. Devin also injects this file into every session of every project where the plugin is installed — a plugin-rootAGENTS.mdis always-on and no manifest field disables it — so anything written here reaches Devin users, not just contributors. Devin's docs don't say whether it runshooks/hooks.jsonfor a Claude-format plugin. Not yet verified live, same caveat as Cursor. - Zed: orchraft ships no Zed extension or install path, so users copy
skills into their own project's
.agents/skills/andcontext/into the project root, as README's Copy Into A Project describes. The Zed Agent reads a project's rootAGENTS.md, so this file only reaches contributors with this repo open, and only while it is the first match in Zed's instruction-file list (.rules,.cursorrules,.windsurfrules,.clinerules,.github/copilot-instructions.md,AGENT.md,AGENTS.md,CLAUDE.md) — adding any file earlier in that list would replace it. External agents run inside Zed (Claude Code, Codex, Gemini CLI) use their own instruction files and plugin installs, not Zed's loader. - opencode: can't install a Claude Code plugin, so
scripts/install-opencode.sh <project>copiesskills/to.agents/skills/andcontext/to the project root, and convertsagents/*.mdinto.opencode/agents/subagents (all gettask: denyexceptwarpath; read-only ones also getedit: denyand ask-before-shell outside a short git/gh/ls list, a guardrail, not a sandbox;warpathneedsexperimental.subagent_depth: 2in the user's opencode config). opencode reads a project'sAGENTS.mditself (sources: opencode v2.2.5'sskills.mdx,agents.mdx,instructions.mdx; the converter isscripts/install-opencode.sh, and README's opencode section lists the permission rules and the one check run). Existingcontext/and agent files in the target are kept. The hooks are ported:scripts/opencode-plugin/orchraft-hooks.jsshells out to copies ofhooks/*.shinstalled alongside it at.opencode/hooks/, viactx.session.hook("context", ...)(gated per-session so it also covers a session resumed withopencode --continue, which fires nosession.created),ctx.tool.hook("execute.after", ...)against the built-inshelltool (notbash— see README's opencode section for the real tool name and result shape), andctx.event.subscribeonly forsession.deletedcleanup. See README's opencode section for what was checked live, including why the main-branch commit nudge fires after the git command runs rather than before like the Claude Code hook it ports. Checked live against opencode 2.2.5 for agent loading (opencode debug agents --standalonelists the eight agents with their permissions) and for the plugin hooks (loads with no warning;ctx.location.directoryand the hook/subscribe calls confirmed via a deliberate throw surfaced in the server log), not skills,AGENTS.mdloading, or a full model run exercising the hooks end to end.
Hooks
hooks/hooks.json: declares aSessionStarthook (matched onstartup|resume|clear|compact, neverfork— Claude Code dropsadditionalContextsilently on that source) that runshooks/watchtower-nudge.sh, and aPreToolUsehook (matched onBash) that runshooks/main-commit-nudge.sh.hooks/watchtower-nudge.sh: a deterministic re-implementation ofwatchtower's own surfacing rules inbash/git/gh, not a nestedclaude -pcall — the rules are plain state checks (PR exists? checks failing? unresolved review threads? uncommitted local work?), not judgment calls, so a script covers them without the latency or cost of invoking the model again. It emits at most oneadditionalContextline, or none when there's nothing actionable. Degrades to a local-only nudge (or silence) whenghis missing or unauthenticated.hooks/main-commit-nudge.sh: nudges (never blocks — alwayspermissionDecision: allow) when aBashcommand is about to rungit commitorgit pushwhile the checkout it targets has the repository's default branch checked out, the one bypassship's own Guardrails single out. It reads that checkout's current branch and does not parse push refspecs, sogit push origin topic:mainfrom a topic branch gets no nudge. The target is the session's directory unless the command starts withcd <dir> &&(or;) or usesgit -C <dir>, so a commit into a linked worktree reads that worktree's branch; other shell forms fall back to the session's directory, and a session directory outside a git work tree exits before the command is read at all. The default branch comes fromorigin/HEAD, falling back tomain/masterwhen no remote ref exists; it does not readbaseBranch, which would need a second copy ofwatchtower-nudge.sh's JSONC parsing. Deliberately scoped to that one branch, not every commit: a broader version would fire onship's own legitimate commits far more often than it would ever catch a real bypass, which is exactly the noisewatchtower-nudge.shis designed to avoid becoming.- Both hook scripts require
jqto parse their JSON stdin input and exit silently (not with an error) when it's missing — a missing soft dependency degrades to no nudge, never a failure the user has to notice. - These are orchraft's only ambient (non-command-triggered) behaviors; every other skill still requires the user to invoke it.
Evals
evals/ holds claude plugin eval cases that check skill behavior rather than
file syntax. Each case is a prompt plus graders, run against the plugin and a
no-plugin baseline: claude plugin eval . --case <name> --runs 1 --no-publish.
Results land in evals/results/, which is git-ignored. Pass --no-publish
every time — without it, an account that supports report publishing uploads
the HTML report (prompts, transcripts, grader verdicts) to claude.ai by
default.
- Grade tool calls with
tool_used, not aregexover the trace — the trace contains the skill's own text, so a regex for something likegit mergematches the instructions instead of an action. - Keep prompts in natural language. A bare
/roastdoes not invoke the skill in a child session. - A case that needs a repository ships a
case.yamlwith acontext.scaffold_script; it runs only under--scaffold, and non-read-only tools need--allow-tools Bash Edit Writeon the command line:claude plugin eval . --case ship-requires-request --runs 1 --scaffold --allow-tools Bash Edit Write --no-publish. - Granting Bash needs a sandbox the runner can seal. It refuses on a machine whose Docker credential store holds symlinks, which is the default Docker Desktop layout on macOS, so run those cases where that store is absent.
Policies
Skills read context/policies/<file> from the target repo when it exists,
falling back to the copy bundled with the plugin.
context/policies/approval-policy.md: which git and PR actions need the user's current-turn go-ahead, and why approval never carries forward.context/policies/branch-policy.md: branch name format, allowed types, and branch examples.context/policies/commit-policy.md: commit title format and when to add a free-form prose body.context/policies/config-policy.md: the optional.orchraft.jsonc(or.orchraft.json) a target repo can add for fixed choices such as merge method, and how it ranks against platform constraints and the prose policies.context/policies/lore-policy.md: language-agnostic rules for when to write a code comment or docstring (lore), and the shape it should take.context/policies/docs-policy.md: rules for when to draft or update a standalone Markdown doc, how every claim must be grounded in a real source, and the shape and tone it should take.context/policies/sandbox-policy.md: how to recognize a host sandbox block (Codex's read-only.git, no network) and handle it by per-command escalation, never by bypassingship/landthrough the GitHub API.context/policies/review-policy.md: reviewer priority order, severity levels, and findings format for PR review.context/policies/verification-policy.md: what counts as validation before a change is reported ready to ship or land, how to report results honestly, and edge cases like flaky or pre-existing failures.context/policies/writing-guidelines.md: shared writing rules, PR title/body defaults, secret hygiene, and project-template override guidance.context/formats/tracking-card.md: canonical Markdown format for external tracking cards.context/formats/pull-request.md: fallback title and body format for pull requests when a target project has no stricter template.context/formats/issue.md: fallback title and body format for issues when a target project has no stricter template.
Maintenance Notes
- Add workflow behavior to the relevant skill.
- Add reusable naming or writing rules to the relevant policy.
- When adding or removing a skill,
skills/is the inventory and every doc that restates it has to follow.grep -rn watchtower *.mdfinds the rosters, since each one names every skill; the skill-count badge inREADME.mdholds a number rather than names.scripts/check-rosters.shenforces both in CI: it comparesskills/with every complete roster and skill count it knows about and names the file, line, and missing or extra skill. A new complete roster has to be added to that script, or nothing checks it. - The same applies to policies:
context/policies/is the inventory, andgrep -rn commit-policy *.mdfinds the docs that list them by filename.README.md's Layout entry names them in prose instead, so a filename search misses it — check that one by eye. - A new config setting, or a change to what an existing one means, goes in
three places in the same change:
context/policies/config-policy.md, which documents it;.orchraft.example.jsonc, which is supposed to show every field; and a consumer that actually reads it —grep -rn <key> skills/ hooks/ context/policies/should name a file that reads it as a setting.config-policy.mddoesn't count, since it defines every key, and neither does prose that only uses the word, as many files do with "validate". A setting nothing reads silently does nothing while the docs promise otherwise; that shipped twice on the branch that added the config file. - Keep examples realistic and portable.
- When a policy and a project-local template disagree, the target project wins.
- Keep
CLAUDE.mdas a pointer to this file instead of duplicating these instructions. - Skills live only in
skills/— Claude Code, Codex, Grok Build, Devin, and (as a packaged plugin) Cursor all read it directly, so there is no per-ecosystem symlink layer to keep in sync. - Don't edit the plugin manifest's
versionby hand; release-please bumps it alongsidepackage.json.
What Not To Add Here
- Do not add project-specific build, test, deploy, or package commands.
- Do not duplicate full skill or policy contents.
- Do not duplicate tool-specific mirrors, and do not reach for a symlink to
paper over a directory-layout mismatch —
skills/at the repo root is the one shared convention every supported tool already scans by default.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

