Execute
Execute is the agent’s part. Expand left behind a task list —
typically “n tools to implement for this platform” — and a
TOOL.md contract in each tool folder. The agent now writes the
platform file beside each contract:
.agent/tools/check-plist-keys/├── TOOL.md ← the contract (came from the source)├── fixtures/ ← test files the contract's examples refer to└── macos.py ← written here, by the agent, for this machineThe contract fixes everything that matters — input schema, output schema, declared effects, worked examples — so “implement this” is a tightly bounded task, not an invitation to be creative:
- The wire format is non-negotiable: one JSON object on stdin,
one JSON object on stdout, exit 0 when
okis true. - The language is free. On this machine it was
python3(macos.py) for plist parsing and a shell script (macos.sh) wherecodesigndoes the real work. Another platform gets its own file —windows.ps1next tomacos.py— and both are committed, so the next machine of the same platform implements nothing. - Error cases are part of the contract. If the spec’s examples
include a missing-file case returning
ok: falsewith anerrorstring, the implementation must do exactly that.
The iteration rule: implement, then run
speccify tool check — and keep going
until every example passes. The agent does not declare a tool
done; the check does.
Once the tools stand, executing the skill is nothing special: the
agent follows the expanded SKILL.md step by step, calling the tools
it now trusts, exactly as described under
Skills. Speccify adds only a trace —
which skill ran, which iteration, when — so that later there is an
answer to “what did it actually do?”.
Whether the result is any good is the question Evaluate answers.