ww profile create work && p-work

Five tools.
One command surface.

Workwarrior wraps TaskWarrior, TimeWarrior, JRNL, Hledger, and Bugwarrior into a single profile-based system. Switch contexts instantly. Nothing bleeds between profiles.

$ww profile create work# isolated workspace
$p-work# activate — all tools follow
$task add "Ship the API" project:backend priority:H due:friday
$j "Sprint 12 kicked off — targeting Friday"
$timew start backend sprint
$l balance
$ww browser# local UI, no cloud, no npm

Most productivity stacks are five apps that don't know each other.

Task managers don't track time. Time trackers don't do accounting. Journals live in a separate app. Ledgers in another. And none of them understand that you might have three completely different work contexts — client work, personal projects, a side business — that should never touch each other.

Workwarrior doesn't replace these tools. It orchestrates them. Each tool is best-in-class at what it does. Workwarrior adds profile isolation, unified commands, a browser UI, natural language input, and a growing service layer — without any of the tools knowing the others exist.

Switch contexts. Not configs.

A profile is a directory. Activating it sets environment variables. Every tool — TaskWarrior, TimeWarrior, JRNL, Hledger — reads those env vars automatically. No symlinks. No config switching. No path hacking. p-work puts you in your work context. p-personal switches you out. Backup is tar. Restore is untar.

Profiles support multiple named journals, multiple named ledgers, and carry their own UDA definitions, urgency tuning, and service configs. Groups let you batch-operate across profiles with a single command.

627 rules before it ever touches an LLM.

The CMD service translates plain English into tool commands. It tries 627 compiled heuristic regex rules first — no network, no latency, no model needed. Only if nothing matches does it fall through to an optional local LLM (ollama) or remote provider.

The heuristic engine is self-improving: every CMD submission is logged, and ww compile-heuristics --digest converts successful AI translations into new rules. Over time, more goes through heuristics. AI dependency decreases.

Local. No npm. Python 3 stdlib only.

ww browser starts a locally-served web interface on localhost:7777. 15+ panels cover tasks, time, journals, ledgers, a unified command input, AI controls, GitHub sync status, and a weapons bar. Server-Sent Events push profile changes to the browser in real time. Static files served from disk — changes visible on refresh, no restart needed.

Service Architecture

25+ domains
ww profile

Create, list, info, delete, backup, import, restore, UDA management, urgency tuning, density scoring

ww browser

Locally-served web UI — 15+ panels, SSE real-time, no cloud, Python 3 stdlib only

ww issues

Two-way GitHub sync + Bugwarrior pull from 20+ services (GitHub, GitLab, Jira, Trello...)

ww compile-heuristics

Recompile NL→command rules. Self-improving via --digest analysis of CMD log

ww find

Cross-profile search across tasks, time records, journal entries, and ledger data

ww model

LLM provider and model registry — provider add/remove, model set-default, fallback chains

ww questions

Template-based capture workflows — structured prompts that write to tasks, journal, or ledger

ww export

Profile data export in JSON, CSV, or markdown — full or filtered by resource type

ww extensions

Extension registry for TaskWarrior hooks, TimeWarrior extensions — list, search, install

Control Plane

The system behind the system.

ww/system is the project's control plane — an internal coordination layer built on the same agent-based development model that ships as optional MCP tooling for users. Not just documentation: a formal fragility register, gate-guarded merge contracts, role assignments, and a canonical task board.

Orchestrator / Builder / Verifier / Docs

Four always-active agent roles. No agent self-approves. Orchestrator never writes production code. Verifier never writes production code.

Fragility Register

The sync engine (10 lib files) is classified HIGH FRAGILITY. Changes require extended risk briefs and integration tests before merge.

Gate Model

Gate A (spec complete), Gate B (implementation ready), Gate C (tests pass), Gate D (docs updated). No skipping gates.

Shell Standards

#!/usr/bin/env bash + set -euo pipefail on every script. Absolute paths always. Exit codes 0/1/2 enforced.

Read the system docs →

Built on the shoulders of

We didn't build the tools. We wired them together.

Workwarrior is as open source as it gets — a CLI layer and browser layer on top of a set of tools that are already excellent. We acknowledge the creators, document the connections, and celebrate the adaptations. The whole thing only works because these projects exist.

Read: The Stack →