Provider-agnostic AI agent/skill/prompt runner
Project description
uio
uio is the agent runtime for CI/CD. Define agents, skills, and prompts as plain markdown files with YAML frontmatter — checked into your repo, executed headlessly in pipelines, and wired to any LLM provider. The origin story covers how and why.
Why uio?
uio occupies a distinct niche: definition-as-code automation. The agents, skills, and prompts you author live in your repo, run headlessly in CI/CD, carry distinct GitHub App identities, and produce auditable cost records.
Interactive assistants (chat UIs, IDE plugins, terminal REPLs) are what you open when you want to build something at a terminal. uio is what runs at 3am when no one is watching.
| Need | Interactive assistant (e.g. Copilot, Cursor) | uio |
|---|---|---|
| Designed for headless CI/CD execution | No | Yes |
| Definitions stored in git | No | Yes — plain markdown files |
| Reproducible across environments | No | Yes — provider-agnostic |
| Scriptable / composable | Limited | Yes — uio agent run, uio skill run |
| Auditable cost records | No | Yes — JSONL ledger, uio cost |
| Multi-agent GitHub identities | No | Yes — planner / coder / reviewer App identities |
| Definition sharing | No | Yes — git-hosted registries |
| Auditable history of changes | No | Yes — git blame, PR diffs |
If your use case is "trigger an agent on push, review its output in a PR" — that is exactly what uio is designed for. See docs/20-positioning.md for the full comparison and rationale.
Concepts
| Concept | What it is |
|---|---|
| Agent | A multi-turn tool-use loop that can execute shell commands and call MCP tools; defined in *.agent.md |
| Skill | A focused, composable subtask — same loop as an agent, but user-directed via uio skill run; defined in *.skill.md |
| Prompt | A single-shot LLM instruction with no tool loop; defined in *.prompt.md |
| Workflow | A sequential pipeline of agent/skill/prompt steps with output chaining; defined in *.workflow.md |
| Tool | An external capability the model invokes mid-loop (MCP tools, run_command) — agent-directed, not user-directed |
See the Glossary for precise definitions of all terms, including the skill vs tool distinction.
Documentation
Full documentation lives in docs/ — covering installation, core concepts, a quickstart, CLI reference, configuration, providers, MCP integration, the chat REPL, cost ledger, registry, writing definitions, etc.
See Use Cases for end-to-end worked examples.
Quickstart
pip install uio-ai
# Scaffold .uio/ and install bundled examples
uio init --examples
# Run one of the bundled examples
uio skill run summarise "Your text here"
uio agent run repo-health
# Inspect the full system prompt before running
uio explain agent repo-health
# Interactive streaming chat
uio chat
# View token spend
uio cost
Definitions live in .uio/:
my-project/
└── .uio/
├── agents/ my-agent.agent.md
├── skills/ my-skill.skill.md
├── prompts/ my-prompt.prompt.md
├── workflows/ my-workflow.workflow.md
└── memory/
See Writing Definitions for the full file format and authoring guide.
License
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 uio_ai-0.2.0.tar.gz.
File metadata
- Download URL: uio_ai-0.2.0.tar.gz
- Upload date:
- Size: 123.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f9cde9268267cf22065d2474b16779c0f8a1d0e1104c70f31e2ba1ce2f847e8a
|
|
| MD5 |
7c38f8201ba144b2ee085d19385808cc
|
|
| BLAKE2b-256 |
01fd536a4e7eb4eba12b949ad493d1f5c2f82daf47ee53ed2ce245447934ee7c
|
Provenance
The following attestation bundles were made for uio_ai-0.2.0.tar.gz:
Publisher:
release.yml on uio-project/uio
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
uio_ai-0.2.0.tar.gz -
Subject digest:
f9cde9268267cf22065d2474b16779c0f8a1d0e1104c70f31e2ba1ce2f847e8a - Sigstore transparency entry: 2016286559
- Sigstore integration time:
-
Permalink:
uio-project/uio@ca1d7b3e41b270c86f8ce3751a45c0b1058d3819 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/uio-project
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@ca1d7b3e41b270c86f8ce3751a45c0b1058d3819 -
Trigger Event:
push
-
Statement type:
File details
Details for the file uio_ai-0.2.0-py3-none-any.whl.
File metadata
- Download URL: uio_ai-0.2.0-py3-none-any.whl
- Upload date:
- Size: 88.7 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 |
b8404065d0eb1d565f9f43643edfcb2565375ae3d343235c559bf85730c59d93
|
|
| MD5 |
d5418cc93a4374302854200b73941238
|
|
| BLAKE2b-256 |
e715c194a0bf9fc875d6bfe9b1080431d3f65a7efd42dd07b2a375f88159aee6
|
Provenance
The following attestation bundles were made for uio_ai-0.2.0-py3-none-any.whl:
Publisher:
release.yml on uio-project/uio
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
uio_ai-0.2.0-py3-none-any.whl -
Subject digest:
b8404065d0eb1d565f9f43643edfcb2565375ae3d343235c559bf85730c59d93 - Sigstore transparency entry: 2016286969
- Sigstore integration time:
-
Permalink:
uio-project/uio@ca1d7b3e41b270c86f8ce3751a45c0b1058d3819 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/uio-project
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@ca1d7b3e41b270c86f8ce3751a45c0b1058d3819 -
Trigger Event:
push
-
Statement type: