Skip to content

lavallee/spindle

Repository files navigation

Spindle

Spindle composes source skills into surface-specific blends.

CI License: MIT

It is a small Python toolchain for installing skill packages, grouping them into distributions, resolving the right subset for a repo or agent surface, rendering that subset for a harness/model profile, and materializing the result where the agent runtime can load it.

The public base ships with a minimal reference distribution under examples/spindle-sample. Private organizations can publish their own packages, distributions, project registries, task sinks, gate sinks, scout runners, and marketplace providers without changing Spindle core.

Quick Start

uv sync --extra dev

spindle dist install examples/spindle-sample/distributions/spindle-sample
spindle dist activate spindle-sample

spindle doctrine show
spindle skill list
spindle bind /path/to/repo --harness claude

spindle bind classifies the target repo, resolves the channels it subscribes to, lints the blend for coherence, renders through the active harness/model profiles, and materializes the selected skills into the surface's harness-native skills directory.

Concepts

Term Meaning
package A pip-installable project that declares skills and capabilities in [tool.spindle.package].
distribution A pip-installable bundle that declares [tool.spindle.distribution] and depends on packages.
channel A versioned (scope x harness) manifest listing the skills a surface should receive.
surface A repo or agent that consumes a skill blend.
profile A harness/model renderer such as identity, terse, or trim.
blend The resolved skill subset for a surface.

Reference Layout

examples/spindle-sample/
  packages/sample-planning/              # [tool.spindle.package]
  distributions/spindle-sample/          # [tool.spindle.distribution]
  channels/system/system/claude/         # sample channel
  profiles/                              # harness/model render profiles
  doctrine/                              # minimal doctrine used by lint/render
  peers/ verdicts/ scout/ roster/        # optional learning/marketplace scaffolds

Build Your Own

spindle package new my-tools --dest ./packages/my-tools \
  --skill clarify --skill review --capabilities planning

spindle dist new my-dist --dest ./distributions/my-dist \
  --source-dir ../../ \
  --package my-tools==0.1.0

Spindle discovers installed packages through [tool.spindle.package] metadata and installed distributions through [tool.spindle.distribution].

Pluggable Sinks

The OSS base includes local reference implementations:

  • spindle ingest writes a topo-ordered task queue to SPINDLE_TASK_QUEUE or $SPINDLE_HOME/tasks.jsonl unless SPINDLE_TASK_URL is set.
  • spindle gate file writes decision gates to SPINDLE_GATE_QUEUE or $SPINDLE_HOME/gates.jsonl.
  • spindle scout materializes per-peer prompts and emits commands from SPINDLE_SCOUT_COMMAND.

Private infrastructure should live in separate adapter packages that depend on Spindle rather than being imported by Spindle core.

Development

uv run --extra dev pytest

MIT licensed. Contributions welcome; see CONTRIBUTING.md. Release process and versioning: RELEASING.md.

About

Compose source skills into surface-specific blends

Topics

Resources

License

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages