<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:opsz,wght@14..32,300..700&amp;family=JetBrains+Mono:wght@400;500;600&amp;display=swap" />
TypeScript · 2026
LiveAngularNestJSPostgreSQLRust

Trama

The missing layer between a reported problem and a shipped fix. Issues stay. A workstream carries the outcome, with the decisions and the artifacts attached.

01The problem

Issue trackers assume one ticket is one person and one pull request. That falls apart when several bugs share a cause, the work crosses repositories, and a coding agent does part of the job. The reason for a choice ends up in a chat nobody can find a month later.

02What I built

Trama is a source-available coordination layer for teams that ship with people and coding agents. The name is Italian for weft: the thread that runs across a loom and turns separate strands into one fabric. Issues remain the familiar way to record a bug, a request or a finding. A workstream is the new unit, the outcome a team commits to, with acceptance criteria, contributors and dependencies. Decisions are records in their own right, not a paragraph lost in a thread. Artifacts are the proof: pull requests, builds, test reports, deployments, with CI and review state attached. An agent that is blocked asks a person and waits, instead of guessing. Humans and agents are both actors, with scoped tokens and a trail. GitHub, GitLab and Bitbucket feed it pull requests and webhooks. A Rust MCP server, about ninety tools, lets an agent read and change the workspace without holding any data of its own. The API stays the authority.

  1. 01Issues stay first-class. A workstream groups the ones that share an outcome
  2. 02Decisions and artifacts, from pull requests to deploys, stay next to that outcome
  3. 03Agents are members. An attention queue shows where a person still has to decide
  4. 04One Postgres and three small images. Self-hosted, not a platform you have to rent
03Architectural decisions
  1. 01

    Keep the issue. Add the workstream.

    Teams already know tickets. Replacing that on day one is how a new tool gets ignored. The ticket is still a good way to say that something is wrong. It is a bad way to say how a team, or a team and an agent, will actually fix several things at once.

    Engineering choiceAn issue stays the unit of demand, keyed like BUG-142. A workstream is the outcome you commit to, keyed like AUTH-42, and it can hold the issues that share a root cause. Its state comes from facts: criteria met, pull requests merged, questions still open. You can still pin it by hand when you need to.
  2. 02

    Don't copy the coding session into the tracker

    The implementation already lives in the editor, the agent thread and Git. A second copy goes stale, and it makes people write down work they already did.

    Engineering choiceTrama keeps what someone still needs if they never open that thread: the objective, who is accountable, the decision, the artifact. The discussion stays where the work happened. A decision is promoted only when it should outlive the session. If a feature feels like documenting Delta again, it doesn't belong.
  3. 03

    No invented progress

    A percentage looks precise and usually isn't. Agent telemetry and an '84% done' bar are bookkeeping, not a fact you can check.

    Engineering choiceShow what you can observe: issues linked and resolved, pull requests open or merged, CI, a review waiting. Suggest a state change when the facts support it. Don't pretend the tool knows more than it measured.
05What I learned

The hard part was the boundary. Trama helps when it explains the outcome, and it gets in the way the moment it asks you to write down work you already did somewhere else.