Skip to main content
Yanked

This release has been yanked by its maintainers, and will be ignored by installers, except when explicitly specified.
Consider using release 0.1.5 instead.

Tina

Tina is an autonomous factory. It takes in clear work items from Jira, Github issues, etc and work on them to produce work that's relatively easily verified by a person.

pip install tina-cli

tina demo

The track in that recording is examples/bug-triage/ — the config, the skill, and what each key does.

How is Tina different from an agent harness?

Tina is an orchestrator of sort.

It selects a work item, claims it, and calls an agent harness once with a one-shot prompt that I call a track.

The agent harness does the individual work item. Currently, I use pi, because it's small and relatively stable. I may use a different one in the future.

So what's the value of doing this approach instead?

With an agent harness, you have to sit there and steer it. Even if you have one shot prompts, you need to put those prompts in there.

For work items that are very self similar, you can instead make what I can a track.

Think of it like a runbook or a guide. You take several examples of work you have already done once and use them to describe to the agent what it should do.

Then upstream from this system in your ticketing system, you make work items for it.

Downstream from this system PRs get made or Confluence docs get write or whatver other outcome you want.

You just write tickets instead of driving around your agent to get work done.

This approach scales your attention better than having 5 simultaneous agent sessions running simultaenously, especially you enter production situations where you're quickly drowned by the amount of work coming your way.

High-level track approach

A track is Source -> Skill -> Result.

harness = "pi"
executor = "local"

[harnesses.pi]
command = ["pi", "-p", "@{prompt_file}"]

[bug]
source = "github"
repo = "acme/api"
labels = ["bug"]            # or the full query = "repo:acme/api is:issue ..."
track = "triage"
result = "github:issue-comment"

A basic workflow:

tina validate                        # the config and every skill, statically
tina doctor                          # credentials, queries, harness, executor
tina dispatch --track bug --limit 5
tina run --track bug --item 4821
tina status --track bug

status derives both counts from the track's own query — once as dispatch runs it, and once with its no:assignee clause swapped for the bot — so they are two halves of one question and Tina keeps no state to go stale.

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.json to a path Tina provides.
  • No persistent state. The tracker is the ledger. Workers claim items, and claimed items drop out of the query.
  • Control plane in a file. Pause and throttle live in a control file read fresh every dispatch, so whoever holds the pager can stop the factory without a deploy. Per-track max_concurrency and a governor seam sit beside it.
  • No tracks included. Tracks are skills, installed with napoln at image build time. tina tracks --format json lists them so infrastructure can be derived from the same file the runtime reads.

Documentation

Document Description
docs/architecture.md System design — tracks, 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

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

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tina_cli-0.1.3.tar.gz (438.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tina_cli-0.1.3-py3-none-any.whl (72.6 kB view details)

Uploaded Python 3

File details

Details for the file tina_cli-0.1.3.tar.gz.

File metadata

  • Download URL: tina_cli-0.1.3.tar.gz
  • Upload date:
  • Size: 438.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","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

Hashes for tina_cli-0.1.3.tar.gz
Algorithm Hash digest
SHA256 f29e3c1d05dc7ae9497a248f88b9a0dfe45a1870735ea15026056b78912c5f25
MD5 f629713d01f38635996188883c4d87da
BLAKE2b-256 f613a7e376c32b8f89bd0d7687586b7c59c6d0554e3f1638aab96ff811ee9e98

See more details on using hashes here.

File details

Details for the file tina_cli-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: tina_cli-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 72.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","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

Hashes for tina_cli-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 e4da197625f8b43e7bc2290e99e9404091f5329a0136127ad4e9e9302d3c63df
MD5 71a42f494ebb7a1168739f528a6291d4
BLAKE2b-256 f85130c03fc9eedb4a161442f5b852a36610dea5749c17342cea05ab5df72d0e

See more details on using hashes here.

Release history Release notifications | RSS feed

0.1.5

2 files

0.1.4

2 files

This release

0.1.3 This release

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

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