Run agent-native issue tracking and wiki across projects
Self-hosted, agent-native issue tracker and wiki that runs on your own Cloudflare account.
0.6.14Add to Favorites
Why it matters
Give AI coding agents first-class access to a self-hosted, cross-project issue tracker and wiki so they can file bugs, plan sprints, search documentation, and coordinate work without human intervention-deployed serverless on Cloudflare.
Outcomes
What it gets done
Let agents create, update, and search Jira-style issues with status, priority, and hierarchy over MCP
Enable agents to read and write wiki pages with full-text search and revision history
Coordinate parallel agents working on the same repo using file claims and message passing
Deploy a complete project tracker (issues, boards, sprints, wiki) to your Cloudflare account in one command
Source
Get it from source
Spark does not host a copy of it.
Open sourceReports
Agent outcome reports
No reports yet
Overview
Projektor
Projektor is a self-hosted issue tracker, board/sprint planner, and wiki built for AI agents to operate over MCP as a first-class client, running entirely on a Cloudflare account with D1, KV, and R2. Use it when you want a Jira-like, cross-project tracker that AI agents can drive directly over MCP, with coordination primitives for running several agents against one repo.
What it does
Projektor is a complete project tracker - issues, boards, sprints, and a wiki - built so an AI coding agent can do everything a person can, over MCP, as a first-class client rather than a bolted-on integration. It combines the cross-project, self-hostable shape of Jira with the agent-native design of git-file trackers like beads, while running on a single Cloudflare Worker instead of a repo-local file format. Issues are Jira-style tickets (status, priority, assignee, labels, parent/child hierarchy, cross-issue links, referenced as PROJ-42); boards support kanban and list views with sprint planning; the wiki is nested markdown with full-text search and revision history. Its MCP server exposes the full tool catalog - 90 tools across 21 domains, covering project data plus agent-coordination primitives - as the primary surface, not an add-on. A fleet-coordination layer (agent registry, file claims, and messages) lets parallel agents work the same repo without colliding.
When to use - and when NOT to
Use Projektor when you want a Jira-like tracker that an AI agent can drive end to end over MCP - filing issues, moving tickets, planning sprints, searching the wiki - across multiple projects, self-hosted on infrastructure you control. It is a fit for teams already running multiple coding agents against one codebase who need coordination primitives (file claims, agent registry) to avoid collisions. It is not a fit if you need a login-free public demo in production - the live demo intentionally has no login - or if you want a repo-local, git-native tracker that lives inside a single repository rather than a deployed cross-project service.
Capabilities
- Issues, boards/sprints, and a wiki, matching the core surface area of a tool like Jira or Notion.
- An MCP server at
POST /mcp/<workspaceId>(JSON-RPC 2.0) that any MCP-compatible agent, including Claude Code viaclaude mcp add, can connect to for the full tool catalog. - Fleet coordination: agent registry, file claims, and messages so parallel agents can work one repo without colliding.
- Ops features: file attachments via R2, workspace/project/member management with
owner/admin/member/viewerroles, workspace-scoped API tokens, and an installable PWA. - Runs entirely on a Cloudflare account: Hono on Workers for compute, D1 for relational data, KV for cache, R2 for attachments, with no servers or containers to manage.
How to install
Deploy from the config-only projektor-deploy-example repo, which downloads a pre-built release artifact with no source checkout or build step. The one-command path auto-provisions D1, KV, and R2 and applies migrations:
PROJEKTOR_REPO=you/projektor ADMIN_EMAILS=you@example.com ./deploy-auto.sh
A one-click "Deploy to Cloudflare" button and a manual/CI flow (with a documented Cloudflare API token recipe that must include D1 access) are also available. After deploying, Cloudflare Access must front the Worker before anyone can log in; the first user listed in ADMIN_EMAILS becomes owner and can mint API tokens for agents. Licensed under MIT.
Who it's for
Teams and solo developers who want a self-hosted, cross-project issue tracker and wiki that one or more AI coding agents can operate directly, without a human relaying every ticket update through a chat interface.
Source README
projektor
AI-native project management, self-hosted on Cloudflare.
Docs ·
Live demo ·
Deploy your own
What it is
Projektor is an issue tracker and wiki that an AI coding agent runs as well as you do.
It holds issues, boards, sprints and a wiki, and it exposes
119 tools across 22 domains over MCP,
so the agent files the ticket, moves it and writes the page instead of asking you to.
The whole thing is one Cloudflare Worker in your own account.
Connect it to Claude
Add your instance as a connector in Claude - web, desktop, mobile, or Claude Code -
and sign in with the account you already use for the web UI. There is no token to
copy into a config file.
Projektor is an OAuth 2.1 authorization server: discovery over RFC 9728 / RFC 8414,
client identity via CIMD rather than dynamic registration, PKCE throughout, and an
RFC 8707 resource parameter that binds every grant to exactly one workspace - so a
token minted for one workspace is not a credential for another. Each authorization is
personal, expires on its own, and appears in your settings with a Disconnect beside
it.
A grant never exceeds what you can already do. Your live workspace role is checked on
every call, so the connector inherits your ceiling rather than the scopes it asked
for. See
connecting an agent for the
flow and deploying for the
Cloudflare Access carve-outs it needs.
One work graph, not a tracker plus a sidecar
Running a fleet of agents normally means assembling three things: a tracker for the
work, a coordination layer so two agents do not edit the same file, and worktree
tooling to keep their checkouts apart. That leaves two or three sources of truth about
what is being worked on, and nothing that can answer a question spanning them.
In Projektor the coordination state is the work graph. The lease is on the issue and
the claim is on the file, in one schema behind one auth boundary:
- Issue leases - an agent takes a work-item lease before starting, and a
per-project cap (agent_wip_limit, default 3) bounds how many issues the fleet can
hold at once. That is admission control on the backlog, not a rate limit: it decides
how much work is allowed to be in flight. - File claims - path-level claims stop two agents editing the same code. A refused
claim is rejected whole and names the issue and agent already holding the path, so the
blocked agent knows who to talk to, and every contended path is recorded. - Liveness - both tiers derive from the holder's heartbeat, so a lease or claim whose
agent stopped reporting is reclaimed by the next claim in the same call. An agent that
crashes mid-ticket does not deadlock the backlog, or the files, behind it. Reclaiming a
dead holder is not logged as contention - the
coordination model
covers why, and the one case that still needs a manualforce.
And because it is deployed rather than local, the fleet is not limited to one machine.
A coordination store on somebody's laptop can only be consulted by processes on that
laptop: a CI runner cannot take a lease, an agent on a second machine cannot see the
first one's claims, and a hosted agent cannot participate. Those participants are
excluded by construction, not by throughput - and exposing a localhost server to fix it
means taking on TLS, auth and uptime, which is the deployment problem you were avoiding.
Projektor's ceiling is a property of the
deployment - one that can be raised without changing how anything works - rather than a
property of a laptop that also happens to be running the agents.
Because it is one graph, "which issue is this claim for" is a join, not an integration.
The coordination model
documents the design. How Projektor differs
compares it against beads, MCP Agent Mail, Linear and the worktree tools, and is honest
about what each of those does better.
Contention is data
When a claim collides, most systems return an error and forget it. Projektor writes the
contended path to an event log - whether the claim was refused or forced through - and
ranks it, so the code heatmap has two modes: where the fleet is working, and where the
fleet is colliding.
That closes a loop back into the backlog. A directory that shows up hot in contention
week after week is telling you something about how the work is sliced - two tickets that
keep fighting over the same module probably wanted to be one ticket, or the module
wanted splitting. Refused claims are evidence about your plan, not just failures.
Both surfaces, checked mechanically
REST and MCP are two doors into one service layer:
REST /api/* ─┐
├─► services/<domain>.ts ─► D1 (SQLite)
MCP /mcp/:wsId ─┘
Routes and MCP tools are thin wrappers; the business logic and the SQL live inservices/. An agent is not driving a reduced API built for robots, it is calling the
code the browser calls.
That used to be a convention held up by review. It is now a test: mcp-parity.node.test.ts
cross-references every exported service function against the REST routes, the runtime MCP
registry and the documented catalog, and fails the build on drift - including a catalog
reordered without the dispatch table. Operations deliberately on one surface only are
enumerated with a reason each, and the test fails if that list goes stale, so the
exceptions stay few and visible rather than accumulating quietly.
Every surface described here was used to build Projektor: the epics, the tickets, the
coordination primitives and the wiki pages all carried their own development. The tool
catalog is a discovered surface, not a designed one.
You still run the project
Agents do the filing. You do the steering, and you do it in a normal web app: backlog
and kanban board, epics, sprint planning, a nested wiki with full-text search and
revision history, flow metrics, and a feedback widget that turns user reports into
issues. Nothing an agent does is buried in a log - it lands on the board, where you can
read it, argue with it and move it.
What is in it
- Issues - status, priority, assignee, labels, parent/child hierarchy and
cross-issue links. Referenced asPROJ-42. - Boards and sprints - kanban board, list view, sprint planning, flow metrics.
- Wiki - nested markdown pages, full-text search, revision history.
- MCP server - the primary surface, not an add-on. Any MCP agent connects; Claude
Code does it withclaude mcp add. - Fleet coordination - agent registry, issue leases with a per-project WIP cap, file
claims, agent messages, and a contention heatmap over every contended path. - Ops - file attachments, workspaces, projects and members with roles, scoped API
tokens, share links, installable PWA.
Serverless on your own Cloudflare account: Hono on Workers, D1 for data, KV for cache,
R2 for attachments. No servers, no containers.
Deploy it
Projektor installs into your Cloudflare account from a small config-only repo that
downloads a pre-built release. There is no source checkout and no build step. The
one-click Deploy to Cloudflare button in
projektor-deploy-example provisions
D1, KV and R2 for you and deploys. A script and a CI flow do the same job; see the
deploy guide.
Put Cloudflare Access in front of the Worker before anyone logs in, then mint a
token for your agents.
CONFIGURE.md
covers both.
Connect an agent
Projektor serves a JSON-RPC 2.0 MCP endpoint at POST /mcp/<workspaceId>. Open
Settings → Tokens, create a token, and copy the claude mcp add command shown
beside it with the workspace and token filled in. The
agent connection guide has
the protocol reference and the full tool catalog.
Where to go next
| Getting started | first workspace, projects, issues |
| Self-hosting and deploying | Cloudflare setup, API token scopes, updates |
| MCP connection and tool catalog | wiring an agent up, every tool it gets |
| Agentic workflows | how agents are meant to use the tracker |
| Coordination model | leases, claims, liveness and contention as a designed system |
| How Projektor differs | compared against beads, MCP Agent Mail, Hiveship, Linear |
| System design | the two surfaces and the service layer beneath them |
| AGENTS.md | contributor guide: conventions, file layout, the service-layer contract |
Development
pnpm install
cp apps/api/.dev.vars.example apps/api/.dev.vars # set DEV_USER_EMAIL + BOOTSTRAP_SECRET
cp apps/web/.env.example apps/web/.env # set PUBLIC_WORKSPACE_SLUG=projektor
pnpm dev # API on :8787, web on :4321
pnpm dev applies D1 migrations to the local Miniflare database first, so a fresh
checkout will not 500 with "no such table". Seed a workspace withcurl -H "X-Bootstrap-Secret: localdev" http://127.0.0.1:8787/bootstrap, then open
http://localhost:4321. With DEV_USER_EMAIL set, the dev-auth bypass logs you in.
pnpm --filter @projektor/api test # vitest against an in-process Worker + Miniflare D1
pnpm turbo type-check # tsc --noEmit across the monorepo
Both must be green before you open a PR. pnpm install also wires the lefthook
pre-commit and pre-push hooks. CI runs more; AGENTS.md lists it, along
with the engineering conventions.
FAQ
Common questions
Discussion
Questions & comments · 0
Sign In Sign in to leave a comment.