-
Notifications
You must be signed in to change notification settings - Fork 1
Contributing
slipstream is one repository that is both the published Claude Code plugin and the helper it calls. This page covers building it, the verify gates, and how to add each kind of extension.
You need Node 20 or newer and pnpm.
pnpm install --frozen-lockfile
pnpm build # tsc to dist/
pnpm lint # eslint
pnpm test # vitest, 120 tests
pnpm validate # the 63 skills load cleanly
pnpm plugin-validate # the whole plugin is well formed
All five gates must pass before a change lands. The MCP and doctor tests use dist/, so build before test. Commits follow conventional commit style; the history is meant to read as small, logical steps.
A skill is a SKILL.md under skills/<category>/<name>/. The full walkthrough is on Writing a skill; the short version:
- frontmatter
name(kebab-case, matching the directory),description(a crisp "Use when ..." trigger), and aslipstreamblock withcategory, optionalrequires, optionaltags, and averificationgate for any shipping category; - a body with
## Stepsand## Verifysections; -
pnpm validateto check it loads.
Add a descriptor to TOOL_DESCRIPTORS and a case to callTool in src/mcp/tools.ts. The rule: return the smallest correct thing, and start the description with "Use ...". Wrap the result in text() or err(); never throw from a tool (the transport catches, but a clean isError result is better). Add a case to the MCP test asserting the minimal output.
Add a <name>.md under agents/ with frontmatter name, description (a "Use when ..." trigger) and tools. Prefer the sp_ MCP tools over Read so the agent stays token-disciplined. If the agent should be checked by doctor, add its name to the list in src/doctor/index.ts and src/plugin-validate/index.ts.
Add the script under hooks/, wire it in hooks/hooks.json, and import the compiled modules from dist/ (like session-start.mjs and pre-compact.mjs do) rather than coupling to relative paths. A hook must never throw: swallow every error so it cannot block the session. Add the event to plugin-validate's wanted list if it is required.
Add a cmdX function and a case in main in src/cli/index.ts, and a usage line in USAGE. Keep it a thin wrapper over a library function in src/, so the logic is testable without the CLI.
- TypeScript, strict, with
noUncheckedIndexedAccess. ES modules,.jsimport specifiers (NodeNext). - UK English in prose. No emojis, no em-dashes.
- Comments earn their place: short and dry where they explain a non-obvious choice, absent where the code is plain.
- Real numbers only in docs; run the code and state the machine.
- Writing a skill for the skill contract in full.
- Testing strategy for what a new test should cover.
- Architecture for where each module lives.
SarmaLinux . sarmalinux.com . Repository
Start here
Install paths
v0.6.0 features
- Map watcher
- Token forecast
- Replay export
- Configurable redaction
- Drift detection
- Per-skill opt %
- CI mode
- Lessons
Headline features
- MCP tools
- Observation memory & search
- Cross-IDE support
- Lossless compaction
- Memory recall
- Live agent dashboard
- Statusline
- Output style
- Subagents
Token efficiency
Skills
Internals
- Architecture
- Memory system
- Hooks
- Mind map and status
- Configuration and tuning
- Data formats
- Performance and benchmarks
- Design decisions
- Security model
- Testing strategy
Reference
SarmaLinux . sarmalinux.com