Lightweight AI collaboration spec for solo/small projects
Project description
sspec
Sspec Synthesizes Programs from Explicit Context.
What sspec is
sspec is a doc-driven collaboration workflow for coding agents.
It keeps the request entrypoint, design, task list, and handover records in the repository instead of leaving them only in chat history. Chat moves the work forward; repository files hold long-lived state. You define goals, constraints, and key decisions; the agent researches, implements, and updates the docs so work can continue across sessions.
What problems sspec solves
If you rely on chat alone for AI coding, common problems include:
- context and key decisions getting lost in long or cross-session work;
- the agent continuing to modify code while the developer loses visibility into what changed and why;
- repeating the same project background, conventions, and constraints;
- complex work growing inside chat until it becomes one large, hard-to-track change.
sspec writes long-lived working state into the repository:
AGENTS.mddefines the collaboration protocol;.sspec/project.mdrecords project identity, stack, key paths, and conventions;.sspec/requests/stores request entrypoints;.sspec/changes/stores the spec, tasks, and handover for each change;.sspec/asks/stores important questions and answers.
When work resumes, the agent reads explicit repository context instead of reconstructing state from the previous chat.
What this requires from the user
sspec assumes that the developer defines requirements and reviews results, while the agent handles research, design, implementation, and documentation updates.
Using it usually requires:
- the ability to write a clear
request; - the ability to give direct feedback during design alignment and implementation review;
- enough development skill to judge whether the implementation is correct and spot agent mistakes.
If you do not plan to write request files, review results, or judge whether the implementation is correct, this workflow is usually not a good fit.
Core concepts and folder layout
Start with two core concepts: request and change.
request: the task entrypoint written by the developer. It describes background, constraints, direction, and success criteria.change: a cohesive, atomic, trackable change proposal. Achangeshould stay small enough to review and track as one unit.
The three most important files inside a change are:
spec.md: how the change should work, and why;tasks.md: execution steps and current progress;handover.md: current session state, key findings, and what the next session needs.
If work grows beyond the trackable scope of a single change, split it by:
- using
root-changeto coordinate multiplesub-changeitems; - or creating a follow-up
changethat referencesprev-change, instead of expanding one old change into a large, untrackable container.
For more concepts and advanced usage, see Advanced later in this README.
sspec project init creates the minimal structure:
project/
├── AGENTS.md
└── .sspec/
├── project.md
├── requests/
├── changes/
│ └── <ts>_<name>/
│ ├── spec.md
│ ├── tasks.md
│ ├── handover.md
│ └── reference/
├── asks/
├── skills/
├── spec-docs/
└── tmp/
Main directories:
project.md: project identity. Record the stack, key paths, conventions, and project-level notes.requests/: request entry files written by the developer.changes/: per-change document directories; each change containsspec.md,tasks.md, andhandover.md.asks/: recorded questions and answers, so decisions do not live only in chat.spec-docs/: long-lived architectural knowledge that goes beyond a single change.skills/: phase-specific skills that can be synced into different agent hosts.
Minimal workflow
A typical flow looks like this:
- Run
sspec project init, then fill in.sspec/project.md. - Run
sspec request new <name>and write therequest. - Send the request file path to the agent and tell it to follow
AGENTS.md. - The agent researches the background and codebase, then proposes the design and plan, and stops at key checkpoints for alignment.
- After alignment, the agent implements the change; you review the result and provide feedback.
- The agent iterates on that feedback until you are satisfied.
- At session end, the agent updates
handover.md; when the work is complete, archive thechange.
This workflow includes document updates and user confirmation points. It does not depend on a single chat session.
Quick Start
1) Install
pip install sspec
# or
uv tool install sspec
2) Initialize in your project
cd your-project
sspec project init
Then fill .sspec/project.md with:
- your stack;
- key paths;
- coding conventions;
- project-level notes.
3) Create a request
sspec request new add-password-reset
Write background, problem, direction, and success criteria in the generated request file. A minimal example:
# Request: add-password-reset
## Background
We currently support email and password login only.
## Problem
Users cannot reset a forgotten password on their own.
## Initial Direction
- Use email reset tokens
- Tokens must be time-limited and single-use
- Do not add new external services
## Success Criteria
- Users can request a reset email
- Tokens expire and cannot be reused
- The core flow is covered by tests
## Relational Context
- Related code: `src/auth/*`
- Existing emails: `src/notifications/email/*`
4) Hand the request to the agent
You can paste the request file path into chat and tell the agent to follow AGENTS.md:
Please work from this request:
.sspec/requests/<your-request-file>.md
Follow `AGENTS.md` and `.sspec/skills/`.
Create and maintain the corresponding change docs for this work.
Stop and ask me before making key decisions.
5) Archive when done
When the work is complete, archive the change and its linked request:
sspec change archive --with-request [name]
Key rules and responsibilities
Developer responsibilities
- write the
request, including background, constraints, and success criteria; - answer key decision questions;
- approve the design direction and implementation result;
- decide when a
changeshould be split to keep scope trackable.
Agent responsibilities
- research the code, background, and constraints before designing;
- create and maintain the
changedocs for the work; - propose a solution, align with the user, then implement;
- keep
tasks.mdandhandover.mdcurrent, and keep iterating after review feedback.
Workflow rules
- start from a
request, not from chat history alone; DesignandImplementboth include mandatory confirmation points;Handoveris a formal lifecycle phase, not optional cleanup;- long-lived state lives in
changedocs, not only in chat history.
Common commands
These are the commands most users need. For the full list, run sspec --help.
Project
sspec project init
sspec project status
sspec project update --dry-run
Request
sspec request new <name>
sspec request list
sspec request archive [name] --with-change
Change
sspec change new <name>
sspec change new --from <request>
sspec change new <name> --root
sspec change list --all
sspec change archive [name] --with-request
Advanced
ask: persist important Q&A
Use ask when the agent needs a key decision, finds ambiguity in the requirement, or needs to record an important question formally.
Common commands:
sspec ask create <topic>
sspec ask prompt <ask-file>
sspec ask list --all
sspec ask archive [name]
spec-docs/: store long-lived knowledge across changes
spec-docs/ stores knowledge that should outlive a single change, such as architecture interfaces, data models, design patterns, or conventions.
Common commands:
sspec doc list
sspec doc new "<name>"
skills/: .sspec/skills/ is the source directory
sspec installs skills with a hub-spoke layout:
.sspec/skills/is the hub and the source directory for skills.agents/skills/,.claude/skills/,.github/skills/, and similar external locations are spokes- spokes usually reference
.sspec/skills/via symlink or junction sspec project initandsspec project updatemanage this hub-spoke sync; users do not need to update it manually
Other
Compatibility
sspec depends on an agent environment that can:
- read and write local repository files;
- follow instructions from
AGENTS.md; - execute local CLI commands;
- load and follow skills under
.sspec/skills/.
License
AGPL-V3.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 sspec-1.6.0.tar.gz.
File metadata
- Download URL: sspec-1.6.0.tar.gz
- Upload date:
- Size: 3.3 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.16 {"installer":{"name":"uv","version":"0.9.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9f8696c30930388cb5b3d8631b95aa6db3d46badceb82cc07bc07fae26fbf155
|
|
| MD5 |
e96c8c13c810e6a26df1b48cf8465db4
|
|
| BLAKE2b-256 |
d2524b0211116f79ef1dfa13b6b9f933cd897756d9576b79101fd01326586371
|
File details
Details for the file sspec-1.6.0-py3-none-any.whl.
File metadata
- Download URL: sspec-1.6.0-py3-none-any.whl
- Upload date:
- Size: 204.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.16 {"installer":{"name":"uv","version":"0.9.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a2039b7e715c595072a5a9f15f6155a88ee5f63826c92dc20d1e81080c38906b
|
|
| MD5 |
c6c7b82c2b10988ea119567ac766908d
|
|
| BLAKE2b-256 |
9a38e5ce01291eb0d73ee1aa12c184521def7080ee4ce97e915f854bd190a3e7
|