Run every project
like a product.

Spira is a fast, self-hosted issue tracker. Every project gets its own backlog, specs and priorities, every ticket brought over from your old tracker keeps its id, and an AI agent reads and files tickets for you over MCP.

AtlasIssues60 issues⌘K
In Progress3
ATL-61The search endpoint sits at 1.4 s in the slow query logPerformanceBug
ATL-34V2 — Group the list by state, priority or epicFeature
ATL-63Restore drill: rebuild the database from last night's dumpInfrastructureTesting
In Review2
ATL-20LNR-1098M2 — Keep legacy identifiers resolving foreverFeature
ATL-59Self-host README: from clone to first loginDocumentation
Todo3
ATL-26M6 — Dry run that prints the plan and writes nothingTestingInfrastructure
ATL-29Drop the N+1 on labels in the issue list queryPerformance
ATL-39V4 — One search box over titles and descriptionsFeaturePerformance
Search identifiers and text⌘K
Issues
ATL-6LNR-1011Issue model, identifiers and the state machine
ATL-18LNR-1091Import path from the old tracker
ATL-19LNR-1092M1 — Read the export archive and map its users onto members
ATL-20LNR-1098M2 — Keep legacy identifiers resolving forever
ATL-20LNR-1098M2 — Keep legacy identifiers resolving foreverFeature
ATL-20LNR-1098
›Epic: Import path from the old tracker

M2 — Keep legacy identifiers resolving forever

Every LNR- identifier keeps resolving: in search, in links pasted from old commits, and through the connector.

StatusIn Review
PriorityHigh
LabelsFeature
ProjectAtlas
AtlasATL-185 of 7 children
ATL-18LNR-1091Import path from the old tracker3/7
ATL-19LNR-1092M1 — Read the export archive and map its users onto members
ATL-20LNR-1098M2 — Keep legacy identifiers resolving forever
ATL-22LNR-1109M3 — Map the old tool's workflow states onto our six
ATL-26M6 — Dry run that prints the plan and writes nothing
ATL-28M7 — Re-import safely by upserting on the legacy identifier
Projects12 projects
AtlasATL52%31/60
FacetFCT65%34/52
LedgerLDG75%33/44
Agentspira over MCP

›File the search bug in Atlas, label it Bug.

Todo4
ATL-64Search results drop the legacy capsuleBug
ATL-26M6 — Dry run that prints the plan and writes nothingTestingInfrastructure
ATL-29Drop the N+1 on labels in the issue list queryPerformance
The app

Built for daily work. Fast at every step.

A clean, keyboard-first interface that stays out of the way. Each card plays a real part of the app, with a demo workspace of twelve projects and 464 issues.

In Progress2
ATL-61The search endpoint sits at 1.4 s in the slow query logPerformanceBug
ATL-34V2 — Group the list by state, priority or epicFeature
Todo2
ATL-29Drop the N+1 on labels in the issue list queryPerformance
ATL-39V4 — One search box over titles and descriptionsFeaturePerformance
In Progress2
ATL-61The search endpoint sits at 1.4 s in the slow query log
ATL-34V2 — Group the list by state, priority or epic
Todo2
ATL-29Drop the N+1 on labels in the issue list query
ATL-39V4 — One search box over titles and descriptions
IssuesGrouped by status, priority, epic or project, with the columns you pick.
ATL-39

V4 — One search box over titles and descriptions

Part ofATL-32, the epic for filters and saved views. A bare identifier in the text becomes a chip.

StatusTodo
PriorityHigh
LabelsFeature
ATL-39

V4 — One search box over titles and descriptions

Part ofATL-32, the epic for filters and saved views. A bare identifier in the text becomes a chip.

StatusTodo
PriorityHigh
LabelsFeature
Issue pageA markdown description, its properties, every identifier in the text as a chip.
AtlasATL52%31/60
FacetFCT65%34/52
LedgerLDG75%33/44
BeaconBCN54%22/41
KestrelKST66%25/38
ProjectsEach with its own prefix, its progress and its count per status.
Improvements, grouped by status38
Urgent bugs, everywhere6
Atlas epics4
Design system, by priority21
Saved viewsA filter and a grouping, saved under a name and an icon.
Search identifiers and text⌘K
ATL-6LNR-1011Issue model, identifiers and the state machine
ATL-18LNR-1091Import path from the old tracker
ATL-20LNR-1098M2 — Keep legacy identifiers resolving forever
Search⌘K over identifiers and text, old ids included.
⌘FFind in Issues5 of 5
ATL-61The search endpoint sits at 1.4 s in the slow query logPerformanceBug
ATL-34V2 — Group the list by state, priority or epicFeature
ATL-39V4 — One search box over titles and descriptionsFeaturePerformance
ATL-29Drop the N+1 on labels in the issue list queryPerformance
ATL-36The focus ring disappears on the dark boardBug
⌘FFind in Issues5 of 5
ATL-61The search endpoint sits at 1.4 s in the slow query log
ATL-34V2 — Group the list by state, priority or epic
ATL-39V4 — One search box over titles and descriptions
ATL-29Drop the N+1 on labels in the issue list query
ATL-36The focus ring disappears on the dark board
Find in view⌘F narrows the list in place, descriptions included.
spira-mcpstdio · API token

list_issues{ project: "ATL", state: ["Todo"] }

spira-mcpstdio · API token

list_issues

MCP connectorTwelve tools for an AI agent, each named for its job.
01 — Plan

Close an epic in one move

An epic is an issue with children and a ring that fills as they close. Close it: the children in review close with it, and the ones still open are shown to you first, and kept as they are.

  • A progress ring on every epic
  • Blocks, blocked by and related links
  • Lists grouped by status, priority or epic
AtlasATL-44
ATL-44Self-hosting the tracker2/5Infrastructure
ATL-45D1 — pm2 process file for the API and the frontInfrastructure
ATL-46D2 — nginx vhost, TLS and the /api prefixInfrastructureSecurity
ATL-48D3 — One deploy script: build, migrate, restart, verifyInfrastructure
ATL-55D5 — A health endpoint pm2 can restart onInfrastructure
ATL-63Restore drill: rebuild the database from last night's dumpInfrastructureTesting
Close ATL-44?

1 issue in this epic is not finished yet. They will stay as they are; issues in review are marked done with the epic.

ATL-63Restore drill: rebuild the database from last night's dumpIn Progress
CancelClose epic anyway
02 — Move in

Bring every old ticket

The old tracker's CSV export goes through a dry run first: rows read, epics, the projects it fills and their id ranges. Spira writes it once you type import, and every ticket keeps its old id beside the new one.

  • A dry run before any write
  • Old ids found by search, links and the agent
  • In the app, or as a CLI for large exports
Import a CSV exportOne-shot
CSV exportlinear-export.csvDry run
03 — Delegate

Hand tickets to an agent

Spira's MCP server runs beside the agent, on its own machine, and calls the API with a token. The agent finds, reads and files tickets by name and by old id, through the same rules as the app.

  • Twelve tools, each named for its job
  • States and labels given by name
  • Every rule kept by the API
Agentspira over MCP

›LNR-1098 waits on the dry run. Link them.

ATL-20LNR-1098

M2 — Keep legacy identifiers resolving forever

Relations

Blocked byATL-26M6 — Dry run that prints the plan and writes nothing
Preview

Every project, in one place.

Four screens of the app, playing with its demo workspace: a project's issues, an epic, the projects list and a saved view.

Demo workspace · sample data
And the rest

The details that make the difference.

Blocks, blocked by and related: each link is kept once and seen from both ends, and a blocked issue says so on its row.

Descriptions are markdown with a preview, images upload straight into them, and a bare identifier becomes a chip with its state.

Labels in named colours; every project and saved view picks its icon among 3,896 Material Symbols and 1,906 emoji.

Each account owns a private workspace. Any number of them share one database, each seeing only its own.

Your data

Your server.
Your data.

Spira is self-hosted: your tickets live on your infrastructure, and every write goes through the same rules.

Private workspacesOne per account, each seen by its owner alone.
The API holds the keysThe front has no database access; every rule lives in the API.
Dry run firstThe import shows its whole plan before it writes a row.
Backed up twice a dayA database dump every twelve hours.

Run every project
like a product.

Backlog, specs and priorities, in a tracker you own.