Skip to main content

spek logo

spek

Turn a SPEC.md into an installable, tested Python package.

spek is a small LLM-powered coding agent. You write a markdown file describing what you want, point spek at it, and a few minutes later there's a working Python package on disk that builds and passes its own tests.

For the design rationale and a worked example end-to-end, see Here is how I built a simple coding agent.

Requirements

  • Python 3.11+
  • uv (recommended) or pip
  • A running Docker daemon — spek runs every shell command and file write inside a sandboxed container. If Docker isn't running, spek build refuses to start.
  • An Anthropic API key in the environment (ANTHROPIC_API_KEY).

Install

The PyPI distribution is spek-cli; the binary is still spek:

uv tool install spek-cli      # recommended: isolated, on $PATH
# or:
pip install spek-cli

Verify:

spek --help

Configure credentials

spek looks for .env in the current directory or any ancestor of the spec file. Copy the template and fill it in:

cp .env.example .env
$EDITOR .env                  # paste your ANTHROPIC_API_KEY

You can also override the model:

ANTHROPIC_API_KEY=sk-ant-...
ANTHROPIC_MODEL=claude-sonnet-4-6        # optional
ANTHROPIC_BASE_URL=https://api.anthropic.com   # optional, for proxies

Quick start

Two commands:

spek init my-project                           # scaffold SPEC.md skeleton
$EDITOR my-project/SPEC.md                     # describe what you want
spek build my-project/SPEC.md \
  --workdir my-project --confirm-plan          # run the agent

When the run finishes green, my-project/ contains a normal Python project (pyproject.toml, src/, tests/) you can use immediately:

cd my-project
uv run pytest                                  # tests pass
uv run <your-cli> --help                       # the binary you specified

A real example

The repo ships with a worked example at examples/weather-tool/SPEC.md:

spek build examples/weather-tool/SPEC.md --workdir /tmp/weather

A run produces a working weather-converter CLI with 27 tests passing. The full session log and final plan are described in BLOG.md.

CLI

spek --help

usage: spek [-h] {init,build} ...

  init     Scaffold an empty SPEC.md and .spek/.
  build    Run the agent against a SPEC.md spec.

Useful spek build flags:

Flag What it does
--workdir DIR (required) Directory for the package; bind-mounted at /work inside the container.
--fresh Wipe .spek/ before starting. Use after significant spec changes so the agent re-plans from scratch.
--confirm-plan Pause after the plan phase and require approval (or edit) of .spek/plan.md. Recommended.
--max-steps N Cap on tool calls. Default 120.
--max-seconds N Wall-clock cap. Default 1800.
--quiet Suppress progress output. The journal still records every event.

What spek writes

Everything is scoped to the working directory. After a successful run:

<workdir>/
├── SPEC.md                   # your input (untouched)
├── pyproject.toml            # generated
├── src/...                   # generated
├── tests/...                 # generated
└── .spek/
    ├── journal.jsonl         # full event log (resume + audit)
    ├── plan.md               # the plan (numbered checklist)
    └── command_config.json   # build/test/lint commands the agent uses

There is no global state and no ~/.config/spek. Wipe .spek/ and the next run starts from scratch.

Development

make install       # uv-managed venv with dev extras
make test          # pytest
make lint          # ruff + black --check
make typecheck     # mypy strict
make build         # sdist + wheel into ./dist

Full target list: make help.

License

MIT.

Release files for spek-cli 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for spek-cli 0.1.1
File Size Uploaded
spek_cli-0.1.1.tar.gz 875.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for spek-cli 0.1.1
File Interpreter ABI Platform
spek_cli-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 923.6 kB

Release files / spek_cli-0.1.1.tar.gz

Download URL spek_cli-0.1.1.tar.gz
Size 875.8 kB
Tags Source
SHA-256 checksum
How to use checksums
bf95d9db1d5a3d40fa108e70470bc504f3ab9bcbe32aa760c9874959b8d730cc
BLAKE2b-256 checksum
How to use checksums
c245d940b706de53590e162a9265f81cf3a85e436cd8e4d420112bc59f168d43
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.8.5

Release files / spek_cli-0.1.1-py3-none-any.whl

Download URL spek_cli-0.1.1-py3-none-any.whl
Size 47.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4f135dd11acdf771dbb9d8cca98944591e812360424d52c2496581b6f00134e7
BLAKE2b-256 checksum
How to use checksums
5cdfeb20320dd1fb4b90a2d6f39678af1c990870cb1b70e457c38c21066f03c0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.8.5

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page