An autonomous factory. Orchestration only: claim a work item, run an agent once, record the outcome.
Project description
Tina
"Tina, eat. Food. Eat the FOOD!"
An autonomous factory. Tina takes in pre-defined work items and produces work items that are relatively easily verified by a person — and, with the right criteria, by an agent.
It is an agent harness with guardrails. Tina does orchestration only: it selects a work item, claims it, and calls an agent once with a one-shot prompt. The agent does all the performance, using its own tools.
How it works
A workflow is Source -> Activity -> Result.
harness = "pi" # selects [harnesses.pi]; `executor` works the same way
executor = "local"
[harnesses.pi]
command = ["pi", "--prompt-file", "{prompt_file}"]
[bug]
source = "github"
repo = "acme/api"
query = "repo:acme/api is:issue is:open no:assignee label:bug"
activity = "triage"
result = "github:issue-comment"
Two commands, one image:
tina dispatch --workflow bug --limit 5 # query, take N, enqueue N workers
tina dispatch --workflow bug --limit 5 --dry-run # preview the matches, enqueue nothing
tina run --workflow bug --item 4821 # claim, run the agent, record outcome
An external scheduler calls dispatch. Tina does not own scheduling — Cloud
Scheduler, EventBridge, k8s CronJob, systemd timers, and GitHub Actions all work
without Tina knowing about them.
Design
- Orchestration only. Tina never writes a result. The agent does, with its own tools.
- Harness agnostic. pi, Claude Code, and others are subprocess adapters. Tina
never parses harness stdout — the agent writes
outcome.jsonto a path Tina provides. - No persistent state. The tracker is the ledger. Workers claim items, and claimed items drop out of the query.
- No activities included. Activities are skills, installed with napoln at image build time.
Documentation
| Document | Description |
|---|---|
| docs/architecture.md | System design — workflows, dispatch/worker, adapters, outcome contract, v1 scope |
| docs/adr/ | Architecture decision records — the reasoning behind each design choice |
| CONTRIBUTING.md | Setup, the check loop, layout, how to add adapters, commit conventions |
Status
Implemented, pre-release. Not yet published to PyPI. v1 scope is §18 of the architecture doc.
Development
See CONTRIBUTING.md for the full guide.
just is the task runner (brew install just).
just setup # Install all dependencies
just check # Format check, lint, type check, tests
just fmt # Auto-fix formatting and lint
just test # Run tests
Without just:
uv sync --all-extras # Install all dependencies
uv run ruff format --check # Format check
uv run ruff check # Lint
uv run ty check # Type check
uv run pytest # Run tests
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 tina_cli-0.1.0.tar.gz.
File metadata
- Download URL: tina_cli-0.1.0.tar.gz
- Upload date:
- Size: 360.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c1a2e373bcefb237be72bebb6c104772eb4b2f4a79f10e7f20c36840ad629125
|
|
| MD5 |
6067ffee0fa1cf5ddd62529cedf29ee2
|
|
| BLAKE2b-256 |
4b46b2baaf85c1f8777288ab126ae4e6263add5405efa65243aa10ce67b455c1
|
File details
Details for the file tina_cli-0.1.0-py3-none-any.whl.
File metadata
- Download URL: tina_cli-0.1.0-py3-none-any.whl
- Upload date:
- Size: 28.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
26656e758ab31d050492c41ac315e563f7602a5ddbbf6719f536df295d6e17dd
|
|
| MD5 |
5e47c5978e61a31bcbb591054c04b063
|
|
| BLAKE2b-256 |
eaa3514cad784a6eb7c3dbb4715ffa2e4fc46bd423d61cdb8bac20ea1100cfee
|