Skip to content

Commit d597f77

Browse files
ComputelessComputerwarp-agent
andcommitted
restructure docs with value-focused README
- Move README to value props only - Organize docs into cli/, features/, ui/, data/ - Create comprehensive keybindings doc - Create storage format doc - Move existing docs to appropriate subdirectories Co-Authored-By: Warp <agent@warp.dev>
1 parent eb24f57 commit d597f77

8 files changed

Lines changed: 311 additions & 123 deletions

File tree

README.md

Lines changed: 44 additions & 123 deletions
Original file line numberDiff line numberDiff line change
@@ -6,153 +6,74 @@
66

77
A terminal-based AI-powered project manager built in Rust.
88

9+
## Why aipm?
10+
11+
**Natural language task management** — Just type what you need. "Break down the auth feature into sub-tasks" or "mark all design tasks as done." The AI understands intent and executes through tool calls.
12+
13+
**Email inbox → task list** — Integrates with Apple Mail via MCP to automatically surface actionable emails as task suggestions. Marketing and noise filtered out by AI.
14+
15+
**File-per-task architecture** — Each task is a markdown file with YAML front matter. Grep your way through tasks. Perfect for AI coding agents.
16+
17+
**Full keyboard control** — Vim-style bindings. Arrow keys. No mouse needed. Navigate between buckets, timeline, kanban, and settings instantly.
18+
19+
**Context-aware AI** — Paste GitHub PR/issue URLs and the AI automatically fetches context. No manual copying.
20+
921
## Features
1022

11-
- **Buckets view** — organize tasks across Team, John-only, and Admin columns
12-
- **Timeline view** — chronological task overview
13-
- **Kanban view** — drag tasks through Backlog → Todo → In Progress → Done
14-
- **Settings** — configure AI model, API key, and other options from within the app
15-
- **AI triage & tools** — natural language input is routed through AI tool calls to create, update, delete, decompose, or bulk-update tasks
16-
- **URL context** — paste a link (GitHub PR/issue or any URL) and the AI automatically fetches and incorporates its content
17-
- **Delete confirmation** — modal prompt before deleting any task
18-
- **Keyboard-driven** — full navigation via keyboard with tab bar focus, arrow keys, and vim-style bindings
19-
20-
## Keybindings
21-
22-
| Context | Key | Action |
23-
|---------|-----|--------|
24-
| Global | `Ctrl-C` | Quit |
25-
| Global | `1/2/3/4` | Switch tabs |
26-
| Input | `/exit` | Quit |
27-
| Tab bar | `←/→` | Navigate tabs |
28-
| Tab bar | `Enter` | Enter selected tab |
29-
| Input | `Enter` | Create task |
30-
| Input | `Esc` | Switch to board |
31-
| Board | `↑/↓/←/→` | Navigate tasks and columns |
32-
| Board | `Enter/e` | Edit selected task |
33-
| Board | `d/x/Backspace/Delete` | Delete task (with confirmation) |
34-
| Board | `p/Space` | Advance progress |
35-
| Board | `P` | Retreat progress |
36-
| Board | `Esc` | Focus tab bar |
37-
| Edit | `↑/↓` | Navigate fields |
38-
| Edit | `Enter/e` | Edit field value |
39-
| Edit | `←/→` | Cycle enum fields |
40-
| Edit | `Esc` | Close overlay |
41-
42-
## Setup
43-
44-
### Requirements
45-
46-
- Rust 1.70+
47-
- An OpenAI API key (for AI features)
48-
49-
### Build & run
23+
- **Multiple views**: Buckets (columns), Timeline (chronological), Kanban (progress stages)
24+
- **AI triage**: Natural language → create/update/delete/decompose/bulk-update tasks via tool calls
25+
- **Email suggestions**: MCP integration with Apple Mail surfaces actionable inbox items
26+
- **URL context**: Auto-fetch GitHub PRs/issues or any URL content
27+
- **CLI mode**: Headless commands for scripting (`task list`, `suggestions sync`, etc.)
28+
- **Undo/history**: Snapshot before every operation, rollback anytime
29+
- **Sub-tasks & dependencies**: Hierarchical tasks with automatic parent progress sync
30+
- **Keyboard-driven**: Full vim-style navigation, no mouse required
31+
32+
## Quick Start
5033

5134
```sh
5235
cargo build --release
5336
./target/release/aipm
5437
```
5538

56-
### AI configuration
57-
58-
Set your API key for your preferred provider:
39+
Set up AI (required for triage and email filtering):
5940

6041
```sh
6142
export ANTHROPIC_API_KEY="sk-ant-..." # for Claude models
6243
export OPENAI_API_KEY="sk-..." # for OpenAI models
6344
```
6445

65-
Or configure it in the Settings tab (`4`) within the app. The default model is `claude-sonnet-4-5`.
66-
67-
## CLI commands
68-
69-
All subcommands output JSON to stdout. Errors go to stderr with a non-zero exit code.
70-
Task IDs accept short prefixes (4+ hex chars), e.g. `36149d52` or `3614`.
71-
72-
### Task commands
73-
74-
- `aipm task list` — JSON array of all tasks.
75-
- `aipm task show <id>` — single task as JSON.
76-
- `aipm task add --title "X" --bucket "Y"` — create a task. Optional flags: `--priority low|medium|high|critical`, `--progress backlog|todo|in-progress|done`, `--due YYYY-MM-DD`, `--description "..."`, `--parent <id>` (for sub-tasks). Prints the created task as JSON.
77-
- `aipm task edit <id>` — update a task. Pass any combination of: `--title`, `--bucket`, `--description`, `--priority`, `--progress`, `--due` (use `none` to clear). Prints the updated task as JSON.
78-
- `aipm task delete <id>` — delete a task and all its sub-tasks. Prints confirmation JSON.
79-
80-
### Bucket commands
46+
Or configure in Settings tab (`4`). Default model: `claude-sonnet-4-5`.
8147

82-
- `aipm bucket list` — JSON array of all buckets.
83-
- `aipm bucket add <name>` — add a bucket. Optional: `--description "..."`.
84-
- `aipm bucket rename <old> <new>` — rename a bucket and update all tasks in it.
85-
- `aipm bucket delete <name>` — delete a bucket; tasks move to the first remaining bucket.
48+
## Usage
8649

87-
### AI commands (headless)
50+
**TUI**: Just run `aipm` and start typing natural language instructions.
8851

89-
- `aipm "<instruction>"` — send a natural-language instruction to AI for triage (create/update/delete tasks). Requires an API key.
90-
91-
## AI tools
92-
93-
The AI agent uses tool calling to decide how to handle each input. Available tools:
94-
95-
| Tool | Description |
96-
|------|-------------|
97-
| `create_task` | Create a new task with title, bucket, description, priority, progress, due date, and optional subtasks |
98-
| `update_task` | Update fields on an existing task by ID prefix |
99-
| `delete_task` | Delete a task by ID prefix |
100-
| `decompose_task` | Break a task into smaller subtasks with dependency ordering |
101-
| `bulk_update_tasks` | Apply an instruction across multiple tasks at once |
102-
103-
The AI also automatically fetches context from URLs included in the input:
104-
- **GitHub PRs/Issues** — fetches title, author, state, and body via the GitHub API
105-
- **Generic URLs** — fetches the page, extracts the title and a text snippet
106-
107-
## Data storage
108-
109-
Each task is stored as an individual markdown file with YAML front matter in a `tasks/` directory:
110-
111-
```
112-
<data_dir>/
113-
tasks/
114-
550e8400-implement-user-auth.md
115-
660e8400-setup-oauth-flow.md
116-
...
117-
settings.yaml
118-
```
119-
120-
Task file format:
121-
122-
```yaml
123-
---
124-
id: "550e8400-e29b-41d4-a716-446655440000"
125-
title: "Implement user authentication"
126-
bucket: Team
127-
progress: InProgress
128-
priority: High
129-
due_date: "2026-03-01"
130-
parent_id: "660e8400-e29b-41d4-a716-446655440001"
131-
dependencies:
132-
- "770e8400-e29b-41d4-a716-446655440002"
133-
created_at: "2026-02-10T12:00:00Z"
134-
updated_at: "2026-02-15T14:30:00Z"
135-
---
136-
Description goes here as the markdown body.
52+
**CLI**: Script-friendly JSON output:
53+
```sh
54+
aipm task list
55+
aipm "create three tasks for the auth feature"
56+
aipm suggestions sync --limit 5
13757
```
13858

139-
This file-per-task architecture makes tasks naturally navigable by AI coding agents:
59+
**Keybindings**: Press `1/2/3/4/0` to switch tabs. Full vim-style navigation (`hjkl`, arrows, etc.).
14060

141-
```sh
142-
grep -r "priority: Critical" tasks/ # find all critical tasks
143-
grep -r "bucket: Team" tasks/ # find all team tasks
144-
ls tasks/ # browse tasks by name
145-
cat tasks/550e8400-*.md # read a specific task
146-
```
61+
## Documentation
14762

148-
Default data directory:
63+
### CLI
64+
- [Task Commands](docs/cli/tasks.md) - CRUD operations for tasks
65+
- [Bucket Commands](docs/cli/buckets.md) - Manage task columns/categories
66+
- [Undo/History](docs/cli/undo.md) - Rollback operations
14967

150-
- **macOS**: `~/Library/Application Support/aipm/`
151-
- **Linux**: `$XDG_DATA_HOME/aipm/` or `~/.local/share/aipm/`
68+
### Features
69+
- [AI Triage](docs/features/ai.md) - Natural language task management
70+
- [Email Suggestions](docs/features/suggestions.md) - Apple Mail MCP integration
15271

153-
Override with `AIPM_DATA_DIR` environment variable.
72+
### UI
73+
- [Keybindings](docs/ui/keybindings.md) - Complete keyboard reference
15474

155-
Existing `tasks.json` data is automatically migrated to the new format on first run.
75+
### Data
76+
- [Storage Format](docs/data/storage.md) - File-per-task architecture details
15677

15778
## License
15879

File renamed without changes.
File renamed without changes.
File renamed without changes.

docs/data/storage.md

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
# Data Storage
2+
3+
aipm uses a file-per-task architecture where each task is stored as an individual markdown file with YAML front matter.
4+
5+
## Directory Structure
6+
7+
```
8+
<data_dir>/
9+
tasks/
10+
550e8400-implement-user-auth.md
11+
660e8400-setup-oauth-flow.md
12+
...
13+
settings.yaml
14+
history/
15+
snapshot-2026-02-17-120000.json
16+
snapshot-2026-02-17-130000.json
17+
...
18+
```
19+
20+
## Task File Format
21+
22+
Each task is stored as a markdown file with YAML front matter:
23+
24+
```yaml
25+
---
26+
id: "550e8400-e29b-41d4-a716-446655440000"
27+
title: "Implement user authentication"
28+
bucket: Team
29+
progress: InProgress
30+
priority: High
31+
due_date: "2026-03-01"
32+
parent_id: "660e8400-e29b-41d4-a716-446655440001"
33+
dependencies:
34+
- "770e8400-e29b-41d4-a716-446655440002"
35+
created_at: "2026-02-10T12:00:00Z"
36+
updated_at: "2026-02-15T14:30:00Z"
37+
---
38+
Description goes here as the markdown body.
39+
Multi-line descriptions are supported.
40+
```
41+
42+
## Fields
43+
44+
- **id**: UUID v4 identifier
45+
- **title**: Task name
46+
- **bucket**: Column/category (e.g. "Team", "Personal")
47+
- **progress**: One of `Backlog`, `Todo`, `InProgress`, `Done`
48+
- **priority**: One of `Low`, `Medium`, `High`, `Critical`
49+
- **due_date**: Optional ISO date (YYYY-MM-DD)
50+
- **parent_id**: Optional UUID of parent task (for sub-tasks)
51+
- **dependencies**: Array of task UUIDs this task depends on
52+
- **created_at**: ISO 8601 timestamp
53+
- **updated_at**: ISO 8601 timestamp
54+
- **start_date**: Optional timestamp when task moved to InProgress
55+
56+
## Data Directory Locations
57+
58+
Default locations by platform:
59+
60+
- **macOS**: `~/Library/Application Support/aipm/`
61+
- **Linux**: `$XDG_DATA_HOME/aipm/` or `~/.local/share/aipm/`
62+
63+
Override with environment variable:
64+
65+
```sh
66+
export AIPM_DATA_DIR=/path/to/custom/location
67+
```
68+
69+
## File-per-Task Benefits
70+
71+
This architecture makes tasks naturally accessible to AI agents and command-line tools:
72+
73+
```sh
74+
# Find all critical tasks
75+
grep -r "priority: Critical" tasks/
76+
77+
# Find all team tasks
78+
grep -r "bucket: Team" tasks/
79+
80+
# Browse tasks by name
81+
ls tasks/
82+
83+
# Read a specific task
84+
cat tasks/550e8400-*.md
85+
86+
# Count tasks by progress
87+
grep -l "progress: InProgress" tasks/*.md | wc -l
88+
```
89+
90+
## Migration
91+
92+
Existing `tasks.json` data is automatically migrated to the file-per-task format on first run. The old file is preserved as a backup.
93+
94+
## Settings File
95+
96+
Settings are stored in `settings.yaml`:
97+
98+
```yaml
99+
owner_name: "John"
100+
enabled: true
101+
openai_api_key: "sk-..."
102+
anthropic_api_key: "sk-ant-..."
103+
model: "claude-sonnet-4-5"
104+
api_url: ""
105+
timeout_secs: 30
106+
show_backlog: true
107+
show_todo: true
108+
show_in_progress: true
109+
show_done: true
110+
buckets:
111+
- name: "Team"
112+
description: "Team-wide tasks"
113+
- name: "Personal"
114+
description: "Individual tasks"
115+
mcp_enabled: false
116+
mcp_python_path: "/usr/bin/python3"
117+
mcp_script_path: ""
118+
```
119+
120+
## History / Undo
121+
122+
State snapshots are saved in `history/` before each CLI or AI operation. See [CLI Undo](../cli/undo.md) for details.
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)