A framework for running coding agents as long running tasks - with deterministic feedback loops and agent reviewers
Project description
Engineering Agent
NOTE: This repository is under active development. You should probably not use it for anything important yet.
Treat engineeringagent init as experimental scaffolding and review all generated changes before committing.
Engineeringagent is a CLI that helps you implement code changes directly from feature specs. It pairs an agent loop with repository-owned harnesses (validators, checks, fitness functions, and optional reviewer agents).
You will still need to implement/configure the harness for your repository. If you are just starting out, the first few specs you run should usually be harness improvements.
Primary flow: feature spec -> run loop.
Command styles
- Package usage (PyPI, no clone):
uvx engineeringagent <command> - Package usage (version pinned):
uvx engineeringagent@<version> <command>
Quickstart from PyPI (no clone)
-
Make sure you are in a git repository.
When the process starts, at least one commit will be made per implemented feature.
-
Scaffold the baseline harness with
init.initis interactive (it requires a TTY and will prompt you with choices).uvx engineeringagent init slim
You can also scaffold a more complete baseline:
uvx engineeringagent init standard
Warning:
initis experimental scaffolding. Inspect generated files, runuvx engineeringagent validate, and review the git diff before committing. -
Create a feature spec in
docs/spec/features/.Use the schema
docs/spec/schemas/feature.schema.jsonto create a spec. Save this asdocs/spec/features/FEAT-001-example.yaml. -
Validate and dry-run the loop first:
uvx engineeringagent validate uvx engineeringagent run --all --dry-run
-
Dry-run the loop first:
uvx engineeringagent run docs/spec/features/FEAT-001-example.yaml --dry-run
-
Before the first non-dry
engineeringagent run, either commit the scaffold/spec changes or pass--allow-dirty.Running non-dry mutates your feature YAML and writes progress logs (for example
progress/runs.jsonlandprogress/run-feature-<FEATURE_ID>.txt). Running non-dry will create a commit and may include untracked files; checkgit statusand commit/review anyinitscaffold output (and ignore junk like__pycache__/) before the first non-dry run.After a feature is complete, move completed specs from
docs/spec/features/todocs/spec/features_done/(the loop will usually do this automatically when marking a featuredone, but move it manually if it did not).engineeringagent validaterejectsstatus: donespecs underdocs/spec/features/.Help validate OpenCode wiring up-front:
opencode --version.opencode/agents/engineeringagent.md
The first non-dry run may take a while (especially the first time, when OpenCode is cold-starting).
By default,
engineeringagent runretries failed iterations up to--max-iterations(default 50). When debugging OpenCode timeouts,--max-iterations 1helps fail fast.
Quickstart from source (contributors / local changes)
If you are developing this repo and want to exercise local changes (not the PyPI package), install the project into your local uv environment and run the CLI via the console script:
uv sync
uv run engineeringagent init slim
uv run engineeringagent validate
uv run engineeringagent run --all --dry-run
Verification (contributors)
-
Run the full
iteration_endcheck set declared inharness/checks.yaml:uv run engineeringagent checks run --phase iteration_end
-
Run pylint directly (same flags as the repo gate):
uv run pylint --score=n --reports=n src/engineeringagent tests harness
Bootstrapping with init
If you want to use the agent in one of your repositories, you can scaffold a baseline harness with:
uvx engineeringagent init
init creates a starter structure for docs/spec/ and harness/checks.yaml and handles
existing docs/ or AGENTS.md through explicit conflict choices.
engineeringagent init skips pre-commit hook installation when .git/ does not exist.
If you want hooks installed, run git init before engineeringagent init.
engineeringagent init skips pre-commit hook installation when pre-commit is not available.
If you install pre-commit after running init, you can wire the hooks with pre-commit install.
At a minimum, init scaffolds:
docs/spec/directories for feature specsharness/checks.yamlas the repo-owned verification contract
It does not run checks for you or make any commits.
Warning: treat init as experimental scaffolding.
Always inspect generated files, run uvx engineeringagent validate, and review
the git diff before committing anything produced by init.
If you picked standard, the scaffold may include demo checks. Remove any demo-only
checks from harness/checks.yaml if you want a clean baseline (or re-run:
uvx engineeringagent init slim --force).
Use python_uv as a profile when you want the scaffolded .pre-commit-config.yaml to assume an
uv-based workflow and ship a minimal Python validation baseline.
python_uv also wires a commit-msg hook.
uvx engineeringagent init slim --scaffold-profile python_uv
Pinning the scaffolded OpenCode model (optional)
engineeringagent init scaffolds the OpenCode agent prompt at .opencode/agents/engineeringagent.md.
If you want to pin which model OpenCode uses for that agent, pass --model:
uvx engineeringagent init slim --model openai/gpt-5.3-codex
If you are only validating wiring in CI (for example, smoke tests that run OpenCode once), using a faster model can reduce wall time:
uvx engineeringagent init slim --model openai/gpt-5.3-codex-spark
This repository does not use the legacy repo-root OpenCode config file (the old opencode JSON).
Any temporary OpenCode configuration should be done via .opencode/agents/*.md.
What this gives you
- Deterministic progress: one spec file at a time.
- Human control: you set priorities and scope; agents execute loops.
- Built-in quality checks: validation, checks, and commit hooks.
Run output tips
- Default output is concise; full implement/check output stays in
progress/run-feature-<FEATURE_ID>.txt. - Use
--verbose-outputif you want full implement/check output in the terminal.
OpenCode default agent contract
- By default,
engineeringagent runshells out toopencode run --agent engineeringagentfor the implementation step. - Your repo must have OpenCode available and configured, including an agent prompt
like
.opencode/agents/engineeringagent.md. - If you are not using OpenCode, run the direct verification tools for your repository (for example
uv run pytest -q).
Human docs vs agent docs
README.md: first-run, for you the developer.- Harness Engineering Principles: deeper for you the developer.
AGENTS.mdanddocs/references/*-llms.md: agent execution rules and deterministic procedures.
Reviewer agents (optional)
- Reviewer agents are a harness-managed complement to deterministic checks.
- Reviewer checks are declared in
harness/checks.yamland reference prompts underharness/reviewers/prompts/. - For setup and migration guidance, see Reviewer authoring guide.
- For full contract, policy semantics, decision-envelope examples, and troubleshooting, see Reviewer agents reference.
Core files to know
docs/spec/features/: active feature specs (backlog,in_progress,blocked)docs/spec/features_done/: archived completed specs (done)harness/checks.yaml: repo-owned verification contractprogress/runs.jsonl: append-only loop execution history
Contributing
- Pull requests are not accepted for this repository.
- Code changes are implemented through the project agent workflow.
- If you want a new capability, open a GitHub issue with the problem, desired outcome, and constraints.
- Feature requests from issues may be promoted into a formal spec under
docs/spec/features/.
Go deeper
- CLI workflow details
- Agent execution map (scaffolded by init): see
AGENTS.md(repo root) - Docs architecture for agents
Curated external context
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file engineeringagent-0.3.0.tar.gz.
File metadata
- Download URL: engineeringagent-0.3.0.tar.gz
- Upload date:
- Size: 1.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
04d760e0f93b3d4f831ca417683c78429890b5f41eb94b08f7910692909378de
|
|
| MD5 |
e8e4bcd37d8ac025755982b070968af2
|
|
| BLAKE2b-256 |
2206c1c939750a92f4740fc7039cdba4b6bbca0fcb08ceea2c5bd5fb7bb44d20
|
File details
Details for the file engineeringagent-0.3.0-py3-none-any.whl.
File metadata
- Download URL: engineeringagent-0.3.0-py3-none-any.whl
- Upload date:
- Size: 131.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a720af5c5967aa9ae6a49c9ce6aefff8680b419f06acb748b55f58dc9f8cf166
|
|
| MD5 |
bc61774d2b0db3682aa78a3db7ba2142
|
|
| BLAKE2b-256 |
5b4ece012518d90e229bcf6bcf9812bc248b1b9c966b90425d4a954f73a4779d
|