Local-first task management

Built for focus.
Ready for agents.

Aven is a local-first task manager with a keyboard-driven TUI for you and a compact CLI for your coding agents. Keep tasks and context together across projects. Work offline, with optional self-hosted, end-to-end encrypted sync across devices.

Read the docs
brew install raine/aven/aven

then aven, or aven demo to try it with sample data.

aven
Aven terminal UI showing a shared task queue, project sidebar, priorities, and selected task context.

See what needs attention across your projects.

Agent-first CLI

Your agents work from the same queue you do.

Turn “fix this later” into a task with the context attached. Start another agent on it with a short ref. Decisions, progress, and blockers land in the queue you both use.

Work with agents
~/code/app__worktrees/revocation-limitexample

Earlier in this session · reviewing the login flow

Review done. One finding is outside this change: token revocation shares the login rate limiter, so failed-login bursts delay revocations.

User

Separate fix. File it with the repro, it blocks the public API launch.

Bash aven search "revocation rate limit"(No content)
Bash aven search "public API"APP-M4R2 status=todo priority=high project=app labels= match=title score=412880 title="Open the public API"
Bash aven add "Give token revocation its own rate limit" --status backlog --description-stdin <<'EOF'Repro: exhaust the login limiter, then revoke a token.The revocation waits for the login window to reset.Fix: separate limiter in src/auth/limits.rs, plus a test.EOFcreated APP-P8N3 ref=P8N3 project=app status=backlog priority=none title="Give token revocation its own rate limit"
Bash aven dep add APP-M4R2 APP-P8N3dependency-added APP-M4R2 changed=yes depends_on=APP-P8N3

Filed APP-P8N3 with the repro. APP-M4R2 Open the public API now waits on it.

Another worktree · new agent session

User

Do APP-P8N3.

Bash aven context APP-P8N3context APP-P8N3 suffix=P8N3 id=P8N3KMMQQ2NKP7FD status=backlog priority=none deleted=no epic=no blocked=no conflicts=no blocks_open=yes labels= title="Give token revocation its own rate limit"project=app prefix=APPworkspace=defaultcreated=2026-10-11T09:14:02Z updated=2026-10-11T09:14:02Zdescription<<EOFRepro: exhaust the login limiter, then revoke a token.The revocation waits for the login window to reset.Fix: separate limiter in src/auth/limits.rs, plus a test.EOFblocks open=1 total=1- APP-M4R2 status=todo unresolved=yes title="Open the public API"
Bash aven edit APP-P8N3 --status activeupdated APP-P8N3 changed=yes status=active priority=none title="Give token revocation its own rate limit"

Revocations get their own budget. Per client, or one global reserve?

User

Per client.

Bash aven note APP-P8N3 "Decision: per-client revocation budget, separate from login."noted APP-P8N3 note=K4W9T2XQ7MB3RD5E
Edit src/auth/limits.rsUpdated src/auth/limits.rs with 38 additions and 6 removals
Bash cargo test limitstest result: ok. 14 passed; 0 failed
Bash aven edit APP-P8N3 --status doneupdated APP-P8N3 changed=yes status=done priority=none title="Give token revocation its own rate limit"

APP-P8N3 is done. APP-M4R2 was waiting on it and is ready now.

New agent session

User

How should we do API key rotation? It can't break running clients.

Read src/auth/keys.rsRead 142 lines

Version the keys. Rotating issues a new key, the old one keeps working for a 7-day grace period, then a sweep expires it. Three parts:

  • 1. An endpoint that issues the new key version
  • 2. A sweep that expires old keys (needs 1)
  • 3. Client docs for rotating without downtime
User

Sounds good. Make it an epic with tasks.

Bash aven add "API key rotation" --epic --description-stdin <<'EOF'Versioned keys: rotating issues a new version, the oldone stays valid for 7 days, then a sweep expires it.EOFcreated APP-K1RT ref=K1RT project=app status=inbox priority=none title="API key rotation"
Bash aven add "Add key rotation endpoint" --description-stdin <<'EOF'POST /keys/:id/rotate issues version n+1.EOFaven add "Expire old keys after the grace period" --description-stdin <<'EOF'A sweep expires a key 7 days after it is replaced.EOFaven add "Document key rotation" --description-stdin <<'EOF'Client guide: rotate, deploy the new key, let the old one lapse.EOFcreated APP-R7W2 ref=R7W2 project=app status=inbox priority=none title="Add key rotation endpoint"created APP-R8E5 ref=R8E5 project=app status=inbox priority=none title="Expire old keys after the grace period"created APP-R9D3 ref=R9D3 project=app status=inbox priority=none title="Document key rotation"
Bash for r in R7W2 R8E5 R9D3; do aven epic add APP-$r APP-K1RT; doneepic-added APP-R7W2 changed=yes epic=APP-K1RTepic-added APP-R8E5 changed=yes epic=APP-K1RTepic-added APP-R9D3 changed=yes epic=APP-K1RT
Bash aven dep add APP-R8E5 APP-R7W2dependency-added APP-R8E5 changed=yes depends_on=APP-R7W2

APP-K1RT has three tasks. Expiry waits on the endpoint.

Same session

User

What's next?

Bash aven list --readyAPP-M4R2 status=todo priority=high labels= title="Open the public API"APP-7KQ9 status=todo priority=medium labels= title="Add scoped API tokens"APP-R7W2 status=inbox priority=none labels= blocks=1 title="Add key rotation endpoint"APP-R9D3 status=inbox priority=none labels= title="Document key rotation"

APP-M4R2 Open the public API is the only high-priority task. In the epic, start with APP-R7W2, since key expiry waits on it.

Encrypted sync

Sync through a server you run.

Host it on a home server or VPS and connect over your own network. Devices encrypt tasks before upload, so the server can't read them. Every change lands locally first, and sync catches up when the server is reachable.

How sync works

No server to run? Aven Cloud free preview

Your serveraven serverHome server or VPS · VPN
LaptopTUI · CLI · agentskeys
DesktopTUI · CLI · agentskeys
PhoneiPhone · Androidkeys

Aven for mobile

Your queue, in your pocket.

Jot a task down on your phone and it's in your terminal queue, not a separate notes app you forget to check. Priorities, projects, and full task details stay in sync, end-to-end encrypted through your server or Aven Cloud. Setup is one QR scan.

Download on the App StoreGet it on Google Play

Quick capture

Capture from wherever you are.

The composer inside aven or over any tmux pane, an agent session, or a voice note to a chat assistant. Every path lands in the same queue, in the right project.

  1. Task composer

    Add tasksync test flaky on ci again, prob clock skew in the retry backoff. high, due fri^N create with AI

    a inside aven

    prefix t tmux popup over any pane

  2. Agent session

    Add a follow-up to document token rotation. Bash aven add "Document token rotation"

    Agents capture follow-ups as they work

  3. Voice note

    0:12Added to Aven: AVN-01PD

    Telegram via OpenClaw or similar

What people say

Kind words from early users.

“This is by far the best TUI application I've come across in months.”
Edke on GitHub
“I'm having a blast using the TUI, UX is perfect.”
xe6 on GitHub
“It's a genuinely beautiful TUI and a really promising task manager.”
sudoremo on GitHub
aven

Inspired by Taskwarrior. Built for my own daily use, shared for yours.

Coming from Taskwarrior? See how Aven compares