What it does
GenesisPantheon lets you assemble a team of AI agents (called Personas) that pass typed messages (called Signals) to each other and collaboratively build software end-to-end: from a plain-English requirement through product spec, architecture design, code generation, code review, test generation, and automated test execution.
Each persona subscribes to certain signal types and responds by running one or more Directives (discrete units of LLM work). The framework routes signals, runs all active personas concurrently each round, tracks token spend against a budget cap, and writes the generated code to a workspace directory.
You can use GenesisPantheon in two ways:
- CLI -- run
genesispan launch "your mission" to start an autonomous development session
- Python library -- import the classes, wire your own personas and directives, and call
collective.run()
Tech stack
Quick start
Install
pip install genesis-pantheon
Or from source:
git clone https://github.com/TemidireAdesiji/genesis-pantheon.git
cd GenesisPantheon
pip install -e ".[dev]"
Configure
# Create the default config file at ~/.genesis_pantheon/blueprint.yaml
genesispan init-config
# Set your LLM API key
export OPENAI_API_KEY="sk-..." # for OpenAI
export ANTHROPIC_API_KEY="sk-ant-..." # for Anthropic
Run a mission
genesispan launch "Build a command-line todo list app in Python" \
--budget 5.0 \
--rounds 6 \
--output ./my-todo-app
The framework will write the generated product spec, architecture, code, and tests to ./my-todo-app/.
Python API
import asyncio
from genesis_pantheon import Collective, Nexus
from genesis_pantheon.personas import (
VisionDirector,
SystemArchitect,
CodeCrafter,
MissionCoordinator,
)
async def main():
ctx = Nexus()
ctx.config.llm.api_key = "sk-..."
ctx.budget.max_budget = 5.0
collective = Collective(context=ctx)
collective.recruit([
VisionDirector(),
SystemArchitect(),
MissionCoordinator(),
CodeCrafter(),
])
signals = await collective.run(
n_rounds=6,
mission="Build a command-line todo list app in Python",
)
print(f"Completed with {len(signals)} signals")
asyncio.run(main())
Architecture