Lific's full MCP schema fits in roughly 3,000 tokens. It uses human-readable identifiers (APP-42, not UUIDs), runs as a single binary with an embedded SQLite database, and includes a web UI for when you want to look at things yourself.
Install
Or grab a binary from the releases page.
Quickstart
On first run, Lific generates an API key and prints it to the console. It won't be shown again. This key is used for MCP and API access.
Open http://localhost:3456 to use the web UI. The first account you create is the admin.
The CLI also works directly against the database. No server or auth required:
Add --json to any command for machine-readable output.
Connecting AI tools
Point your MCP client at the server. Replace your-api-key with the key from first run (or create one with lific key create --name my-key).
Remote (network):
Local (stdio, no network):
Go to Settings > Connected Tools in the web UI. Pick your tool, click Connect, and paste the generated config snippet. Supported tools: OpenCode, Cursor, Claude Code, Claude Desktop, Codex.
Each connection creates a bot identity tied to your account. Changes show up attributed to you, tagged with which tool made them.
MCP tools
| Tool | What it does |
|---|---|
list_issues |
Filter by status, priority, module, label, or workable |
get_issue |
Full issue details with relations, labels, and comments |
create_issue / update_issue |
Create or partially update by identifier |
edit_issue / edit_page |
Targeted find-and-replace edits without resending the whole body |
get_board |
Board view grouped by status, priority, or module |
search |
Fuzzy full-text search across issues and pages |
link_issues / unlink_issues |
Dependency tracking (blocks, relates_to, duplicate) |
get_page / create_page / update_page |
Markdown documents in folders, with labels and lifecycle status |
add_comment / list_comments |
Threaded comments on issues and pages |
create_plan / get_plan |
Persisted, nestable step plans that survive across sessions; steps can mirror issues |
edit_plan_step / update_plan_step |
Edit a step, toggle done (closing a mirrored issue), add/move/delete steps |
list_resources |
Discover projects, modules, labels, folders, plans |
manage_resource |
Create/update projects, modules (with icons), labels, folders |
delete |
Delete anything by identifier |
export_issue / export_page / export_project |
Export to portable markdown |
Everything uses human-readable identifiers: project="APP" not project_id=7.
Workable filter: list_issues(project="APP", workable=true) returns only issues with all blockers resolved. One call can answer "what can I work on right now?"
Plans
An agent's plan shouldn't die when its context does. A plan is an ordered, arbitrarily-nestable tree of steps that persists across sessions and compaction — start a new session and the plan is still there, ready to resume.
- Steps can mirror issues. Link a step to an issue and the two stay in sync: close the issue and the step checks itself; mark the step done and the issue closes. Reopen the issue and the step reopens, with a note of why.
- Authored in one call.
create_planbuilds a full nested tree at once;get_planrehydrates it for the next session;edit_plan_stepandupdate_plan_stepkeep it current. - First-class in the UI. A Plans tab sits alongside Issues, Board, Modules, and Pages — a real tree view with done toggles, per-step markdown notes, issue chips, and an activity timeline.
- Fully tracked. Every plan and step change lands in the audit log, including the issue-driven cascades.
Issues stay flat and lateral; the hierarchy lives on the plan. It's the difference between an issue tracker and a project planner.
Features
| Category | What you get |
|---|---|
| Issue tracking | Status, priority, modules with icons, labels, relations, comments, board view, fuzzy search, sort by recent activity |
| Plans | Persisted, nestable step trees that outlive a session; steps mirror issues with two-way done/close sync; first-class tree view and activity history |
| Documentation | Markdown pages in recursive folders, with comments, labels, lifecycle status, full-text search, and Mermaid diagrams |
| MCP interface | 25 tools, human-readable identifiers, compact schema |
| REST API | Full CRUD for all resources, search, board view |
| Web UI | Markdown editing with live preview, drag-and-drop board, Mermaid and code-copy, dark/light theme |
| User accounts | Individual auth, per-tool bot identities, project lead permissions |
| OAuth 2.1 | PKCE, dynamic client registration, token revocation, per-user token identity |
| Backups | Automatic SQLite snapshots with configurable retention |
| CLI | Full CRUD for issues, projects, pages, modules, labels, folders. No server needed |
| Single binary | No runtime dependencies, embedded SQLite, ~16MB |
Configuration
lific init generates this:
[]
= "0.0.0.0"
= 3456
[]
= "lific.db"
[]
= true
= "backups"
= 60
= 24
[]
= "info"
CLI flags (--db, --port, --host) override config values.
Building from source
Requirements
- Rust 1.88+ required
- Bun optional, only needed if you want the web UI
SQLite is bundled via rusqlite and compiled into the binary. No system SQLite required.
API-only build (no web UI)
The mkdir -p web/dist creates the empty directory that rust-embed expects at compile time. The resulting binary has full functionality (MCP, REST API, CLI, OAuth, backups) but visiting the web UI will return a message pointing you to build the frontend.
Full build (with web UI)
&& && &&
The frontend is a Svelte 5 SPA built with Vite. bun run build outputs static files to web/dist/, which cargo build embeds into the binary. The final binary is fully self-contained with no runtime dependencies.
Contributing
Issues and PRs welcome. If you're planning something big, open an issue first so we can talk about it before you put in the work.