lific 1.0.1

Local-first, lightweight issue tracker. Single binary, SQLite-backed, MCP-native.
<p align="center">
  <img src="LificHero.png" alt="Lific — Issue tracking built for AI-driven development" width="800">
</p>

<p align="center">
  <a href="https://github.com/VoidNullable/lific/actions/workflows/ci.yml"><img src="https://github.com/VoidNullable/lific/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
  <a href="https://github.com/VoidNullable/lific/releases"><img src="https://img.shields.io/github/v/release/VoidNullable/lific" alt="Release"></a>
  <a href="LICENSE"><img src="https://img.shields.io/github/license/VoidNullable/lific" alt="License"></a>
</p>

<p align="center">
  <strong>Lightweight issue tracking built for AI-driven development.</strong><br>
  Clean Web UI. Single Binary. MCP built in.
</p>

---

Lific's full MCP schema fits in ~2,500 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.

- **Issues** with status, priority, modules, labels, relations, and comments
- **Pages** as markdown documents in recursive folders
- **Web UI** with inline editing, drag-and-drop, dark/light theme
- **MCP + REST API** for AI assistants and automation
- **User accounts** with per-tool bot identities
- **Automatic backups** with configurable retention

## Install

```bash
cargo install lific
```

Or grab a binary from the [releases page](https://github.com/VoidNullable/lific/releases).

## Quickstart

```bash
lific init     # creates lific.toml
lific start    # starts on port 3456
```

Open `http://localhost:3456`, create an account (first account is admin), and you're running.

## Connecting your AI tools

Go to **Settings > Connected Tools** in the web UI. Pick your tool, click Connect, paste the generated config snippet. Supported out of the box:

- 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.

<details>
<summary>Manual setup (headless / remote server)</summary>

Point your MCP client at the `/mcp` endpoint:

```json
{
  "lific": {
    "type": "remote",
    "url": "https://your-server/mcp",
    "headers": {
      "Authorization": "Bearer your-api-key"
    }
  }
}
```

Or run locally via stdio (no network):

```json
{
  "lific": {
    "type": "local",
    "command": ["lific", "--db", "path/to/lific.db", "mcp"]
  }
}
```

</details>

## MCP tools

<details>
<summary>Full tool list (~2,500 tokens of schema)</summary>

| Tool | What it does |
|------|-------------|
| `list_resources` | Discover projects, modules, labels, folders, pages, issues |
| `list_issues` | Filter by status, priority, module, label, or workable |
| `get_issue` | Full issue details with relations and labels |
| `create_issue` | Create with project, module, labels, priority |
| `update_issue` | Partial updates by identifier |
| `get_board` | Board view grouped by status, priority, or module |
| `search` | 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 |
| `add_comment` / `list_comments` | Comments on issues |
| `manage_resource` | Create/update projects, modules, labels, folders |
| `delete` | Delete anything by identifier |

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 to answer "what can I start right now?"

</details>

## Roadmap

- [x] Projects, issues, labels, modules, relations
- [x] Markdown pages in recursive folders
- [x] Comments on issues
- [x] Web UI with inline editing and drag-and-drop
- [x] Full-text search
- [x] User accounts with bot identities
- [x] OAuth 2.1
- [x] Automatic SQLite backups
- [ ] Milestones with changelog generation
- [ ] Git-aware issue references (parse commits for identifiers)
- [ ] Activity log per issue
- [ ] File attachments
- [ ] Webhooks
- [ ] VS Code extension
- [ ] Real-time updates via WebSocket

Not planned: sprints, story points, custom fields, workflow automations.

## Configuration

<details>
<summary><code>lific.toml</code></summary>

`lific init` generates this:

```toml
[server]
host = "0.0.0.0"
port = 3456

[database]
path = "lific.db"

[backup]
enabled = true
dir = "backups"
interval_minutes = 60
retain = 24

[log]
level = "info"
```

CLI flags (`--db`, `--port`, `--host`) override config values.

</details>

## Building from source

```bash
git clone https://github.com/VoidNullable/lific
cd lific
cd web && bun install && bun run build && cd ..
cargo build --release
```

Requires Rust 2024 edition. SQLite is bundled.

## 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.

## License

[MIT](LICENSE)