Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

matt-automations: Matt Pocock's skills driven end to end, autonomously, in a loop

tests Matt skills on main node harness model dependencies

Give it an objective, walk away, come back to reviewed commits on a branch.
Every run is routed by ask-matt, then driven through Matt's own skills with no human in the loop.


✨ What's inside

Path What it does
🎯 to-auto/ The pipeline: ask-matt → on-ramp → research → grill → spec → tickets → build → review → retro.
🐛 to-bug/ to-auto with the route pinned to diagnosing-bugs and the bug fast path armed.
🌱 to-new/ to-auto for a greenfield repo, package, service, or skill.
🛰️ to-orc/ Delegation-only orchestrator: pi workers on any model, gated evidence, a raw-JSON verdict. Also to-auto's optional pi implementer backend.
📌 vendor/mattpocock-skills/ Gitignored symlink to a local clone of upstream Matt skills on main; every check fast-forwards it.
🔗 matt/<name> Committed symlinks into the vendored checkout: the only place runs load Matt skills from.
⚙️ scripts/ matt.mjs resolves and checks skills; goal.mjs owns resumption, tickets, claims, and locks.

🚀 Quick start

git clone git@github.com:PyModel/matt-automation.git
git clone https://github.com/mattpocock/skills.git ~/Projects/open-source/mattpocock-skills
mkdir -p matt-automation/vendor   # vendor/ is gitignored, so a fresh clone has none
ln -s ~/Projects/open-source/mattpocock-skills matt-automation/vendor/mattpocock-skills
cd matt-automation
node scripts/matt.mjs check        # prints "ok"

Link to-auto, to-bug, to-new and to-orc into your harnesses' skills folders (~/.agents/skills, ~/.pi/agent/skills, ~/.claude/skills; --home <dir> for another):

node scripts/install.mjs           # replaces its own links, refuses a real folder
node scripts/install.mjs --check   # names a skill a harness lost; the to-auto-watch job runs it

With autoharness installed, add scripts/skill-create-guard.mjs as a Claude Code PreToolUse hook on mcp__plugin_autoharness_stage_skill__stage_skill: it denies a create over a skill autoharness did not make (0.5.3 has no such check and rewrote to-auto through its link).

Then:

/to-auto add rate limiting to the public API
/loop /to-auto add rate limiting to the public API   # or any recurring runner

A run also needs four installed skills: kun, research-stack, defensive-design, zero-tech-debt. They are found in $AGENT_SKILL_HOMES (path-separated), else ~/.claude/skills and ~/.agents/skills; check names any that are missing.

🔁 How a run works

  1. Route. Stage 00 runs the wiring check and reads ask-matt; to-auto/FLOWS.md adds only the autonomy rules on top of its map.
  2. Resume anywhere. Every invocation, first run or fiftieth loop tick, asks goal.mjs next <slug> where it stands. A ticked stage whose artifact is missing is not trusted.
  3. Build in parallel. Tickets carry file claims and a capability tier; goal.mjs take hands out the frontier under a lock, and each ticket runs in its own worktree, on a subagent or a pi worker.
  4. Contract in, receipt out. Each implementer gets one contract, drafted from files by goal.mjs prepare-ticket, and returns one JSON receipt; goal.mjs merge checks it against git and the ticket, lands it, and runs the suite on the result (to-auto/CONTRACT.md). An objective that already names an agent-ready spec or ticket skips straight to tickets.
  5. Halt cleanly. Every stop, yours or the run's own, goes through goal.mjs stop; goal.mjs resume picks up after you fix the cause.

🧰 Commands

node scripts/matt.mjs resolve ask-matt   # SKILL.md path a run loads
node scripts/matt.mjs check              # fast-forward upstream, then wiring + installed skills; prints pin and drift
node scripts/matt.mjs link               # regenerate matt/ after upstream adds, moves or removes a skill
node scripts/goal.mjs next <slug>        # where a run resumes
node scripts/goal.mjs frontier <feature> # ticket grammar, frontier, overlapping claims, capabilities
node scripts/goal.mjs receipt <file> --worktree <wt> --base <sha> --ticket <ticket.md>  # gate a receipt
node scripts/goal.mjs merge <feature> <NN> --check "<suite>"  # land a ticket on the run branch
node scripts/goal.mjs verdict <slug>     # stage 8 verdict, from the committed review.md / verify.md
npm test                                 # unit tests · to-orc selftest · adversarial audit

📌 Tracking upstream Matt skills

Owner direction (2026-10-20): "matt-automations should be symlinked to matt skills repo main repo so it should always be updated". So there is no pin to bump: vendor/mattpocock-skills is a symlink to a clone of mattpocock/skills on main. matt.mjs check (stage 00 of every run) fast-forwards it first, and scripts/pull-matt.plist (a LaunchAgent running matt.mjs pull) does hourly so skills used outside a run stay current too, logging to ~/.local/state/pull-matt.log. Both hold while any to-auto run is live (registered, not finished, moved within 72 h), so a run keeps the commit check printed as vendored: until it ends.

sed "s#@ROOT@#$PWD#" scripts/pull-matt.plist > ~/Library/LaunchAgents/com.pymodel.pull-matt.plist   # from the clone's root
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.pymodel.pull-matt.plist
node scripts/matt.mjs link && node scripts/matt.mjs check   # after upstream adds or renames a skill

scripts/to-auto-watch.plist sweeps every run with goal.mjs check --all each 30 minutes and notifies each new problem (a STALE run, an orphaned ticket, a target that moved under the run, scripts changed under it, NOW ahead of the registry); it runs nvm's default node, so an nvm upgrade never blinds it:

sed "s#@ROOT@#$PWD#" scripts/to-auto-watch.plist > ~/Library/LaunchAgents/com.pymodel.to-auto-watch.plist   # from the clone's root
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.pymodel.to-auto-watch.plist

A failing check means an upstream skill is new or renamed: give it a row in to-auto/INTEGRATION.md (what the pipeline does with it, or not used and why), re-read to-auto/PITFALLS.md, and commit matt/ and docs together. Until then check fails and runs stop at stage 00.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages