需先 fork 仓库并作为 ops 仓库使用,不是直接安装的包;真实配置写在被 gitignore 的 onboarding.yaml,需运行 /setup 或手动复制示例文件;非 Claude Code 工具需先安装对应适配器(如 bash bin/install-opencode-adapter.sh)才能生效;Windows 下规则是 bash 脚本,需用 Git Bash 或 WSL
apexyard
me2reshMIT活跃维护给 AI 编码代理套上工程治理的编排层,让代理写出的代码经过审查与流程管控后安全上线,适合团队把多代理开发纳入 SDLC。
Your AI engineering org, governed. Ship agent-built code safely to production.
gh repo clone your-org/apexyard
cd apexyard
git remote add upstream https://github.com/me2resh/apexyard.gitREADME 未说明,无需运行服务或运行时,只需 Claude Code 等 AI 编码工具与 git、gh 命令行
给 AI 生成的代码加上流程管控的纯文本运维仓库,让 agent 写的代码安全上线
给 AI 编码代理套上工程治理的编排层,让代理写出的代码经过审查与流程管控后安全上线,适合团队把多代理开发纳入 SDLC。
核心能力
- 用 60 个 shell 钩子机械执行工单优先、合并门禁与迁移门禁
- 由 Rex 等 23 个子代理独立审查 PR 与安全设计
- 用 Agent Decision Records 留存技术决策记录
- 69 个斜杠命令覆盖 setup、handover、code-review、launch-check
- 通过适配器让 opencode、pi、Codex、Cursor 复用同一套规则
容易踩的坑
- v5.10.1最新正式版2026-10-24 · 2026-10-24 17:03 UTC
Patch release — 4 improvements.
Changed (refactor / chore / docs)
- (#1873) harden the terraform-ci golden-path template — ce979c5c
- (#1872) state the hook threat model in SECURITY.md — 953d4501
- (#1868) add an after-the-release checklist to /release — f9fd80df
- (#1869) credit five missing issue authors — 0024f0f6
Thanks
- @SecFathy (Mohammed Fathy) reported the problems that #1872 and #1873 fix.
Migration script
- A no-op migration script
.claude/migrations/v5.10.0-to-v5.10.1.shis included, anddocs/upgrading.md's "What each migration does" table has a matching row. See.claude/migrations/README.md.
Testing
- After merge, confirm CI creates tag
v5.10.1onmain(check theauto-tag-on-release-pr-mergeworkflow run) - Verify
git describe --tags --abbrev=0 upstream/mainreturnsv5.10.1 - Run
/release-sync v5.10.1to sync main→dev and prevent squash divergence - Verify the squash commit's message carries the trailer:
git log -1 --pretty=format:'%(trailers:key=Released-From,valueonly)' v5.10.1
Refs #1874
🤖 Generated with Claude Code
Glossary
Term Definition Squash merge GitHub merges all commits on the PR branch into a single commit on main; the branch HEAD is discarded and the resulting main tip has a new SHA Auto-tag The auto-tag-on-release-pr-merge.ymlworkflow fires onpull_request→closed+mergedforrelease/v*branches, tagsgithub.sha(the squash commit), and creates a GitHub ReleaseAncestry guard git merge-base --is-ancestor <sha> main— fails if the tag would not be reachable from main, preventing a mis-placed tag like v2.3.0/release-syncThe mandatory follow-up skill that merges main→dev after a squash-merge release, preventing SHA divergence accumulation Released-FromtrailerA git trailer ( Key: valuein the commit message's final paragraph) recording the exactdevSHA this release was cut from —bin/release-changelog.shreads it back for the next release's changelog range (AgDR-0094)Released-From: ce979c5c63805a5f7d61a12e7a7ff3c04e8fa98f
- v5.10.02026-10-22 · 2026-10-22 15:23 UTC
查看更新说明
Minor release — 4 features, 34 fixes, 27 improvements.
Added (feat)
- (#1797) gate review depth with a trusted tier script and add the Rex delta corpus — 7ba8c564
- (#1794) warn when the ticket marker belongs to another session or branch — b4080e3b
- (#1770) key the bootstrap, issue-skill and role-fired markers on the session id — 64e6e103
- (#1767) add the /preflight skill and apexyard doctor — 1ac23c1f
Fixed (fix)
- (#1861) detect the curl combined short-option output form as a file write — 8d17671b
- (#1862) narrow the pin-tree token and close three tamper-gate gaps — 6c5dfff4
- (#1850) route a continued verb and a variable verb after a redirection — 8b491660
- (#1847) let review agents write their review body through a scoped Write tool — ab6034db
- (#1851) accept a heredoc substitution commit message as a data sink — 8df77d5b
- (#1852) read the commit message past a redirection — 615ac764
- (#1849) treat a quoted heredoc that writes a file as data in commit-format — 569578bd
- (#1844) strip a quoted heredoc body before push and commit routing — 2cbc0eaa
- (#1841) read the push destination past a redirection — fa4d7464
- (#1838) route git's dashed push and commit programs to the gates — 0f08be87
- (#1835) route a git verb after a redirection to the push and commit gates — defd0597
- (#1827) close the merge-gate scan classes found by the shape search — 0344451f
- (#1804) block git aliases that run push or commit — 5eb65c0f
- (#1807) block split merge phrases and the >& and >! redirect targets — 7f82bd5e
- (#1811) let a valid worktree start its ticket and hash the warn claim — 61de7f75
- (#1802) accept an ancestor merge-base when the plan records are unchanged — a9ecd9af
- (#1795) share PR metadata across the merge gates in one dispatch — d970c194
- (#1788) tell a forge auth or network error apart from a missing branch — a791285d
- (#1793) stop an inherited Claude Code session id overriding the adapter id — 9f3ff671
- (#1765) fix three merge-gate matcher bugs (#1757, #1758, #1760) — 4ef5feea
- (#1778) handle a missing forge branch and cover printed commands — 1ba0c1fd
- (#1769) restore the framework model when a routing override is removed — d63bb611
- (#1771) let the operator make the portfolio first push — dd2065bf
- (#1764) lay out laned BPMN on a grid and make lint fail on errors — afdcb067
- (#1756) check or block five git option forms in the gates — 23d8387f
- (#1755) skip apexyard body rules for external contributions — 27df313f
- (#1754) make the shipped ORBIT example pass records-lint — 11114117
- (#1753) resolve Git Bash mount paths with cygpath — 8cdb26fc
- (#1750) resolve the push branch in the cd target repo — 2529becc
- (#1752) report unsupported manifests as not scanned — 4a7283ee
- (#1751) read commit checks when gh pr checks returns no result — 5713599c
- (#1747) make push and commit gates read git global options — 7381e0f9
- (#1746) make fork CI pass on upstream sync PRs — 46638333
- (#1740) accept Windows path forms in POSIX gates — 9ba947d2
Changed (refactor / chore / docs)
- (#1860) stop duplicate PR check runs cancelling each other — c206a7a8
- (#1848) record that shell-text gates are guardrails — 98417717
- (#1839) harden settings, hooks and pin against in-session tampering — 1200b6df
- (#1843) pre-filter segments before write-target extraction — 7c6964a3
- (#1826) test the Rex recount check with read-only source access — 088f48c4
- (#1809) batch the carry-over walk and limit each gh call — cd52f975
- (#1823) add shape-probe and recount checks to the Rex prompt — 7fbc265c
- (#1820) make the local mawk command use mawk as awk — 4300e902
- (#1821) fix the advisory review items from PR 1797 and PR 1799 — 98d9a39d
- (#1817) remove macOS runners and cap CI run volume — b3236f8f
- (#1799) add a runbook for more than one session on one project — 41cc7c28
- (#1791) make a fresh spawn the default and draft the harness requests — 663161f7
- (#1800) clear three small review findings — 9e4f75af
- v5.9.02026-10-15 · 2026-10-15 14:55 UTC
查看更新说明
Minor release — 25 features, 6 fixes, 41 improvements.
Behaviour change: the active ticket now lives in each working tree's git dir (#1576, AgDR-0222).
/start-ticketwritesapexyard-ticketinto the git dir of the tree you run it in. Each linked worktree needs its own/start-ticket.git worktree removedeletes the marker with the worktree.Upgrade notes
- After you run
/update, read/start-ticketagain. It now writes two markers. - Nothing that passed the ticket gate before this release is blocked by it. Old markers under
.claude/session/are still read wherever they were read before. A marker in a tree's git dir wins over them. /start-ticketand/fan-outstill write the old markers too. A rollback to the previous release, or a session that still runs the old hooks after/update, keeps its ticket.- A SessionStart notice lists the old markers it finds. It is information, not an error.
- A stale
<git dir>/apexyard-ticketoutranks a newer old-layout file in two cases. One is a rollback followed by a second/update. The other is a session that follows the old/start-tickettext and writes only the old marker. Run/start-ticketagain in each tree, or delete the stale marker. A staleness check is a follow-up (follow-up: to be filed). - The SessionStart notice lists only old markers that no marker in the same tree's git dir shadows.
- A later, explicitly breaking release stops reading and writing the old markers. Its upgrade notes will say so.
Added
- The optional
apexyard-bootcamppane guides students through nine Corner Shop modules (#1680). Commands control navigation. Matching tool calls tick checkpoints. The store keeps progress across restarts. - The Bash dispatcher and the ticket-first gate fail closed (#1623, AgDR-0228). The
dispatch-bash.shandrequire-active-ticket.shentries in.claude/settings.jsonsetonFailuretoblockwith timeouts of 20 and 10 seconds, taken from the profile indocs/perf/hook-fail-closed-profile-2026-10.md.onFailureneeds Claude Code 2.1.295 or later. An older client ignores the field.docs/hooks-fail-closed.mddescribes the behavior, theclaude --settings '{"disableAllHooks": true}'escape hatch, and the version finding.bin/hook-timing-profile.pymeasures hook timing.bin/check-escape-hatch.shtests the escape hatch. A new workflow runsclaude plugin validate --stricton the marketplace with a pinned Claude Code version. bin/token-cost.pyreports the token and time cost of a session (#1624). It has a session view, a reviewer view and a forge view of me2resh/apexyard PRs.docs/perf/token-cost.mdgives the usage and the counting rules. The 2026-10-10 baseline is indocs/perf/token-cost-baseline-2026-10-10.md.apexyard-explainershows one plain sentence for each tool call in a pane (#1661). It uses templates and keeps the last five lines in session memory./explainer-toggleopens or closes the pane.
Changed
- Inside
dispatch-bash.sh, a crashed or killedrequire-active-ticket.shnow blocks the Bash call, as the merge gates do. It warned before.block-reviewer-ci-wait.shstays fail open on purpose, because it is a cost guard (#1623). - The ticket gate, the migration gate, the AgDR spike exemptions, the tracker-repo guard and
/statusread the marker through one resolver. It finds a marker in a validated tree's git dir without a git process, soGIT_DIRand git config cannot redirect that lookup. The old-layout resolution keeps its old git calls until the breaking release. - A marker in a git dir counts only for the ops fork and registered clones. A registered clone sits under the workspace dir, or at the
workspace:path of its registry entry. Other trees use the old markers, as before. - The marker's repo must belong to its tree. A project clone takes only a ticket of its own registry entry, and the ops fork takes no ticket of a registered project.
/start-ticketstops when the project's clone does not e
- After you run
- v5.8.02026-10-08 · 2026-10-08 23:50 UTC
查看更新说明
Minor release — 14 features, 50 fixes, 26 improvements.
Behaviour changes:
- The optional search MCP integration is removed (#1537).
grepandReadare the one documented search path. Anymcp_searchkeys in your config are now unused; the migration script lists them. - Edits under
.claude/worktrees/now need an active ticket, like any other source edit (#1531). - With ORBIT on, slice tickets need a slice record first (#1565), and a run warns about outcomes with unmet criteria and no slice (#1570).
- The merge gate blocks a fork PR whose workflow runs wait for approval (#1519), and checks the head workflow runs on every merge (#1536).
- Pushes are scanned for private project references (#1528).
- ORBIT
default_planningin the registry now accepts the YAML spellingsTrue,yesandOnas on. An unknown value warns and uses the global default. Before, those values turned the slice gate off.
Added (feat)
- (#1574) warn about ORBIT outcomes with unmet criteria and no slice — accc5111
- (#1451) exempt repos you contribute to but do not govern from the PR-title gate — e0429d0d
- (#1571) require an ORBIT slice record before slice tickets — 226b7741
- (#1450) tell a fork owner when the hook that blocked them is stale — b48db2f6
- (#1442) add a Rex MISS corpus entry for PR #1289 — 6c05fcb8
- (#1444) report tracker_list completeness so a short read is never zero — 7544b9e1
- (#1500) check PR bodies, Tariq reviews and AgDRs for completeness — 483639ae
- (#1499) add a build.isolation setting and keep worktrees as the default — 1c09d097
- (#1498) offer a QA run after Rex approves and before merge — 12a319af
- (#1469) audit Python dependencies alongside npm — 449a6ef7
- (#1463) present operator choices through the AskUserQuestion wizard — 8c6f52cd
- (#1454) add /orbit handoff for one issue per slice — 250c9b99
- (#1443) carry Rex approval across a clean base merge, skip refresh when nothing overlaps — 9ac9d9eb
- (#1429) add an advisory writing-profile check to the pre-push hook — 6a4b89e7
Fixed (fix)
- (#1581) accept GitHub Enterprise
host/owner/repovalues in the red-CI gate — 70e80b40 - (#1581) pass a raw 0x1E byte through the legacy JSON-escape decoder — 70e80b40
- (#1581) read YAML boolean spellings for ORBIT default_planning — bb6e36a1
- (#1580) pass the #1182 parity case when the parent hook predates #1182 — 21808e5a
- (#1575) scan for private references at push time — b312ca86
- (#1573) gate worktree source writes under .claude/worktrees/ — a83d5c1f
- (#1569) read the PR target from the continuation-joined command — edff499e
- (#1567) isolate hook tests from the live session pin and caches — 259344bf
- (#1566) join backslash-newline continuations on the jq-failure path — 27f75650
- (#1554) decode merge-gate fallback escapes in one awk pass — cc6aaa90
- (#1557) process long commands linearly in the write detector and PR gate — fa095d0a
- (#1560) block a partial runs page even when validation fails — a9a87b9c
- (#1548) join dispatcher continuations with awk under bash 3.2 — 29a97791
- (#1546) detect argv-list merges and align the merge variable check — 7548833f
- (#1545) check head workflow runs on every merge — ae7f4dee
- (#1544) keep the badge test out of the real global git config — 196c16e8
- (#1520) block the merge when a fork PR's workflow is waiting for approval — 837b0c40
- (#1530) route push and commit gates for compound commands — dc0ee1dc
- (#1524) match the whole no-checks message in the red-CI gate — e901e2fc
- (#1522) close split-word and comment-join gaps in the tracker-repo gate — 6342331b
- (#1518) allow a literal reviewer worktree add outside governed trees — b7c78296
- (#1516) see versioned Python writes and fail closed when a here-doc cannot be read — 3956e92f
- (#1493) read a repository flag on a continued line in the tracker gate — 339dd4a1
- (#1485) detect --output, sort -o, yq -i and bundled python -c writes — e119968c
- (#1487) match a relative migrations/ path with or without a lea
- The optional search MCP integration is removed (#1537).
- v5.7.02026-09-27 · 2026-09-27 11:28 UTC
查看更新说明
Minor release — 2 features, 9 fixes, 1 improvement.
Behaviour change:
/approve-mergenow stops a merge when the PR is behind its base branch (#1406). The check is on by default. Setmerge.require_up_to_datetofalsein.claude/project-config.jsonto turn it off.Added (feat)
- (#1420) make reviews faster with a severity bar, delta re-reviews and CI-first testing — 020fbab
- (#1351) add opt-in ORBIT planning adapter — 6d8f24b
Fixed (fix)
- (#1419) block a merge when a merge gate cannot load a library — cdb57f1
- (#1406) stop a merge when the PR is behind its base, and make /release-sync keep main-only changes — c16860e
- (#1404) honor the active ticket for unparsed write targets, and document a reviewer test path — 9d46ee2
- (#1400) scope the active-reviewer marker per session and stop owner-name leak false blocks — 5c12554
- (#1397) cover .astro in the design gate, exempt Alembic env.py, and warn when config overrides drop defaults — d60a0d4
- (#1399) validate Mermaid in every diagram-producing skill and align the DFD template with threat-model — 5be9ecb
- (#1355) stop Claude Code always-loading rule bodies — 6870a8b
- (#1373) skip CodeQL analysis outside the upstream repository — c66d7c5
- (#1353) pass Orbit record root to validation — 7e561ec
Changed (refactor / chore / docs)
- (#1398) load the writing rule in every agent, add a no-search-MCP fallback, and make Rex verify acceptance criteria — 2b6ed42
Closes
- Closes #1350
- Closes #1354
- Closes #1370
- Closes #1376
- Closes #1385
- Closes #1386
- Closes #1390
- Closes #1396
Migration script
- The release needs a per-adopter note, but no file move.
.claude/migrations/v5.6.3-to-v5.7.0.shprints it and exits 0.docs/upgrading.mdhas a matching row.
Testing
The changelog range is
020fbab..upstream/devfrom the v5.6.3Released-Fromtrailer. It has 18 commits and 12 changelog entries. The 6 other commits are release, sync, and merge commits, which the generator excludes by design.bash .claude/migrations/v5.6.3-to-v5.7.0.sh: prints the note, exit 0.test_update_chain.sh: 0 failed.test_release_changelog.sh: all 91 tests passed.test_v54_migration.sh: PASS=6 FAIL=0.markdownlint-cli2onCHANGELOG.mdanddocs/upgrading.md: 0 issues.
After merge:
- Confirm the
auto-tag-on-release-pr-mergeworkflow creates tagv5.7.0onmain. - Confirm
git describe --tags --abbrev=0 upstream/mainreturnsv5.7.0. - Confirm the squash commit carries the trailer:
git log -1 --pretty=format:'%(trailers:key=Released-From,valueonly)' v5.7.0. - Run
/release-sync v5.7.0.
Refs #1421
Glossary
Term Definition Squash merge GitHub combines the PR's commits into one new commit on main. The new commit has a new SHA.Auto-tag The auto-tag-on-release-pr-merge.ymlworkflow. It tags the squash commit and creates the GitHub Release after arelease/v*PR merges.Behind-base check The step in /approve-mergethat stops a merge when the PR's head is behind its base branch (#1406)./release-syncThe follow-up skill that merges mainback intodevafter a release, so the next release has no squash divergence.Released-FromtrailerA commit trailer with the devSHA this release was cut from. The next release reads it to find its changelog range (AgDR-0094).🤖 Generated with Claude Code
https://claude.ai/code/session_01KGvb2ba4gyT3TN8L2uMLTn
Released-From: 020fbab0b0ade92b3dbbef2d863f84e1fed05d2d
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
AI can build quickly. Shipping safely needs a system.
AI can produce a working prototype in a weekend. Teams still need a way to track decisions, review changes, run checks, and approve a release.
ApexYard provides that system. Every change starts with a ticket. An independent reviewer checks the change. A merge gate stays closed until a named human approves the exact commit.
ApexYard is a multi-project ops repo. You fork it, register your projects, and manage the portfolio from one place. Shared rules, project records, and shell hooks keep the workflow consistent.
Claude Code is the default driver. The rules, hooks, and templates are plain Markdown and shell, so you can use another coding tool through an adapter. There is no service to run and no hosted lock-in.
The workflow has been used with TypeScript and AWS Lambda backends, Next.js apps, Chrome extensions, and native Swift macOS apps.
What makes it different
| Area | Without ApexYard | With ApexYard |
|---|---|---|
| Code review | Ad-hoc prompts | Rex reviews every pull request. |
| Technical decisions | Lost in chat | Agent Decision Records preserve them. |
| Quality gates | Manual memory | Shell hooks block unsafe actions. |
| Merge approval | Informal “LGTM” | Rex and a named human approve the exact commit. |
| Database migrations | High-risk edits | A migration ticket and rollback plan are required. |
| Architecture | Scattered notes | C4 templates and the /c4 skill create a shared model. |
| Portfolio view | Several GitHub tabs | /inbox, /status, and /tasks read one registry. |
| Upstream updates | Easy to forget | /update reports drift and guides the sync. |
| Roles | Repeated context | Role files activate from clear triggers. |
| Onboarding | Manual setup | /setup collects the required configuration. |
What's inside
ApexYard is a set of plain-text files. Claude Code reads them from the repo root. No runtime or service is required.
- 20 roles across 6 departments (engineering, product, design, security, data, architecture) that activate on triggers
- 60 shell hooks that mechanically enforce the SDLC — ticket-first edits, a two-marker merge gate, migration gates, secrets scanning, and more
- 69 slash-command skills — from
/setup,/handover, and/scaffoldto/decide,/code-review,/migration, and/launch-check - 23 sub-agents — Rex (code review), Hakim (security), Tariq (design review), plus the department personas
- 22 rule files, workflow docs, and document templates (PRD, tech design, ADR, AgDR, C4 diagrams)
See docs/whats-inside.md for the full directory and component list.
Marketing site: the site that was previously bundled here has moved to its own repo (me2resh/apexyard-site) and is deployed independently at apexyard.ai.
Built for Claude Code first. opencode, pi, and Codex use the same rules through small adapters. Cursor loads
.claude/natively in the IDE. See Using another AI coding tool?.For AI coding agents:
AGENTS.mdis the universal entry document for tools that do not loadCLAUDE.md. Seedocs/harnesses/pi.md.
Quick Start — fork and go
ApexYard governs a portfolio of repos as one organisation. Fork and clone the repository. Use that fork as your ops repo. Register each project you want to manage. The fork is the ops repo, so no nested installation is needed.
Using opencode, pi, or Codex? Steps 1–3 use plain
gitandgh. Install your tool's adapter before steps 4–6. Each step also gives a manual file option. The enforced rules are the same in both paths.
1. Star + Fork on GitHub
Visit github.com/me2resh/apexyard.
Star it, then fork it into your organisation. Keep the name apexyard, or use
a name such as your-org/ops.
2. Clone your fork locally
gh repo clone your-org/apexyard
cd apexyard
Or with plain git:
git clone https://github.com/your-org/apexyard.git
cd apexyard
3. Add upstream for future updates
git remote add upstream https://github.com/me2resh/apexyard.git
Later, run /update to bring upstream changes into your fork. The skill
previews the diff, uses a sync branch, and guides any version migrations.
4. Configure the framework — run /setup
Run /setup in Claude Code. The skill asks about your company, team,
technology, and quality bar. It shows the proposed defaults before it writes
the configuration.
/setup
Your real config lives in the gitignored onboarding.yaml. It stays local.
/setup copies the tracked onboarding.example.yaml placeholder and fills it
in. A commit-time guard blocks the real file if you try to add it.
No /setup on your tool? Copy the example and fill it in by hand:
cp onboarding.example.yaml onboarding.yaml. The gates read the file, not the
skill.
5. Register your projects — run /handover
Projects join the portfolio through a skill. For each repo you want to manage:
/handover <repo-url-or-local-path>
/handover clones the repo, scores five harnessability dimensions, seeds
the project docs, and registers the repo in apexyard.projects.yaml. It
creates the registry on first use. /setup can register your first project.
The registry it maintains looks like this — you rarely touch it by hand:
version: 1
projects:
- name: example-app
repo: your-org/example-app
docs: projects/example-app
status: active
Register a single repo too. The portfolio skills (/projects, /inbox, and
/status) read the same registry. No /handover on your tool? Copy
apexyard.projects.yaml.example and add the repos by hand.
6. Start working
/projects # list managed projects and status
/inbox # show PRs, issues, and comments that need attention
/status # show the git and CI state for each project
/decide # record a technical decision
Hooks run on git and gh commands. Portfolio skills read the registry. Run
/code-review <pr> to invoke the Code Reviewer agent.
Full setup guide with directory layout, daily workflow, and FAQ: docs/multi-project.md.
Keeping a fork current — upgrade in place, when to re-fork instead, and how to preserve your portfolio data either way: docs/upgrading.md.
Optional: status band above the prompt
The apexyard-status plugin draws one line above the Claude Code prompt. The line shows the active ticket, the PRs that wait for your /approve-merge, and the reviewer lock of the session. The plugin only reads data. It checks the open PRs with one cached, read-only gh pr list call for each repo. It does not replace a hook or a gate.
/setup asks if you want the band. If you skipped that question, run these two commands from the ops-fork root:
claude plugin marketplace add ./ --scope local
claude plugin install apexyard-status@apexyard --scope local
The band is on only for you, on this machine. After /update, run /reload-plugins to load the new version. Details and settings: plugins/apexyard-status/README.md.
Using another AI coding tool?
ApexYard was built for Claude Code. Its slash commands are native Claude Code skills. The enforcement layer is plain Bash, so other tools can use the same rules through an adapter.
As of 2026-07-09, opencode, pi, and Codex have passed real enforcement checks. Each tool needs one setting so its commands reach the rules. Cursor IDE native exec was observed later (2026-09-16) when third-party configs are on. You can always use the manual configuration files from Quick Start when a skill is unavailable.
| Tool | Enforces your rules? | Setup | Good to know |
|---|---|---|---|
| Claude Code | ✅ Yes — natively. Built in; the rules fire on every command. | Nothing to install — /setup and you're done. | On Windows, use Git Bash or WSL (the rules are bash). |
| opencode | ✅ Yes — proven. A real agent's git add -A was blocked by the same rule. | bash bin/install-opencode-adapter.sh | Run opencode with --auto so the agent's command reaches the rule. |
| pi | ✅ Yes — proven. Same, in a real pi session. | bash bin/install-pi-adapter.sh | Run pi with -a (auto-approve). pi is deliberately bare-bones — ApexYard is the governance it leaves to you. |
| Codex | ✅ Yes — proven. Same, in a real Codex session. | bash bin/sync-codex-adapter.sh | Codex has to trust the rules once — /hooks, a one-off flag, or a user-level install. Details: docs/codex-adapter.md. |
| Cursor | ✅ Yes — native in the IDE. Cursor loads .claude/ when third-party configs are on. A real Write call was refused by the ticket-first rule (2026-09-16). | Enable third-party configs. Then bash bin/install-cursor-adapter.sh for the session-pin overlay. | IDE only. The command-line cursor-agent ignores hooks. A leftover full adapter can lock the session. |
Under the hood: your rules stay one set of portable bash scripts, and every tool reads the same ones — never a separate copy that can drift out of sync. A daily, credentialed Conformance CI job re-verifies opencode, pi, and Codex. Cursor has no headless path in that matrix. Full per-tool setup, limits, and how to add a new tool → docs/harnesses/README.md.
Roles, workflows & templates
ApexYard ships 20 roles across 6 departments that activate on triggers, a full SDLC (Planning → Design → Build → Review → QA → Deploy → Monitor) with a dedicated migration sub-workflow, and reusable document templates (PRD, technical design, ADR, AgDR, migration AgDR, C4 diagrams).
The full role roster, workflow detail, and template catalogue live in docs/whats-inside.md. The canonical entry point Claude Code reads is CLAUDE.md.
Show you're governed by ApexYard
Running your repo under ApexYard? Add a badge to its README. Every adopter repo that carries one is a backlink and a bit of social proof — and /handover will offer to drop it into the repos it onboards.
Governed by — for a repo managed under an ApexYard ops fork:
[](https://github.com/me2resh/apexyard)
Built with — for a project built out through the ApexYard workflow:
[](https://github.com/me2resh/apexyard)
Customization
ApexYard is designed to be customized. Every role, workflow, and template can be modified to fit your team:
- Add roles: Create new
.mdfiles inroles/your-department/ - Modify workflows: Edit files in
workflows/ - Add templates: Drop new templates in
templates/ - Override anything: The stack is just markdown files -- edit freely
Contributing
Read CONTRIBUTING.md for the fork, branch, PR, and review flow. Open a Bug report or Feature request issue. The Code of Conduct applies to all participation. Report security issues in SECURITY.md. Do not open a public issue for those.
Contributors
Thanks to everyone who contributes code, documentation, bug reports, ideas, and feedback.
Issue contributors
Thank you to everyone who opened issues, including bug reports, feature requests, questions, and documentation feedback.
When updating these credits, include new issue authors as well as pull-request contributors. Use public GitHub handles and links. Describe each contribution accurately.
License
MIT License. See LICENSE for details.
Built with real-world experience shipping software with Claude Code.