Quickstart
skrun exposes the same executable skill runtime to Rust, Python, and the CLI. The first contract is intentionally small: one JSON value goes to stdin and one JSON object comes back from stdout.
Python Package
Section titled “Python Package”pip install skrunimport skrun
result = skrun.skill("/path/to/skill").call({"ok": True})print(result)Skill IDs resolve under ~/.skrun/skills by default. Set SKRUN_SKILLS_DIR to
use another local skill root.
Rust CLI
Section titled “Rust CLI”cargo install skrunskrun skill new --kind rust_binary --id rust-echo /tmp/rust-echoskrun skill build /tmp/rust-echoskrun skill run --input '{"ok":true}' /tmp/rust-echoArtifact Layout
Section titled “Artifact Layout”Every executable skill directory contains an artifact.json manifest:
{ "schema_version": 1, "kind": "rust_binary", "id": "regex-finder", "name": "Regex Finder", "version": "0.1.0", "entry": "bin/release/regex-finder", "protocol": { "transport": "stdio-json", "input": "single-json-value", "output": "single-json-value" }}Runtime Contract
Section titled “Runtime Contract”- stdin receives one JSON value.
- stdout must return one JSON object.
- stderr is diagnostics.
- a non-zero exit code is a skill failure.
- streaming is intentionally outside the first contract.