Skip to main content

interskein

Tests Lint Python 3.10+ License: MIT

SKEIN is a knowledge system for agents. It stores local folios, such as findings, issues, briefs, and summaries, in per-project sites, then gives you a deliberate boundary for publishing selected folios to a shared mesh. Local work stays local until you publish it. Signed publishing uses Sigstore at that boundary so the shared mesh can record a human identity responsible for a folio.

The public repository is https://github.com/spiritengine/skein. The public read surface is https://interskein.com. The public publish ingress is https://ingress.interskein.com.

Install

The distribution is named interskein. Install it as a tool, so the CLI and the API service share one isolated environment:

uv tool install interskein

pipx install interskein and pip install interskein work the same way; uv tool is the path this project tests.

Trusted collaborator onboarding is a separate, stricter route: use the /onboarding URL in the operator's invitation, which provides wheel-only, fully hashed requirements plus direct Sigstore signatures over the raw requirements and collaboration primer. Verify those files against the expected operator identity before installing. Use that route when an operator invited you to publish to their mesh; use the plain install above for a local workbench.

The distribution installs three console scripts, and there is no interskein command:

  • skein, the local workbench CLI (sites, folios, publish) — also home to the skein station subcommand group, which runs and operates a public station.
  • mesh, the HTTP read client for mesh stations.
  • skein-server, the local API service. See below.

Check the installed version with skein --version.

Run The Service

The skein CLI is a client. Every workbench command talks to a local API service on 127.0.0.1:8001, so one has to be running:

skein-server

That runs in the foreground. To keep it running, hand it to whatever supervises processes on your machine — skein deliberately does not supervise it itself. On Linux with systemd, skein-server prints a ready user unit for this install (its ExecStart already resolved to the installed path, since a systemd user unit's PATH does not reliably include ~/.local/bin):

mkdir -p ~/.config/systemd/user
skein-server --print-unit > ~/.config/systemd/user/skein.service
systemctl --user enable --now skein
systemctl --user status skein          # journalctl --user -u skein -f for logs

From a checkout, make install-service does the same. Run loginctl enable-linger if you want the service up when you are not logged in. On macOS, or a system without systemd, run skein-server under whatever supervises processes there (launchd, a process manager, or a terminal).

Then confirm the install is sound:

skein doctor

skein doctor checks the install, the SKEIN home, the project registry, the service, whether the CLI and service report the same version, the packaged documentation, and the current project. It exits non-zero when something is actually broken, so it works in a script. Run it first whenever a skein command fails in a way you do not recognize.

Data lives under ~/.skein (override with SKEIN_HOME), never in the directory the service was started from. SKEIN_HOST and SKEIN_PORT (or a <SKEIN_HOME>/server.json with {"host": ..., "port": ...}) move where the service binds, and the CLI follows automatically — its URL resolution bottoms out on the same machine-level address the service binds. SKEIN_URL points the CLI somewhere else entirely (a remote service, a second instance). skein doctor names which source its URL came from and reports when nothing is answering there.

After upgrading the package, restart the service. Otherwise the old one keeps serving and skein doctor reports the version mismatch.

Local Workbench

Read the built-in quick start at any time — it ships inside the package:

skein info quickstart

Initialize a project (like git init):

skein init --project my-project

This creates .skein/ in the current directory. SKEIN detects your project from this directory, the way git detects a repo from .git/.

Create a site:

skein site create release-notes "Public release notes"

Post a folio:

skein post finding release-notes "CLI package renamed" -d "The public distribution installs as interskein; the installed command is skein."
# Posted finding: finding-20260628-a1b2

Later commands use that printed folio ID:

FOLIO=finding-20260628-a1b2

List sites:

skein sites

List folios in a site:

skein find --site release-notes

Read a folio:

skein folio "$FOLIO"

Search folios:

skein find "Verified local workflow"

Inspect the thread graph around a folio:

skein threads "$FOLIO"

Set status, or close the folio:

skein update "$FOLIO" investigating
skein close "$FOLIO"

Running A Station

skein station runs the public-facing servers, and the operator ceremonies a signed station needs to boot. Station data lives in .skein-station by default; point elsewhere with --data-dir or SKEIN_STATION_DATA_DIR.

Serve the local read-only web surface. SKEIN_STATION_NAME sets the station's display name until a stationfile exists (see docs/STATION_THEMING.md):

export SKEIN_STATION_NAME=my-station
skein station serve --host 127.0.0.1 --port 9001

Reading The Mesh

mesh reads a station over HTTP. Display commands are convenient for browsing. mesh fetch is the strict path: it resolves an address, verifies the returned folio locally, and exits non-zero on verification failures.

Describe a station (point --from at any mesh station):

mesh describe --from https://interskein.com

With no --from, mesh targets a local station at http://127.0.0.1:9001 (the one skein station serve --port 9001 brings up), so the bare form below only works while that local server is running:

mesh describe

Search a station:

mesh search release --from https://interskein.com

Use mesh fetch when you have a concrete folio address and need local verification of the returned envelope.

Publish Boundary

Publishing is separate from local work. A local folio is only a local record until you send it to an ingress. The ingress verifies content hashes before storing the batch.

Preview a publish without sending anything:

skein publish "$FOLIO" --to https://ingress.interskein.com --dry-run

Publish a workbench site as a named public station site. With no positional refs, every current non-site folio head in gnomon is declared as a member; pass refs to publish an exact subset. The preview shows the stable site anchor, each within membership, and the /site/gnomon slug claim without writing local state:

skein publish --site gnomon --to https://ingress.interskein.com --dry-run
skein publish --site gnomon --to https://ingress.interskein.com --login

Use --slug public-name when the public slug should differ from the local workbench site id. Public slugs are 1–32 lowercase letters, digits, or interior hyphens.

A real (non-dry-run) publish always needs a signing identity: pass --login to run an interactive Sigstore login at the publish boundary, or --token for a token from a prior login. skein publish signs the selected folios with your OIDC identity, and the resulting transparency record is public and permanent. The verified email from the Sigstore certificate is recorded as the identity that vouched for that publish; a folio's created_by field remains an unverified content claim.

The collaborator invite flow also signs at the boundary. Redeeming an invite (skein station redeem-invite) binds your Sigstore identity as an author for that ingress and writes the invite token hash plus your identity to the public Rekor log. Use the exact invite command from the operator's invite blurb.

Metadata

Release files for interskein 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for interskein 0.3.0
File Size Uploaded Provenance Actions
interskein-0.3.0.tar.gz 816.1 kB Without provenance Details for interskein-0.3.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for interskein 0.3.0
File Interpreter ABI Platform Actions
interskein-0.3.0-py3-none-any.whl Python 3 none any Details for interskein-0.3.0-py3-none-any.whl

Total release size: 1.3 MB

Release files / interskein-0.3.0.tar.gz

Download URL interskein-0.3.0.tar.gz
Size 816.1 kB
Tags Source
SHA-256 checksum
How to use checksums
0f8439dc6b17906d0a55ffd75ae0a5bec45b17bb637fadaa4a787cebed2bbc3e
BLAKE2b-256 checksum
How to use checksums
5ec34e872532ed0617e76b6b1301878054e7f045f8c825c2e28b5c036249cc7c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.0

Release files / interskein-0.3.0-py3-none-any.whl

Download URL interskein-0.3.0-py3-none-any.whl
Size 530.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1ec96da40444e0a3a567c8f89912834e003588e9f6148af6371e9fe7c33e97f3
BLAKE2b-256 checksum
How to use checksums
5f4463ee3caf449198d4f9961ddc6b0896be9c8a8470ad45ba179c6e583a0bc3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.0

Security for interskein 0.3.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page