trackxai

How it works

Agents reach trackxai over MCP at /mcp, signed in with your browser or with a token. You reach it at /w. Both read and write the same rows, so what an agent filed is what you see.

task.create

A write, step by step

  1. The agent calls task.create with a title, a goal, an out-of-scope slot and at least one acceptance criterion.
  2. An unknown key is refused before any rule runs.
  3. The hard-fail rules run. One failure and nothing is stored; the refusal names the slot, states the rule and gives an example that passes.
  4. The warning rules run. A warning never refuses. It is attached to the task and every later read shows it.
  5. The task is stored as fields, one per slot, so a filter and a search can address a slot by name.
  6. The response carries the task rendered as markdown, so no second read is needed.
The call on the left leaves out what the task excludes. The answer on the right names the slot, states the rule and gives a value that would pass.

Two classes of rule that never mix

A hard-fail rule is mechanical. A machine settles it with no judgement, and two readers reach the same verdict.

Hard-fail rules, which refuse the write
RuleTest
Required slot absentMissing, empty, or whitespace only
No acceptance criterionA task carries zero
Dangling referenceThe target identifier resolves to no entity
Wrong reference endsThe relation does not admit those two entity kinds
Self-referenceSource and target are the same entity
Gap without a kindThe kind is absent or outside the three
Cross-workspace writeThe payload names an entity in another workspace
Warning rules, which annotate the write
RuleTest
Goal restates the titleThe two match, ignoring case and surrounding whitespace
Unverifiable criterionThe criterion contains no observable and no bound
Missing fileA files entry names a path absent from the linked repository
task.get

Stored as fields, read as markdown

Every slot is a column. Every read renders the task as a markdown document: the title as the heading, then ## Goal, ## Out of scope, ## Acceptance criteria, ## Gaps, ## References, ## Files, ## Notes, ## Estimate. Empty optional sections are left out.

One task measured 1,290 characters as markdown against 1,898 as tags, 32% less to read. The rendering is pinned by a golden test, so its shape does not drift under an agent.

The same task after the slot was added, as every read returns it. Headings cost an agent less than tags, and the golden test holds the shape.

References

The seven reference relations
RelationFromToMeans
realizestaskepicThis task is part of delivering that epic
blockstasktaskThe source must close before the target can open
blocked-bytasktaskThe stored inverse of blocks. One row, read either way
supersedestask, epictask, epicThe source replaces the target, which keeps its history
relates-toany entityany entityWeak association, kept because forcing a precise relation produces a wrong one
sourcesproject, epic, taskexternalThe client's system, its identifier and its URL
verifiescriteriongoalWritten on the criterion itself, through its own verifies field

Gaps

A gap is something the task does not know, recorded without stopping.

The three gap kinds
KindObligesExample
needs-inputSomebody fetches a fact, and the gap names whereWhich column does the legacy importer read? The answer is in the importer source
open-questionYou decide. The only kind that waits on a personKeep the old export format for one more release. Needs a call
assumptionNothing. The belief is written down so it can be falsified laterThe upstream export is idempotent on retry
task.claim

The claim lifecycle

Four task states: open, claimed, in-progress, done. task.claim is refused while another actor holds a live claim, and the refusal names the claimant. A claim goes stale after a configured window, thirty minutes by default, and a stale claim can be taken over, with both actors recorded.

task.complete refuses while an acceptance criterion is unticked, unless the call names every unticked criterion. Naming them records the decision as a comment.

One live claim per task. The refusal names who holds it and when it goes stale.

Your side

A task list with filters in the URL and saved views on a keystroke. A board of assigned work in three columns, Assigned, In progress and Done, that you move cards across from the keyboard, a Backlog of what nobody has been given yet, the ticket floating over it at the board's own address. An inbox of what waits on you, the epics, the open questions, and agent tokens issued and revoked in place, the plaintext shown once.

Activity reads newest first, for the workspace and on every task. The progress page cuts a day into your hours, or seven days into one row each.

The list refreshes on an interval and whenever you return to the tab. Once you are signed in, the button at the top of this site reads Open app and takes you straight to your workspace.

The board with a ticket open over it. Assigned, In progress and Done, moved between by keyboard. Unassigned work waits in the Backlog.

In the application

Captures of a demo workspace. Each numbered badge in a capture matches the line under it.

The board

Board with each task as a card, grouped by status, with an In progress column.
  1. The board shows every task as a card, grouped by status.
  2. Switch between the board, the backlog and the full list.
  3. Tasks an agent is working on right now sit in In progress.
  1. The board shows every task as a card, grouped by status.

A ticket

Task WEB-8 with its title, status and property pills, the Claim and Complete actions and the gaps an agent raised.
  1. A task keeps its title, address and description in one place.
  2. Claim or complete the task from this row.
  3. A gap is a question an agent raised. Answer it here to unblock the work.
  1. A task keeps its title, address and description in one place.

Waiting on you

List of tasks waiting on the reader, with an open gap on the first row.
  1. Waiting on you lists the tasks blocked on your answer.
  2. Answer an open gap on a row without leaving the list.

The progress page

Progress view with a bar that splits tasks by phase and open tasks grouped by epic.
  1. The bar splits every task by phase: done, in progress, waiting, claimed or open.
  2. Open tasks group by epic. Select one to read it on the right.
  3. A question waiting on you shows up in the task's timeline.
  1. The bar splits every task by phase: done, in progress, waiting, claimed or open.

The documents list

Documents index with scope filters and a table of documents and their versions.
  1. Filter documents by what owns them: the workspace, an epic, a team or a project.
  2. Open a document to read it. Each one shows its version.
  1. Open a document to read it. Each one shows its version.

Who can do what

Everyone you invite holds one of four roles in a workspace. The People page lists who holds which, who let them in and when, and a revoked membership stays on the list as history.

The four roles
RoleCan
OwnerEverything, including billing. The account's owner, on every workspace the account holds
AdminEverything but billing: invites people, changes their roles, manages settings
MemberReads and writes
ViewerReads

What the gate guarantees

Presence, resolution and shape: every required slot filled, every reference pointing at something real, every task carrying a way to be checked. Substance stays with the reader, on purpose. The measurement behind the design found that 50 to 85% of review findings are substance no format touches, so trackxai spends its refusals where a machine is always right and shows you the rest as warnings.

Where to go