Antmay optimizes Spec Driven Development. It offers a thread-based method for SDD, a suite of skills that support that method, and a CLI that automates it.
The method is simple: every unit of work lives in its own thread under .work/threads/, where a spec records the design of the work and a delta drafts whatever that work adds to the project's standing documentation. Intent is written down before it is built, and it is written where a teammate reviewing a PR and a fresh agent session resuming work both read the same durable truth β reviewable Markdown on disk, not a chat log. When a thread closes, its delta lands in the project layer, the fixed set of paths that outlive any single thread.
The skills are composable and harness-agnostic SKILL.md files that work inside Claude Code, Codex, Gemini CLI, OpenCode, or any harness that loads them. They are not a runtime or a project-local state file: they are individual capabilities you install and compose, one at a time for a single job or one after another to carry a change end to end.
The CLI (antmay) runs a pipeline unattended, stage by stage, against one thread β an ordered sequence of skills executed with durable checkpoints, workspace locking, and per-stage Git boundaries. See cli/.
General-purpose, context-agnostic skills live in the companion repository
Jei-sKappa/skills.
Install the entire suite in one command:
npx skills add Jei-sKappa/antmayOr install any skill individually:
npx skills add Jei-sKappa/antmay --skill <skill-name>A thread is one unit of work as a folder on disk, at .work/threads/yyyy/mm/dd-hhmm-slug/ β a year, a month, and a leaf named by the day, the creation time, and a short slug. Inside it:
seed.md why the thread was opened
log.md the thread's append-only memory, one entry per line
spec.md the thread's design of the change, once it is authored
delta/ what the thread drafts for the project layer, one file per target
plans/ one folder per plan
implementations/ one folder per implementation run
The project layer is what outlives any single thread. It is created lazily, never a prerequisite, and made of these documents:
docs/adr/β the project's current decisions about how the system is structured or built, one file per record.docs/pdr/β the same, for decisions about what the product does or for whom.docs/glossary.mdβ the project's terms, one meaning each.- Every
AGENTS.mdorCLAUDE.md, wherever it sits β the agents files: critical rules, how the repository is structured and where to find things, and pointers, each kept under 1,000 words. .work/roadmaps/β one index per larger direction, as ordered entries carrying the behavior each will build.
A thread's delta/ is its draft of that layer, authoritative inside the thread from the moment it is written. close-thread alone lands it: each delta document is applied to the project-layer file it names, a closing line goes under the roadmap entry the thread came from, and the thread log records whether the delta landed. The thread folder stays exactly where it is, as the record of how the work was understood while it was being done.
Nothing under .work/ is cited from docs/ or from code. A thread path left in a comment, a test name or a migration outlives the thread that wrote it, and a later reader takes it for a standing rule. The search matches a concrete thread identifier, rooted or bare, and not a mere mention of the threads folder. Nothing in the method enforces this β the skills run the search where the reading already happens β so a project that wants a hard gate wires this one line into its own tooling:
git grep -n -E -e '[0-9]{4}/[0-9]{2}/[0-9]{2}-[0-9]{4}-[a-z0-9]' -- ':!.work'Every completion-oriented skill ends its final message with exactly one terminal outcome line, so a human or a calling harness can read a run's end state at a glance:
Outcome: <DONE | BLOCKED | REFUSED> β <one-line reason or pointer>
DONE means the requested job completed (non-blocking concerns included), BLOCKED means substantive execution started but stopped β on queued pending decisions or an unfixable defect β and REFUSED means preflight prevented the run from starting. This three-token protocol is the one outcome vocabulary the whole suite shares. A skill may define skill-local return tokens for its own internals β such as the subagent reply tokens and reviewer lane verdicts inside implement-plan-with-subagents β but those are private routing inputs, never terminal outcomes, and never appear outside the skill that defines them. Dialogue-driven skills such as discussion emit no terminal outcome, and neither do the one-shot deliverables open-thread and open-ticket, nor the model-invoked skill below β their questions, their finished deliverable, or their narrow written artifact are the output.
Every skill below is user-invoked: you start it directly, by name.
Expects a rough idea, a tracker ticket reference, and/or a roadmap entry; leaves a new thread folder on disk holding its seed.md and an empty log.md, created without a confirming pass and carrying a linked ticket's own body rather than a rewrite of it.
npx skills add Jei-sKappa/antmay --skill open-threadExpects a rough idea worth capturing rather than starting now; leaves a ticket in your tracker whose body becomes, unchanged, the quoted ticket section of any thread opened from it, and leaves nothing on disk.
npx skills add Jei-sKappa/antmay --skill open-ticketExpects a thread and a topic to think through; leaves one log line per settled point, and one document line per project-layer document you accept when the discussion closes.
npx skills add Jei-sKappa/antmay --skill discussionExpects a thread whose .pending-decisions/ queue holds bundles waiting on a human; leaves each answer written into the thread's log, and leaves the exhausted bundle deleted.
npx skills add Jei-sKappa/antmay --skill resolve-pending-decisionsExpects a thread whose discussion has settled β the live conversation or log.md; leaves spec.md at the thread root, its delta documents under delta/, and one event line in the log.
npx skills add Jei-sKappa/antmay --skill specExpects a thread holding a spec.md, or a referenced artifact to plan against; leaves a one-screen plan.md inside a fresh stamped folder under plans/.
npx skills add Jei-sKappa/antmay --skill plan-briefExpects a thread holding a spec.md, or a referenced artifact to plan against; leaves a fresh stamped folder under plans/ holding a plan.md index and one dispatchable brief per task under plan-tasks/.
npx skills add Jei-sKappa/antmay --skill plan-strictExpects a thread holding both a spec.md and a plan folder; leaves that plan folder corrected in place, with whatever the spec does not settle queued as a pending decision.
npx skills add Jei-sKappa/antmay --skill check-planExpects a thread that has agreed where a larger direction is going; leaves a new roadmap index under .work/roadmaps/ β a destination, ordered slug-headed entries each carrying a sketch, a scope boundary and the planned behavior its thread will build, an out-of-scope list, and a note for what cannot yet be seen.
npx skills add Jei-sKappa/antmay --skill roadmapExpects a plan folder, a referenced artifact, an issue, or your own prompt; leaves the code, tests, configuration, and living documentation it changed on the working tree, plus an implementation folder with its report.md, committing per derived task.
npx skills add Jei-sKappa/antmay --skill implementExpects a strict plan folder and a runtime that supports subagents; leaves the delivered code on the working tree and a new implementation folder with its report.md, committing per reviewed task.
npx skills add Jei-sKappa/antmay --skill implement-plan-with-subagentsReviews are strictly read-only. A clean review passes in chat and writes nothing; a review with findings records a single pending-review bundle for later attention.
Expects a thread holding a spec.md and its delta/ to judge as a downstream handoff; leaves nothing when they are ready to plan from, and one findings bundle under .pending-reviews/ when they are not.
npx skills add Jei-sKappa/antmay --skill review-specExpects a thread holding an implementation folder and its report.md; checks every row of the report's acceptance table against the spec and the code, and searches the delivered work for thread references. Leaves nothing when the delivered work matches the thread's durable intent and the report describes it honestly, and one findings bundle under .pending-reviews/ when it does not.
npx skills add Jei-sKappa/antmay --skill review-implementationExpects code to judge on its own merits β quality, safety, idioms, testability; leaves nothing when the code is clean, and one findings bundle under .pending-reviews/ when it is not.
npx skills add Jei-sKappa/antmay --skill review-codeExpects a thread whose work is delivered and whose delta/ is ready to land; leaves the delta landed in the project layer, a closing line beneath the thread's roadmap entry, a closing event in its log, and the thread folder in place.
npx skills add Jei-sKappa/antmay --skill close-threadThe skill below is model-invoked: the model may reach for it on its own whenever it helps, whether or not another skill is running, because what it reads is useful in any situation. It ships as part of the suite, so installing the suite installs it too; the snippets are here for completeness.
Expects a project whose docs/adr/ or docs/pdr/ holds at least one record, and is not invoked otherwise; leaves nothing on disk β it prints the catalog of records across both folders, opens the ones that touch the work at hand, and says how a record is cited, how long it binds, and what to do when the work contradicts one.
npx skills add Jei-sKappa/antmay --skill consult-decisionsCONTRIBUTING.md covers how issues are classified and estimated, the commit and pull-request conventions, and the checks to run before proposing a change. Beyond it: docs/documentation-rules.md is how this repository's documents are written, and suite/authoring/ holds the conventions every skill is authored to.
