Self-hosted, open-source project management and issue tracking, and an alternative to Linear, Plane, and Jira. The difference: AI agents work here like any teammate. Hand them issues, or run the whole thing over the REST API, webhooks, and MCP.
If It's a Plan looks useful to you, star the repo ⭐ — it helps other people find it.
Website · Discussions · Contributing · Security
Most trackers bolt AI on as a chatbot. Here an agent is a real member of the team. It has a role, permissions, and an assignee slot, and it works the same board your people do.
It's a self-hosted, open alternative to Linear, Plane, and Jira. You run it on your own server and database.
- Own your stack. Your server, your database. No per-seat fees, no lock-in.
- Agents as teammates. Give an agent a model, a prompt, skills, and tools. Assign it issues like you would a person.
- One board for both. People and agents share the same board, threads, and cards.
- Automate anything. Drive it all through the REST API, MCP, and signed webhooks.
Heads-up: this is under active development. Expect breaking changes before the first stable release.
Tracking
- Configure issues per project: custom fields, labels, states, and issue types
- Kanban, table, timeline, and calendar views, with configurable display fields and two-level grouping
- Save any view as a reusable template
- Configurable dashboards for project analytics: throughput, breakdown, pulse
- Custom quick actions that run on an issue
- Freeform notes boards: sticky notes on a canvas, with colors, checklists, and connections
- Share a view or an issue by public link, read-only and without sign-in
- Initiatives that group and track work across projects
- Auto-archive, a notification inbox, role-based access control, and more
AI agents
- Agents as project members with their own permissions and assigned issues
- Configure each agent's model, system prompt, tools, and reusable skills — built on the Mastra agent framework
- Mention an agent in a comment to trigger a run
- Scheduled agent runs
- Built-in chat with per-agent conversation history
Platform
- REST API with an OpenAPI reference and API keys
- MCP server, so an external assistant can read and change issues through the same API
- Outgoing webhooks: subscribe to events, signed payloads, and retries with a delivery log
- Email and password, passkey, and Google sign-in
- Notifications by email (SMTP or Resend) and Telegram, with per-member preferences
- Instance administration: storage limits, mail transport, and instance-wide settings
Requirements: Bun 1.3+, Docker.
bun install
cp .env.example .env
cp apps/web/.env.example apps/web/.env
docker compose -f docker-compose.dev.yml up -d # Postgres + MinIO only
bun run db:migrate
bun run dev # api + web together, via Turborepoapi on http://localhost:3000, web on http://localhost:3001. bun run dev runs the
whole workspace in watch mode from the repo root; the dev compose brings up only the
backing services and the apps run on the host.
If host port 5432 is taken, set another and update DATABASE_URL in .env:
POSTGRES_PORT=5433 docker compose -f docker-compose.dev.yml up -dTests run against a real test Postgres, not mocks. Prepare a dedicated *_test
database once, then run the suite from the repo root:
cp .env.test.example .env.test # DATABASE_URL must name a *_test database
bun run db:migrate:test # migrate the test database
bun run test # run all suites via TurborepoThe dev compose (docker-compose.dev.yml) provides Postgres and MinIO for these tests;
the attachments suite needs the MinIO bucket it creates.
Alternatively, run the same gate CI uses — the suite against a throwaway Postgres in a container built from the production image:
docker compose -f docker-compose.test.yml up --build \
--abort-on-container-exit --exit-code-from api-testPoint a Docker Compose resource at docker-compose.coolify.yml. Coolify supplies the
secrets and domains through its own generated variables; nothing else to configure.
Requirements: Docker and a domain behind a TLS-terminating reverse proxy.
git clone https://github.com/croffasia/itsaplan.git
cd itsaplan
cp .env.example .env
# Set the public origins: API_URL, APP_URL
# Generate each secret with `openssl rand -base64 32`:
# POSTGRES_PASSWORD, BETTER_AUTH_SECRET, APP_ENCRYPTION_KEY,
# WORKER_INTERNAL_TOKEN, S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY
docker compose up -d --buildOne command brings up the whole stack: Postgres, MinIO, api, worker, bot, and web. Every
service is built from this checkout; web bakes API_URL into its bundle because Next.js
inlines NEXT_PUBLIC_* at build time. The API applies migrations on startup, and the
first account registered becomes the instance admin.
After an update, rebuild: git pull then docker compose up -d --build.
CONTRIBUTING.md covers the commands, the layout, and the conventions.
| Layer | Technology |
|---|---|
| Runtime | Bun + Turborepo |
| Backend | Elysia |
| Frontend | Next.js App Router, SSR |
| UI | shadcn/ui + Tailwind v4 |
| Auth | better-auth |
| Database | Drizzle + PostgreSQL |
| Storage | S3-compatible object store (MinIO) |
| AI agents | Mastra |
apps/api Elysia HTTP API, mounts better-auth at /api/auth/*
apps/web Next.js app, server-side rendered
apps/worker webhooks, notifications, agent runs
apps/bot Telegram bot
packages/db Drizzle client, schema, migrations
packages/auth better-auth server instance
packages/crypto AES-256-GCM encryption for secrets at rest
packages/mailer SMTP and Resend transport
The web app never imports the packages directly, it talks to the API over HTTP.
Vibe Code Kit — a Claude Code plugin with 20+ expert skills that turn AI slop into senior-level code. It teaches your AI agent professional development and design practices, so you ship production-ready code on the first try. Works with Claude Code, Codex, Gemini CLI, and Cursor.
It's a Plan is built with it — the code you are reading is the proof.
Issues and pull requests are welcome — bug fixes, features, docs, all of it. Start with CONTRIBUTING.md. It covers the setup, the conventions, and how a change gets merged. Be kind; we follow a Code of Conduct.
Not ready to contribute code? Star the repo and share it — it is the simplest way to help the project grow.
Found a vulnerability? Report it privately through GitHub Security Advisories, not a public issue, so we can fix it first. Details in SECURITY.md.
Copyright © 2026 VIBE DEV SPACE LLC.
AGPL-3.0. Running a modified version as a network service means publishing your changes under the same license.