Skiller runtime: CLI + Webhooks + MCP + Skills
Project description
Skiller.run
A lightweight runtime for agentic workflows.
Define YAML flows with agents, tools, waits, channels, webhooks, and control steps.
Skiller runs them as durable executions with persistent state, safe resume, and full observability logs.
What It Does
- Run long-lived agents and flows described in YAML
- Resume runs from persisted waiting states
- Observe and manage persisted runs
Install
python3 -m venv .venv
source .venv/bin/activate
pip install -e .[dev]
Usage
CLI to run agents and flows
Use skiller when you want the direct command-line runtime.
Run the bundled terminal agent:
skiller run mono
Run a YAML flow definition:
skiller run --file <path>
Inspect and manage runs:
skiller status <run_id>
skiller logs <run_id>
skiller delete <run_id>
delete removes the run and database rows tied to it, including runtime events,
waits, external event records, deduplication receipts for those events, and
persisted output bodies.
Resume a waiting run:
skiller input receive <run_id> --text "hello"
skiller resume <run_id>
STUI for chat and launch runs
Use stui when you want an interactive terminal UI to chat, launch runs, and
manage persisted runs.
stui
Configuration
Agent configuration is selected in this order:
AGENT_AGENT_CONFIG_FILEagent.jsonnext to the selectedagent.yaml~/.skiller/settings/agent.json
General runtime configuration lives in:
~/.skiller/settings/config.json
When present in the current working directory, .env.development is loaded
after real environment variables and before JSON config files. This repo uses it
to point local development runs at dev-runtime.db.
See:
Flow Steps
Deterministic:
assignnotifyswitchwhen
Execution:
agentshell
Waiting:
wait_inputwait_webhook
Persistence
Skiller persists:
- run state
- step outputs
- runtime log events
- waiting states
- external event receipts
- persisted output bodies
Waiting is persisted, not simulated in memory. A run can stop in WAITING and
resume later from stored state.
How Mono Is Built
mono is a regular YAML-defined agent with local runtime configuration beside it.
The flow is intentionally small:
- wait for terminal input with
wait_input - stop on
exit,quit, orbyewithswitch - send every other message to an
agentstep - let that agent use its configured
shellandfilestools - loop back to
wait_input
Minimal shape:
name: mono
start: ask_user
steps:
- wait_input: ask_user
next: decide_exit
- switch: decide_exit
default: support_agent
- agent: support_agent
tools:
- shell
- files
next: ask_user
The full prompt and step definition live in
packages/skiller/agents/mono/agent.yaml.
The provider, loop limits, shell allowlist, and file roots live in
packages/skiller/agents/mono/agent.json.
Project Layout
packages/skiller/src/skiller: runtime and CLI codepackages/skiller/agents/mono: bundled terminal agentpackages/skiller/docs: runtime and CLI documentationpackages/skiller/tests: runtime, CLI, and integration testsapps/tui: Textual UI app
Documentation
Core guides:
packages/skiller/docs/cli/command-guide.mdpackages/skiller/docs/flows/flow-schema.mdpackages/skiller/docs/db/schema.mdpackages/skiller/docs/runtime/execution-model.mdpackages/skiller/docs/steps/agent.mdpackages/skiller/docs/steps/wait_input.mdpackages/skiller/docs/steps/wait_webhook.md
Step references:
packages/skiller/docs/steps/assign.mdpackages/skiller/docs/steps/shell.mdpackages/skiller/docs/steps/notify.mdpackages/skiller/docs/steps/switch.mdpackages/skiller/docs/steps/when.md
Development
Run the main checks:
./.venv/bin/python -m ruff check packages/skiller/src apps/tui/src packages/skiller/tests apps/tui/tests
./.venv/bin/python -m pytest packages/skiller/tests apps/tui/tests
./.venv/bin/python -m build --no-isolation
Manual CLI E2E flows live in packages/skiller/tests/e2e/cli_*.sh. Use them
when you need to exercise the real CLI path without mixing those checks into the
default pytest suite.
License
Apache-2.0. See LICENSE.
Disclaimer
This project is provided "as is", without warranties of any kind. The authors and contributors are not responsible for production incidents, data loss, service interruptions, security issues, regulatory non-compliance, third-party integration failures, or any direct or indirect damages resulting from its use.
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 skiller-0.1.0b2.tar.gz.
File metadata
- Download URL: skiller-0.1.0b2.tar.gz
- Upload date:
- Size: 428.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
21ab5fffe6700920676ae2ba30fa61cedc46c40a6ea3ea98067314d001d8b68c
|
|
| MD5 |
12436f1cc84befee3fb76eaad988eac5
|
|
| BLAKE2b-256 |
9240c7e788f2cfb62a2ea3d068e6c61de096e0a4c2a929fc3d57cc09450ce9c9
|
Provenance
The following attestation bundles were made for skiller-0.1.0b2.tar.gz:
Publisher:
publish.yml on fredycampino/skiller
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
skiller-0.1.0b2.tar.gz -
Subject digest:
21ab5fffe6700920676ae2ba30fa61cedc46c40a6ea3ea98067314d001d8b68c - Sigstore transparency entry: 1712878051
- Sigstore integration time:
-
Permalink:
fredycampino/skiller@d6664c826a8011c2db9b86100d24aa9c9601f5d5 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/fredycampino
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@d6664c826a8011c2db9b86100d24aa9c9601f5d5 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file skiller-0.1.0b2-py3-none-any.whl.
File metadata
- Download URL: skiller-0.1.0b2-py3-none-any.whl
- Upload date:
- Size: 334.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d010186a8c0cbc124f06f9d58325c7ec0b0fac56c570848f1f2015a899d2b007
|
|
| MD5 |
2ef5bbcbc606089321a08e0aee2f062a
|
|
| BLAKE2b-256 |
6a837d00ce521055a7fb4aee468a11c07229b75db65bd86837272acaa52781ce
|
Provenance
The following attestation bundles were made for skiller-0.1.0b2-py3-none-any.whl:
Publisher:
publish.yml on fredycampino/skiller
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
skiller-0.1.0b2-py3-none-any.whl -
Subject digest:
d010186a8c0cbc124f06f9d58325c7ec0b0fac56c570848f1f2015a899d2b007 - Sigstore transparency entry: 1712878061
- Sigstore integration time:
-
Permalink:
fredycampino/skiller@d6664c826a8011c2db9b86100d24aa9c9601f5d5 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/fredycampino
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@d6664c826a8011c2db9b86100d24aa9c9601f5d5 -
Trigger Event:
workflow_dispatch
-
Statement type: