Skip to main content

AgentMachinist

Local-first agentic build & CI/CD for solo developers. AgentMachinist bridges GitHub issues to local coding harnesses — Claude Code, OpenCode, PI, or Codex — through a three-phase, human-in-the-loop pipeline that runs on your Mac.

New here? Start with the Getting Started guide. Prefer a visual tour? Open docs/onboarding.html in a browser — a self-contained illustrated handbook of the pipeline and its principles.

 GitHub issue (label: agent-task)
        │
        ▼
 Phase 1 · SPEC        harness writes .machinist/specs/issue-<n>-spec.md
        │              → branch agent/issue-<n> → draft PR (Closes #<n>)
        ▼
 Phase 2 · APPROVE     you review the spec; apply label machinist:approved
        │              (or comment /machinist-execute on the PR)
        ▼
 Phase 3 · EXECUTE     local daemon implements the spec in an isolated
                       worktree, runs your tests, pushes to the PR branch,
                       and marks it ready for review

The agent never merges anything. You approve the spec before code is written, and you review the PR before it lands.

Install

uv tool install agentmachinist        # or: uv tool install git+https://github.com/vscarpenter/AgentMachinist

Prerequisites: gh (authenticated), git, and at least one coding harness CLI (claude, opencode, pi, or codex).

Quickstart

In the repository you want agents to work on:

machinist init          # writes machinist.yaml, .machinist/, and GitHub workflows
machinist spec 42       # Phase 1 for issue #42 (or let `watch` pick it up)
machinist watch         # daemon: polls for labeled issues and approved PRs
machinist run 42        # Phase 3 for an approved spec

Configuration (machinist.yaml)

version: 1
harness:
  name: claude-code            # claude-code | opencode | pi | codex
  command: null                # optional executable override
  timeout_minutes: 30          # Phase 3 implementation budget
  spec_timeout_minutes: 10     # Phase 1 spec budget
github:
  repo: null                   # "owner/repo"; null = derived from origin
  labels:
    trigger: agent-task
    approved: "machinist:approved"
  poll_interval_seconds: 60
workspace:
  root: ~/.machinist/workspaces
  strategy: worktree           # worktree | clone
  cleanup: on_success          # always | on_success | never
  branch_prefix: agent/
tests:
  command: null                # e.g. "pytest -q"; null skips the test gate

Unknown keys are rejected — typos fail loudly instead of being ignored.

How approval works

The single source of truth is the machinist:approved label on the draft PR. Apply it by hand, or comment /machinist-execute on the PR — the bundled machinist-approve.yml workflow converts that comment into the label (only for repo owners, members, and collaborators). Draft → Ready for Review is reserved as the agent's signal that implementation is complete.

Spec generation: local or CI

Both paths run the same machinist spec <n> command:

  • Local (default): machinist watch sees the agent-task label and generates the spec on your machine using your existing harness login.
  • CI: the bundled machinist-spec.yml workflow runs it in GitHub Actions when an issue is labeled — works while your Mac sleeps, but requires an ANTHROPIC_API_KEY repository secret.

Status

v0.1 (M3): all three phases work end-to-end — init, spec, run, status, and the watch daemon (--once for a single cron-friendly pass). The pipeline has dogfooded itself: its own getting-started guide was specced, approved, implemented, test-gated, and merged by the pipeline (issue #1 → PR #3). See docs/superpowers/specs/ for the design.

Releasing (maintainer notes)

Publishing uses PyPI Trusted Publishing — no tokens. One-time setup: on pypi.org under Publishing, add a pending publisher for project agentmachinist (owner vscarpenter, repo AgentMachinist, workflow release.yml, environment pypi). After that, each release is: bump version in pyproject.toml, commit, then create a GitHub Release for tag v<version> — the release workflow builds and publishes automatically.

License

MIT — see LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

agentmachinist-0.1.0.tar.gz (61.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

agentmachinist-0.1.0-py3-none-any.whl (23.1 kB view details)

Uploaded Python 3

File details

Details for the file agentmachinist-0.1.0.tar.gz.

File metadata

  • Download URL: agentmachinist-0.1.0.tar.gz
  • Upload date:
  • Size: 61.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for agentmachinist-0.1.0.tar.gz
Algorithm Hash digest
SHA256 768bbb3bf981dc0077ffb2dcf14dddd7376c9aa460eba85d4fb72ced28ccde22
MD5 cfcef30f0a87afe549dcdad0a37caf41
BLAKE2b-256 8fc012195a9e3533cbe340d70cb677b9e998c8f65f5df56066d17e4c53c2f148

See more details on using hashes here.

File details

Details for the file agentmachinist-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: agentmachinist-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 23.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for agentmachinist-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3142e1e3896492c43d1ecfd384add96dffb72ace2f92fcaffdfb0b3898dc7b15
MD5 865a9a248e7daf11a45d03c3626f5bcb
BLAKE2b-256 99871bd7b66b22cdde2ea44ae2fd5eb4fc9c8d1f2dcc76eb1c6c3242a2f99a04

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page