Capability-driven autonomous project execution engine (antcrew Layer 2)
Project description
antcrew-engine
Capability-driven autonomous project execution engine — Layer 2 of the antcrew stack.
The engine iterates an Operator loop over a natural-language goal, dispatching modular Capability executors until every condition in the desired project state is satisfied. No LangGraph dependency — designed to be embedded directly or wrapped by antcrew (Layer 1).
Architecture
Goal + Constraints
│
▼
Operator ─── CapabilityRegistry
│ │
│ ┌─────────┴──────────────────────────────┐
│ │ Architect TaskPlanner CodeGenerator │
│ │ TestRunner BugFixer HitlReviewer │
│ │ CodeReviewer DocGenerator ... │
│ └─────────────────────────────────────────┘
│
▼
ArtifactStore (MemoryStore | FilesystemStore | MultiRepoStore)
Each capability reads from and writes to the store. The Operator picks the cheapest applicable capability until the DesiredProjectState is reached.
Install
pip install antcrew-engine
# with Anthropic support:
pip install "antcrew-engine[anthropic]"
# all model providers:
pip install "antcrew-engine[all]"
Quick start — CLI
# Build a REST API, write output to ./my-api
antcrew-engine "Build a FastAPI REST API with user authentication" \
--tech Python --output ./my-api
# Load an existing project (skips planning, jumps to coding/testing)
antcrew-engine "Add docstrings to all public functions" \
--from-dir ./my-project --output ./my-project
# Multi-repo routing (write to different repos by file prefix)
antcrew-engine "Build a full-stack app" \
--repo backend:/repos/api --repo frontend:/repos/ui \
--route src/api/:backend --route src/ui/:frontend
# Resume a prior run
antcrew-engine --resume --output ./my-api
# Inspect an existing output directory
antcrew-engine status ./my-api
Quick start — Python API
from antcrew_engine import (
Operator, MemoryStore, Goal, DesiredProjectState, Constraints,
Condition, ConditionId, CapabilityRegistry, EventLog, build_llm,
Architect, TaskPlanner, CodeGenerator, TestGenerator, TestRunner,
BugFixer, CodeReviewer, DocGenerator, DependencyInstaller,
)
llm = build_llm("claude") # or "gpt-4o", "groq:llama3-70b", "simulated"
registry = CapabilityRegistry()
registry.register(Architect(llm=llm))
registry.register(TaskPlanner(llm=llm))
registry.register(CodeGenerator(llm=llm))
registry.register(TestGenerator(llm=llm))
registry.register(TestRunner())
registry.register(BugFixer(llm=llm))
registry.register(CodeReviewer(llm=llm))
registry.register(DocGenerator(llm=llm))
registry.register(DependencyInstaller(llm=llm))
store = MemoryStore()
goal = Goal(
description="Build a CLI tool that converts Markdown to HTML",
desired_state=DesiredProjectState(frozenset([
Condition(ConditionId("requirements_exists"), "requirements written"),
Condition(ConditionId("architecture_exists"), "architecture designed"),
Condition(ConditionId("task_graph_exists"), "tasks planned"),
Condition(ConditionId("implementation_exists"), "code written"),
Condition(ConditionId("tests_pass"), "tests passing"),
Condition(ConditionId("documentation_exists"), "README written"),
])),
constraints=Constraints(tech_stack=("Python",)),
)
event_log = EventLog()
operator = Operator(registry, [], event_log, max_iterations=40)
state = operator.run(store, goal)
print("Success:", state.is_complete)
for artifact in store.list():
print(f" {artifact.id}: {artifact.kind.value}")
Multi-repo store
Route artifact writes to different filesystem roots by file-path prefix:
from antcrew_engine import MultiRepoStore
store = MultiRepoStore(
repos={
"backend": "/repos/api",
"frontend": "/repos/ui",
"shared": "/repos/shared",
},
routes={
"src/api/": "backend",
"src/ui/": "frontend",
},
default="shared",
)
Capabilities
| Capability | Description |
|---|---|
Architect |
Writes requirements + architecture documents |
TaskPlanner |
Breaks architecture into a task graph |
CodeGenerator |
Implements tasks in parallel |
CodeRegenerator |
Regenerates code after a bad review |
TestGenerator |
Writes a pytest test suite |
TestRunner |
Runs pytest, produces a test report |
BugFixer |
Reads the traceback, patches failing files |
CodeReviewer |
Reviews code, produces an approval or rejection |
ReviewFixer |
Applies reviewer feedback to source files |
DependencyInstaller |
Infers requirements.txt and installs a venv |
DocGenerator |
Writes README.md |
HitlReviewer |
Pauses for human approval before proceeding |
SpecExtractor |
Extracts a structured spec from a free-form description |
Model support
Pass a model string to build_llm():
| String | Provider |
|---|---|
"claude" |
Anthropic claude-sonnet (default) |
"claude-haiku-4-5-20251001" |
Anthropic Haiku (cheap/fast) |
"gpt-4o" |
OpenAI |
"groq:llama3-70b-8192" |
Groq |
"ollama:llama3" |
Ollama (local) |
"gemini" |
Google Gemini |
"simulated" |
Deterministic stub (tests / CI) |
License
MIT
Project details
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 antcrew_engine-0.2.0.tar.gz.
File metadata
- Download URL: antcrew_engine-0.2.0.tar.gz
- Upload date:
- Size: 86.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
48af21e77eed2040a1cd3abc12ed613cf2f63331ff6550225b36f8e2f290d51a
|
|
| MD5 |
b193a1c00a188e605a335a21d857c025
|
|
| BLAKE2b-256 |
c939d78f3a2f7230e74bcc7b019935225d7d750d60655299d478fc481dd3f10a
|
File details
Details for the file antcrew_engine-0.2.0-py3-none-any.whl.
File metadata
- Download URL: antcrew_engine-0.2.0-py3-none-any.whl
- Upload date:
- Size: 93.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
82c364df561bcd4edb11e18e3cb04a57890b1d5918be881fba12705532046301
|
|
| MD5 |
5bdb1fb6d1aae8f94e8c9938e8b15024
|
|
| BLAKE2b-256 |
0774ed212eb423918675f2db3d7cd035810f7975ca0a5f4c820a5b6f0b2d22f1
|