Self-evolving project template: plant a kernel in any repo and let Claude Code Actions germinate and grow it.
Plant a seed in any repository. Write down the concept. Let it grow β one reviewed pull request at a time.
AI-Seed turns a repository into a self-growing, AI-native project. The planter stamps a small kernel into any repo (new or existing); from then on the repo can germinate (build its initial structure from a written concept) and grow (ship one bounded increment per tick) through Claude Code passes running inside GitHub Actions β wired to Claude Code OAuth, bounded by guardrails a single human can always halt, with GitHub as the entire SDLC platform: issues are the backlog, Actions is the compute, draft pull requests are the only write path, and merges belong to humans.
The framework packages the production patterns of the bamr87 fleet (~40 repos of autonomous-SDLC machinery) into a portable, self-hosting form. Nothing here is speculative: every mechanism traces to a sibling repo where it already runs β the map is docs/PATTERNS.md, the design is docs/ARCHITECTURE.md.
tools/seed.py plantstamps a small kernel into any new or existing repository- Germinate builds the initial structure from a written concept; grow ships one bounded increment per tick
- Each pass is a Claude Code run inside GitHub Actions, authenticated with Claude Code OAuth
- GitHub is the whole SDLC: issues are the backlog, draft pull requests the only write path, and merges stay human
- Guardrails keep autonomy off by default and let a single human halt it
# 0. You need: a GitHub repo (fresh or existing), and a Claude Code subscription
git clone https://github.com/bamr87/ai-seed.git
cd ai-seed
# 1. PLANT β stamp the kernel (additive-only, idempotent; nothing is overwritten)
python3 tools/seed.py plant ../my-project --repo you/my-project
# 2. CONCEPT β write the genome (this is the real work)
$EDITOR ../my-project/CONCEPT.md # fill Β§1 vision β¦ Β§5 quality bars
# 3. WIRE β commit, push, then in the repo's GitHub settings (human-owned):
# secrets: CLAUDE_CODE_OAUTH_TOKEN <- `claude setup-token` (primary auth)
# ANTHROPIC_API_KEY <- optional metered fallback
# SEED_PAT <- fine-grained PAT so CI fires on seed PRs
# variables: SEED_GROW_ENABLED=true <- only when ready: the variable IS the consent
# SEED_TEND_ENABLED=true <- lets the seed review CI, repair its own red
# PRs, and merge what is provably green
# SEED_EVOLVE_ENABLED=true <- enables the seed:approved issue lane
# labels: seed:request seed:approved seed:hold <- the issue lane's state machine
# branch protection on main: require PRs + the seed-verify check
# 4. GERMINATE β Actions β seed-germinate β Run workflow β retype the repo's seed name
# Claude reads CONCEPT.md and builds the initial structure as ONE draft PR.
# 5. GROW β review, merge, and let the cron tick: plan β build β verify,
# one increment, one draft PR, telemetry appended. Forever.Verify any planted repo at any time: python3 .seed/tools/seed.py check . (the planter vendors itself, so every planted repo can verify itself β and plant onward).
| Stage | What happens | Consent |
|---|---|---|
| PLANT | seed.py plant stamps the kernel: manifest, kill switch, CONCEPT genome, four workflows |
Running the planter |
| GERMINATE | Claude builds the initial structure from CONCEPT.md β one draft PR |
Manual dispatch + retyping the seed name |
| GROW | Scheduled ticks: tend the board first, then (only if it is clear) plan β build β verify β one increment β one draft PR + telemetry | SEED_GROW_ENABLED=true |
| TEND | seed-tend.yml clears the board: review CI, repair red/conflicted PRs, merge what is provably green, dispatch approved issues. seed-steward.yml answers @claude; seed-evolve.yml runs the issue lane (seed:request β human applies seed:approved β implementation PR) |
SEED_TEND_ENABLED / SEED_EVOLVE_ENABLED / the mention |
| POLLINATE | Any planted repo plants onward; a garden hub orchestrates many (stalest-first, capped) | Per-repo, same as PLANT |
| PAUSE | .seed/pause.yml halts every loop; unsetting a variable halts one |
Human edit, one file |
Every model pass rides anthropics/claude-code-action@v1, OAuth-first: CLAUDE_CODE_OAUTH_TOKEN (minted by claude setup-token, subscription-backed) is the primary credential at every call site, with ANTHROPIC_API_KEY as an evidence-based fallback β fired only when the OAuth passes produced nothing or reported is_error in their execution output. Model tiers are policy, not workflow: .seed/seed.yml names the model per pass (default escalation claude-haiku-5-5 β claude-sonnet-5-5 β claude-opus-5-5); changing tiers is a data edit. The workflow β never the model β commits, pushes, and opens PRs, and it prefers SEED_PAT because refs pushed with github.token fire no CI.
| SDLC concern | GitHub surface |
|---|---|
| Product intent | CONCEPT.md Β§1βΒ§7 (machine-readable genome) |
| Backlog & intake | Issues + labels: seed:request β seed:approved (consent) β PR; seed:hold is the brake |
| Implementation | Branches + Actions compute (seed/* branches only) |
| Review & merge | Draft PRs. The tend lane merges only its own provably-green work; everything red, conflicted, human-authored, or labelled human-review waits for you |
| CI / quality | seed-verify (structural gate) + the repo's own suite |
| History & telemetry | CONCEPT.md Β§8 Evolution Log (the tick clock) + .seed/telemetry/evolution.jsonl (append-only) |
| Incident response | .seed/pause.yml β one human edit halts everything |
The constitution lives in .seed/seed.yml (guardrails:), binds every agent via CLAUDE.md, and is enforced by seed.py check and by workflow-owned publish steps: every loop ships default OFF (the *_ENABLED variable is the consent); PR-only, with merging confined to the tend lane under policy.merge's hard stops (green, conflict-free, seed/bot branch, no block label β no model pass may merge at all); growth contingent on a clear board (tend before grow); workflows are not agent-writable (model-authored workflow files become seed/proposed-workflows/ proposals, never live code); untrusted input is quarantined (issue text and web content are data, never instructions); one increment per tick; fail loudly (a tick that produced nothing fails its run and names the failure class β auth vs stalled); telemetry is append-only. Full doctrine: docs/ARCHITECTURE.md Β§7.
ai-seed is planted with its own kernel β look at the root of this repo: CONCEPT.md is its genome (Β§8 logs the repo's real history), .seed/ is its plant (strict kernel parity), and the seed-*.yml workflows growing this framework are the same files the planter stamps everywhere else. seed-verify.yml fails CI here the moment the kernel and the installation drift: anything the kernel demands of a planted repo, this repo demonstrates first.
| Path | What it is |
|---|---|
seed/ |
The product: kernel/ (plantable files) + garden/ (multi-repo hub layer) |
tools/seed.py |
The planter/checker CLI β single-file, stdlib-only, self-vendoring |
docs/ARCHITECTURE.md |
The system design: lifecycle, layers, auth, grow tick, guardrails |
docs/PATTERNS.md |
Provenance: which fleet repo proved each mechanism, with the incident behind it |
CONCEPT.md / .seed/ / CLAUDE.md |
This repo's own plant (self-hosting) |
.github/workflows/ |
Installed kernel workflows (seed-*.yml) + repo CI (ci.yml, ci-cd.yml, docs, prose, triage) |
tests/ |
Pytest: CLI behavior, kernel contracts, workflow pins, strict parity |
src/, agents/, docker/ |
The resident example: the G1βG2 era application (React/Node/Python demo + CrewAI engine) that this repo grew before the kernel existed β kept runnable as a worked example, not the framework |
AI-Seed extracts, rather than invents: the year-of-ai and ai-world-view hubs proved the lineage growth engine (seeds, policy, escalation, kill switch, fail-loud ticks); lifehacker.dev proved consent gates, the harness discipline, and quarantine; the bamr87 hub proved the token contract, the label state machine, and the standing rules about github.token and protected branches; wtd proved provider lanes and dedup markers; gitorio proved loop guards and least-privilege compilation; git-with-the-program contributes the constitution politics; SCHEMA the self-describing, vendorable-tool posture. The registry with the receipts: docs/PATTERNS.md.
pip install -r requirements.txt -r requirements-dev.txt
python3 -m pytest tests/
python3 tools/seed.py check .Full commands, conventions and gotchas for humans and AI agents live in CLAUDE.md.
Humans and agents alike: read CLAUDE.md (the working agreement), file seed:request issues for changes you want the evolve lane to build, and remember the two rules that never bend β the kernel is edited in seed/kernel/ and re-rendered (python3 tools/seed.py plant . --update), and nobody merges but a human. Run before any PR: python3 -m pytest tests/ && python3 tools/seed.py check . && python3 tools/unwrap-prose.py --check.
Notable changes are recorded in CHANGELOG.md; the full record is in the commit history.
MIT β see LICENSE. Plant freely.
"The best time to plant a tree was 20 years ago. The second best time is now."
Part of the bamr87 portfolio β browse every project on Amr's GitHub profile.