Synthesis is a skill-first self-extension system for coding agents.
Search first. Compose second. Synthesize last.
Instead of defaulting to generated code for every new task, Synthesis pushes a stricter loop:
- Search existing skills.
- Compose a small bundle of skills if one skill is not enough.
- Synthesize a new skill package only as a fallback.
- Prepare that skill for curation in a canonical GitHub skill repository.
The current codebase is an alpha Python package centered on a SynthesisClient that can acquire, install, compose, and synthesize agent skills. The long-term project direction is a federated capability ecosystem where skills earn trust through review, validation, and repeated use.
Website: synthesis.making-minds.ai
Canonical registry: anthony-maio/synthesis-skills
- Skill-first acquisition flow for coding agents
- Canonical GitHub skill registry with curated provenance
- Composition before synthesis
- Draft skills stay local and untrusted until review
- Lifecycle-aware flow for draft, challenger, and canonical skills
- Miner-produced challenger bundles can be inspected and submitted directly
- Static website source lives in
website/and is synced tosynthesis-web
This project is in active rewrite.
- The primary path is now skill-first.
- Legacy capability, sandbox, and exchange code still exists in the repo as compatibility infrastructure.
- The canonical distribution model is GitHub-based curation rather than a REST marketplace.
Most agent frameworks still treat self-extension as “write more code.” That is expensive, slow, and often unnecessary.
Synthesis is built around a different default:
- reuse verified skill packages first
- keep skill packages compatible with existing agent ecosystems
- synthesize only when search and composition fail
- move new skills into a reviewable, open GitHub workflow
That makes self-extension more observable, more composable, and easier to govern in the open.
Synthesis looks for installed skills first, then a canonical curated repo. New generation is a fallback, not the first move.
If one skill does not fully cover an intent, Synthesis tries to assemble a small skill bundle before creating anything new.
The artifact is a real skill package centered on SKILL.md, with optional scripts/, assets/, references/, and agents/ directories when the task requires them.
Draft skills are local and untrusted. Promotion happens through pull requests, automated checks, and human review in the canonical repo.
synthesis/
├── synthesis/ # Python package
├── tests/ # Test suite
├── exchange_server/ # Legacy marketplace prototype
└── website/ # Static project website
pip install -e ".[dev]"import asyncio
from synthesis import SynthesisClient
async def main() -> None:
client = SynthesisClient(
provider_type="mock",
host_root="./installed-skills",
)
result = await client.acquire_skill("parse csv files")
print(result.to_dict())
asyncio.run(main())By default, Synthesis targets the canonical public registry at anthony-maio/synthesis-skills and bootstraps a local checkout under ~/.synthesis/canonical/synthesis-skills when git is available. Use SYNTHESIS_CANONICAL_REPO_PATH or --canonical-repo to override that checkout path.
synthesis acquire-skill "parse csv files"
synthesis list-installed-skills
synthesis inspect-candidate-bundle ./candidate-bundle
synthesis inspect-candidate-bundle-detail ./candidate-bundle
synthesis inspect-candidate-bundle-review ./candidate-bundle
synthesis inspect-candidate-bundle-directory ./extracted_skills
synthesis inspect-candidate-bundle-blockers ./extracted_skills
synthesis inspect-candidate-bundle-directory ./extracted_skills --action refresh_against_live_canon
synthesis inspect-candidate-bundle-blockers ./extracted_skills --action fix_validation_errors
synthesis review-candidate-bundle-directory ./extracted_skills
synthesis review-candidate-bundle-directory ./extracted_skills --include-ready
synthesis write-candidate-bundle-review-report ./extracted_skills ./candidate-review-report.md
synthesis write-candidate-bundle-review-report ./extracted_skills ./candidate-review-report.md --include-ready
synthesis write-candidate-bundle-handoff ./extracted_skills ./candidate-handoff
synthesis publish-candidate-bundle-handoff ./extracted_skills ./candidate-handoff --use-temp-worktree --worktree-root ./tmp-worktrees
synthesis prepare-candidate-bundle-submission ./candidate-bundle
synthesis publish-candidate-bundle-directory ./extracted_skills --action ready_to_publish
synthesis publish-candidate-bundle-submission ./candidate-bundle --open-pull-request --draft-pull-request --label challenger --reviewer anthony-maio
synthesis publish-candidate-bundle-submission ./candidate-bundle --use-temp-worktree --worktree-root ./tmp-worktrees
synthesis validate-candidate-bundle ./candidate-bundle
synthesis submit-candidate-bundle ./candidate-bundle
synthesis install-candidate-bundle ./candidate-bundle --allow-challengersCandidate bundle detail and review outputs include both publishability and a deterministic recommended_next_action, the directory/blocker queue views expose action_counts plus optional action filtering, the reviewer report produces a compact grouped worklist with markdown output for non-publishable actions by default, write-candidate-bundle-review-report persists that worklist as a markdown artifact, write-candidate-bundle-handoff writes the curator report, a paste-ready curator comment body, and a ready-to-publish summary, publish-candidate-bundle-handoff chains that handoff generation with ready-subset publication, and the directory publish flow can batch only the candidates that are already ready_to_publish.
Run tests:
pytest -qRun focused lint checks on the active skill-first path:
ruff check synthesis/__init__.py synthesis/client.py synthesis/mcp/server.py synthesis/skill_runtime.py tests/test_client.pyPreview the website locally:
cd website
python -m http.server 8000The static project site lives in website/. It follows the same no-build deployment model used by sibling projects like mnemos-web and slipstream-web, so it can be published directly to GitHub Pages, Cloudflare Pages, or any static host.
- remove or isolate more of the legacy capability-first path
- harden the GitHub-backed canonical skill registry flow
- improve validation for synthesized skill packages
- publish the project website and documentation