Sustainable, Spec-Driven Development (SDD) for human-AI teams
Project description
Cicadas
Version 0.6.1
Sustainable, Spec-Driven Development (SDD) for human-AI teams.
Cicadas reverses the traditional relationship between code and documentation. Instead of fighting to keep specifications in sync with code, Cicadas treats forward-looking docs (PRDs, plans) as disposable inputs that drive implementation and then expire. Authoritative system documentation is then reverse-engineered from the code itself into canonical snapshots.
The Core Concept
- Active Specs are Disposable: PRDs, designs, and task lists drive implementation but expire when the initiative completes.
- Code is Truth: The codebase is the only source of truth.
- Work is Coordinated: Parallel initiatives and features are registered in a registry, allowing parallel work efforts to minimize overlap and clashes.
- Canon is Synthesized: Authoritative documentation (
canon/) is generated from the code + the intent of expired specs. It is never manually maintained. - Reflect & Signal: During development, we keep specs honest via Reflect (updating active specs to match code reality) and coordinate via Signal (broadcasting breaking changes to peer branches).
Getting Started
Installation
Option 1: Install from PyPI (Recommended)
Install Cicadas as a Python package:
pip install cicadas
This installs the cicadas CLI command. Initialize Cicadas in your project:
cd your-project
cicadas init
Option 2: Install Script (with Agent Integration)
One-liner (requires Python 3.11+ and git):
curl -fsSL https://raw.githubusercontent.com/ecodan/cicadas/master/install.sh | bash
This downloads Cicadas into .cicadas-skill/cicadas/, initializes the .cicadas/ workspace, and optionally sets up agent integrations.
With agent integration:
# Claude Code
curl -fsSL https://raw.githubusercontent.com/ecodan/cicadas/master/install.sh | bash -s -- --agent claude-code
# Cursor
curl -fsSL https://raw.githubusercontent.com/ecodan/cicadas/master/install.sh | bash -s -- --agent cursor
# Rovodev
curl -fsSL https://raw.githubusercontent.com/ecodan/cicadas/master/install.sh | bash -s -- --agent rovodev
# Multiple agents
curl -fsSL https://raw.githubusercontent.com/ecodan/cicadas/master/install.sh | bash -s -- --agent claude-code,cursor
Custom install directory:
bash install.sh --dir tools/cicadas --agent claude-code
Update Cicadas files (preserves your .cicadas/ workspace):
bash install.sh --update
Supported agents:
| Agent | Integration |
|---|---|
claude-code |
.claude/skills/cicadas symlink (uses project CLAUDE.md if present) |
antigravity |
.agents/skills/cicadas symlink |
cursor |
.cursor/rules/cicadas.mdc (copy of SKILL.md; guardrails are in the skill) |
rovodev |
.rovodev/skills/cicadas symlink |
none |
Skip; configure manually |
Requirements: Python 3.11+, curl, unzip, git
The Workflow
Phase 1: Emergence (Drafting)
When you start an initiative, tweak, bug, or skill, the agent runs a standard start flow first (name → draft folder → Building on AI? (yes/no; if yes, eval status) → requirements source/pace for initiatives → publish destination for skills → PR preference), then drafts specs. For work that builds on AI, the agent may later offer an eval spec (initiatives) or an eval/benchmark reminder (tweaks/bugs); Cicadas does not run evals. We draft specifications in .cicadas/drafts/ using specialized instruction modules (Clarify, UX, Tech, Approach, Tasks, Skill Create). Clarify can be driven by Q&A, a requirements doc (drafts/{initiative}/requirements.md), or a Loom transcript (drafts/{initiative}/loom.md).
- Key Artifact:
approach.mddefines the partitions (feature branches).
Phase 2: Kickoff
We promote drafts to Active Specs and register the initiative.
- Command:
python src/cicadas/scripts/kickoff.py {name} --intent "..." - Result: Creates
initiative/{name}branch and.cicadas/active/{name}/.
Phase 3: Execution (The Dual Loop)
Work happens in Feature Branches (registered) and Task Branches (ephemeral).
- Start Feature:
python src/cicadas/scripts/branch.py {feature} --intent "..." - Reflect: When code implementation diverges from the plan, we update the active specs immediately (and before every commit on feat/task branches).
- Code Review (optional): After Reflect; before committing on feature branches; before opening a PR or merging. The agent evaluates the diff against specs, security, correctness, and quality — producing a structured
review.mdartifact with aPASS/PASS WITH NOTES/BLOCKverdict.open_pr.pychecks this verdict and blocks onBLOCK. - Signal: If a change affects other branches, we broadcast it:
python src/cicadas/scripts/signal.py "..."
Phase 4: Completion (Synthesis)
When all features are merged into the initiative branch, we merge to main and then:
- Synthesize Canon: An AI agent reads the code on
main+ the active specs and generates fresh documentation in.cicadas/canon/(includingcanon/summary.md— a 300–500 token snapshot used to inject context at branch start). - Archive: Active specs are moved to
.cicadas/archive/.
Quick Command Reference
All scripts are in src/cicadas/scripts/.
| Action | Command |
|---|---|
| Kickoff Initiative | python src/cicadas/scripts/kickoff.py {name} --intent "..." |
| Start Feature | python src/cicadas/scripts/branch.py {name} --intent "..." |
| Check Status | python src/cicadas/scripts/status.py (shows Merged/Next when lifecycle exists) |
| Check Conflicts | python src/cicadas/scripts/check.py |
| Send Signal | python src/cicadas/scripts/signal.py "Message..." |
| Log Work | python src/cicadas/scripts/update_index.py --branch {name} ... |
| Lifecycle | python src/cicadas/scripts/create_lifecycle.py {name} (PR boundaries + steps in drafts/active) |
| Open PR | python src/cicadas/scripts/open_pr.py [--base branch] (gh/glab/Bitbucket/fallback; blocks on BLOCK verdict) |
| Check Review | python src/cicadas/scripts/review.py [--initiative name] (read verdict from review.md) |
| Archive | python src/cicadas/scripts/archive.py {name} |
| Abort | python src/cicadas/scripts/abort.py |
| Project History | python src/cicadas/scripts/history.py |
| Validate Skill | python src/cicadas/scripts/validate_skill.py {slug} |
| Publish Skill | python src/cicadas/scripts/skill_publish.py {slug} [--publish-dir DIR] [--symlink] [--force] |
Project Structure
The Cicadas toolset manages the .cicadas/ directory:
.
├── src/
│ └── cicadas/ # The Cicadas orchestrator (scripts & agents)
└── .cicadas/
├── canon/ # Authoritative, generated checks
│ ├── product-overview.md
│ ├── tech-overview.md
│ └── modules/ # Module-level snapshots
├── active/ # Live specs for in-flight initiatives
├── drafts/ # Staging area for new initiatives
├── archive/ # Expired specs (historical record)
└── registry.json # Active initiatives & branch registry
Additional Resources
For the full methodology specification, see:
📘 Cicadas Method Specification
For a comparison of the Cicadas Method to other approaches, see:
License
Cicadas is licensed under the Apache License 2.0. Copyright 2026 Cicadas Contributors
This product includes software developed by Dan and contributors.
Copyright 2026 Cicadas Contributors SPDX-License-Identifier: Apache-2.0
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 aprovan_cicadas-0.3.1.tar.gz.
File metadata
- Download URL: aprovan_cicadas-0.3.1.tar.gz
- Upload date:
- Size: 8.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cde8e96c0af669305b9409ab97e1d43e8f842eda911e9ec54eaeab4900533271
|
|
| MD5 |
2bc91f65a05c7e937749dadc559bed8e
|
|
| BLAKE2b-256 |
92b534d4600eb5202d2e4a644f00d561c97f5ce4cc0608282588b44f9120730b
|
Provenance
The following attestation bundles were made for aprovan_cicadas-0.3.1.tar.gz:
Publisher:
publish.yml on JacobSampson/cicadas
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aprovan_cicadas-0.3.1.tar.gz -
Subject digest:
cde8e96c0af669305b9409ab97e1d43e8f842eda911e9ec54eaeab4900533271 - Sigstore transparency entry: 1155468671
- Sigstore integration time:
-
Permalink:
JacobSampson/cicadas@b979a46a0154ec981b179ba4ec89203a0a879628 -
Branch / Tag:
refs/heads/master - Owner: https://github.com/JacobSampson
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b979a46a0154ec981b179ba4ec89203a0a879628 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file aprovan_cicadas-0.3.1-py3-none-any.whl.
File metadata
- Download URL: aprovan_cicadas-0.3.1-py3-none-any.whl
- Upload date:
- Size: 8.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8e41f9b5469bbbb6bbb7b78a875911e398c3630c6cb68e209d3f30e73e2c9901
|
|
| MD5 |
83bc73d113009b7e4e82e303053530bc
|
|
| BLAKE2b-256 |
7849ed62d5dcab6813b780efa4c4aeea3b25dfa8cd38915f8a61595f425f1244
|
Provenance
The following attestation bundles were made for aprovan_cicadas-0.3.1-py3-none-any.whl:
Publisher:
publish.yml on JacobSampson/cicadas
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aprovan_cicadas-0.3.1-py3-none-any.whl -
Subject digest:
8e41f9b5469bbbb6bbb7b78a875911e398c3630c6cb68e209d3f30e73e2c9901 - Sigstore transparency entry: 1155468675
- Sigstore integration time:
-
Permalink:
JacobSampson/cicadas@b979a46a0154ec981b179ba4ec89203a0a879628 -
Branch / Tag:
refs/heads/master - Owner: https://github.com/JacobSampson
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b979a46a0154ec981b179ba4ec89203a0a879628 -
Trigger Event:
workflow_dispatch
-
Statement type: