@tomkapa/tayto 0.4.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +190 -111
- package/dist/index.js +53 -64
- package/dist/index.js.map +1 -1
- package/dist/{tui-4GNIGMCK.js → tui-IXZGQMWN.js} +24 -16
- package/dist/{tui-4GNIGMCK.js.map → tui-IXZGQMWN.js.map} +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,98 +1,141 @@
|
|
|
1
|
-
|
|
1
|
+
<div align="center">
|
|
2
2
|
|
|
3
|
-
Task management for solo developers and AI agents.
|
|
3
|
+

|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
-
|
|
5
|
+
[](https://www.npmjs.com/package/@tomkapa/tayto)
|
|
6
|
+
[](LICENSE)
|
|
7
|
+
[](https://nodejs.org)
|
|
7
8
|
|
|
8
|
-
|
|
9
|
+
**Stop losing tasks between AI sessions. Stop drowning in Jira fields you don't need.**
|
|
10
|
+
|
|
11
|
+
Tayto is a local-first task manager built for solo developers who work with AI coding agents. Two interfaces, one SQLite database, zero configuration.
|
|
12
|
+
|
|
13
|
+
[Quick Start](#quick-start) • [Why Tayto](#why-tayto) • [Workflow](#workflow) • [CLI Reference](#cli-reference) • [TUI Reference](#tui-reference)
|
|
14
|
+
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Why Tayto
|
|
20
|
+
|
|
21
|
+
Every project management tool out there assumes you're on a team. They want you to configure sprints, assign story points, set due dates, and fill out fifteen fields before you can track a single task.
|
|
22
|
+
|
|
23
|
+
If you're a solo dev shipping with AI agents like Claude Code, you need something different:
|
|
24
|
+
|
|
25
|
+
- **You forget things.** A quick idea during a coding session, a tech debt note from an AI-generated feature, a bug you noticed but can't fix right now. Without a fast capture tool, these vanish.
|
|
26
|
+
- **AI generates work faster than you can track it.** Your agent builds five features in an afternoon. Each one leaves behind edge cases, missing tests, and shortcuts. That debt is invisible until it bites you.
|
|
27
|
+
- **Priority fields are a lie.** When you're the only one executing, all that matters is order: what's first, what's next. Row 1 in the task list is what you do now. That's it.
|
|
28
|
+
- **Your AI agent can't use Jira.** It needs a CLI that speaks JSON. Your existing tools weren't built for this.
|
|
29
|
+
|
|
30
|
+
Tayto solves exactly this: a **CLI for agents** and a **TUI for humans**, sharing the same local SQLite database. No server. No login. No internet required.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Workflow
|
|
35
|
+
|
|
36
|
+
Tayto follows a lean, agile-inspired loop designed for how solo devs actually work:
|
|
37
|
+
|
|
38
|
+

|
|
39
|
+
|
|
40
|
+
**1. Capture** — Use AI to generate tasks from feature plans, record tech debt, or break down epics. Never lose an idea again.
|
|
41
|
+
|
|
42
|
+
**2. Prioritize** — You review the backlog and drag tasks into execution order. No story points. No priority matrices. Just: what's first?
|
|
43
|
+
|
|
44
|
+
**3. Enrich** — AI analyzes the codebase and writes implementation-ready technical notes for the top backlog items.
|
|
45
|
+
|
|
46
|
+
**4. Review** — You read the plan. Approve it, adjust it, or send it back.
|
|
47
|
+
|
|
48
|
+
**5. Execute** — AI implements the first `todo` task. You review the code. Cycle repeats.
|
|
49
|
+
|
|
50
|
+
> Don't plan too far ahead. Keep tasks in the backlog. If something becomes urgent, re-rank it. Enrich only what's next. Ship what's ready. Simple.
|
|
9
51
|
|
|
10
52
|
---
|
|
11
53
|
|
|
12
54
|
## Quick Start
|
|
13
55
|
|
|
14
56
|
```bash
|
|
15
|
-
# Install
|
|
16
|
-
npm install
|
|
57
|
+
# Install globally from npm
|
|
58
|
+
npm install -g @tomkapa/tayto
|
|
17
59
|
|
|
18
|
-
# Create a project
|
|
60
|
+
# Create a project (auto-links to current git repo)
|
|
19
61
|
tayto project create -n "my-app" --default
|
|
20
62
|
|
|
21
|
-
#
|
|
22
|
-
tayto task create -n "Fix auth
|
|
23
|
-
tayto task create -n "Add dashboard" -t story
|
|
63
|
+
# Capture some tasks
|
|
64
|
+
tayto task create -n "Fix auth token refresh" -t bug
|
|
65
|
+
tayto task create -n "Add user dashboard" -t story
|
|
66
|
+
tayto task create -n "Refactor DB connection pooling" -t tech-debt
|
|
67
|
+
|
|
68
|
+
# Re-rank: put the bug at the top
|
|
69
|
+
tayto task rank <bug-id> --top
|
|
24
70
|
|
|
25
|
-
# Launch the
|
|
71
|
+
# Launch the TUI to review your backlog
|
|
26
72
|
tayto
|
|
27
73
|
```
|
|
28
74
|
|
|
29
|
-
|
|
75
|
+
---
|
|
30
76
|
|
|
31
|
-
|
|
77
|
+
## Installation
|
|
32
78
|
|
|
33
79
|
```bash
|
|
34
|
-
|
|
35
|
-
npm install
|
|
36
|
-
npm run build
|
|
37
|
-
npm link # makes `tayto` available globally
|
|
80
|
+
npm install -g @tomkapa/tayto
|
|
38
81
|
```
|
|
39
82
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
### Terminal UI
|
|
43
|
-
|
|
44
|
-
Run `tayto` with no arguments to launch the interactive TUI.
|
|
83
|
+
Or build from source:
|
|
45
84
|
|
|
46
85
|
```bash
|
|
47
|
-
tayto
|
|
48
|
-
|
|
49
|
-
|
|
86
|
+
git clone https://github.com/tomkapa/tayto && cd tayto
|
|
87
|
+
npm install && npm run build
|
|
88
|
+
npm link
|
|
50
89
|
```
|
|
51
90
|
|
|
52
|
-
|
|
91
|
+
**Requires:** Node.js >= 25
|
|
53
92
|
|
|
54
|
-
|
|
55
|
-
|---|---|
|
|
56
|
-
| `j` / `k` / `arrows` | Navigate up/down |
|
|
57
|
-
| `Enter` | Open task detail |
|
|
58
|
-
| `c` | Create task |
|
|
59
|
-
| `e` | Edit task |
|
|
60
|
-
| `d` | Delete task (with confirmation) |
|
|
61
|
-
| `s` | Cycle status forward |
|
|
62
|
-
| `/` | Search tasks |
|
|
63
|
-
| `f` | Cycle status filter |
|
|
64
|
-
| `t` | Cycle type filter |
|
|
65
|
-
| `1`-`5` | Toggle priority filter |
|
|
66
|
-
| `0` | Clear all filters |
|
|
67
|
-
| `p` | Switch project |
|
|
68
|
-
| `Esc` / `b` | Go back |
|
|
69
|
-
| `?` | Show help |
|
|
70
|
-
| `q` | Quit |
|
|
93
|
+
---
|
|
71
94
|
|
|
72
|
-
|
|
95
|
+
## Two Interfaces, One Database
|
|
73
96
|
|
|
74
|
-
### CLI
|
|
97
|
+
### CLI — Built for AI Agents and Scripts
|
|
75
98
|
|
|
76
|
-
|
|
99
|
+
Every command returns structured JSON to stdout. Errors go to stderr with exit code 1.
|
|
77
100
|
|
|
78
101
|
```jsonc
|
|
79
|
-
//
|
|
102
|
+
// Success
|
|
80
103
|
{ "ok": true, "data": { ... } }
|
|
81
104
|
|
|
82
|
-
//
|
|
105
|
+
// Error
|
|
83
106
|
{ "ok": false, "error": { "code": "NOT_FOUND", "message": "..." } }
|
|
84
107
|
```
|
|
85
108
|
|
|
86
|
-
|
|
109
|
+
This makes Tayto a natural fit for AI coding agents. Claude Code can create tasks, search the backlog, read technical notes, and update status — all through simple CLI calls.
|
|
110
|
+
|
|
111
|
+
### TUI — Built for Humans
|
|
112
|
+
|
|
113
|
+
Run `tayto` with no arguments to launch an interactive terminal UI with:
|
|
114
|
+
|
|
115
|
+
- Rich markdown rendering for task descriptions and technical notes
|
|
116
|
+
- Vim-style navigation (`j`/`k`)
|
|
117
|
+
- Inline filtering by status, type, and priority
|
|
118
|
+
- Full-text search across all task fields
|
|
119
|
+
- Task creation, editing, and status management without leaving the terminal
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## CLI Reference
|
|
124
|
+
|
|
125
|
+
### Project Management
|
|
87
126
|
|
|
88
127
|
```bash
|
|
89
128
|
tayto project create -n "my-app" -d "Description" --default
|
|
90
129
|
tayto project list
|
|
91
130
|
tayto project update <id> -n "new-name" --default
|
|
92
131
|
tayto project delete <id>
|
|
132
|
+
tayto project link <id> --remote <git-remote-url>
|
|
133
|
+
tayto project unlink <id>
|
|
93
134
|
```
|
|
94
135
|
|
|
95
|
-
|
|
136
|
+
Projects auto-detect the current git remote, so `tayto` in a repo directory uses the right project automatically.
|
|
137
|
+
|
|
138
|
+
### Task Management
|
|
96
139
|
|
|
97
140
|
```bash
|
|
98
141
|
# Create
|
|
@@ -100,115 +143,151 @@ tayto task create \
|
|
|
100
143
|
-n "Fix login bug" \
|
|
101
144
|
-t bug \
|
|
102
145
|
-s todo \
|
|
103
|
-
--priority 1 \
|
|
104
146
|
-p "my-app" \
|
|
105
147
|
-d "Login fails on mobile" \
|
|
106
|
-
--technical-notes "Check JWT expiry" \
|
|
148
|
+
--technical-notes "Check JWT expiry logic" \
|
|
107
149
|
--additional-requirements "Must work on iOS Safari"
|
|
108
150
|
|
|
109
|
-
#
|
|
151
|
+
# List and search
|
|
110
152
|
tayto task list
|
|
111
|
-
tayto task list --status in-progress --type bug
|
|
112
|
-
tayto task
|
|
113
|
-
tayto task show <id>
|
|
153
|
+
tayto task list --status in-progress --type bug
|
|
154
|
+
tayto task search "login"
|
|
114
155
|
|
|
115
156
|
# Update
|
|
116
157
|
tayto task update <id> -s in-progress
|
|
117
158
|
tayto task update <id> --append-notes "Root cause: token not refreshed"
|
|
118
159
|
tayto task update <id> --append-requirements "Also fix on Android"
|
|
119
160
|
|
|
161
|
+
# Re-rank (execution order)
|
|
162
|
+
tayto task rank <id> --top
|
|
163
|
+
tayto task rank <id> --bottom
|
|
164
|
+
tayto task rank <id> --before <other-id>
|
|
165
|
+
tayto task rank <id> --after <other-id>
|
|
166
|
+
tayto task rank <id> --position 3
|
|
167
|
+
|
|
168
|
+
# Break down into subtasks
|
|
169
|
+
tayto task breakdown <parent-id> -f subtasks.json
|
|
170
|
+
|
|
120
171
|
# Delete
|
|
121
172
|
tayto task delete <id>
|
|
122
173
|
|
|
123
|
-
#
|
|
124
|
-
tayto task
|
|
174
|
+
# Export / Import
|
|
175
|
+
tayto task export -o backup.json
|
|
176
|
+
tayto task import -f backup.json
|
|
125
177
|
```
|
|
126
178
|
|
|
127
|
-
|
|
179
|
+
### Dependency Management
|
|
128
180
|
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
181
|
+
```bash
|
|
182
|
+
tayto dep add <task-id> <depends-on-id>
|
|
183
|
+
tayto dep add <task-id> <depends-on-id> -t blocked-by
|
|
184
|
+
tayto dep remove <task-id> <depends-on-id>
|
|
185
|
+
tayto dep list <task-id>
|
|
186
|
+
tayto dep graph <task-id>
|
|
134
187
|
```
|
|
135
188
|
|
|
189
|
+
Dependency types: `blocks`, `blocked-by`, `relates-to`, `duplicates`
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## TUI Reference
|
|
194
|
+
|
|
195
|
+
Launch with `tayto` or `tayto tui`.
|
|
196
|
+
|
|
197
|
+
| Key | Action |
|
|
198
|
+
|---|---|
|
|
199
|
+
| `j` / `k` / arrows | Navigate |
|
|
200
|
+
| `Enter` | Open task detail |
|
|
201
|
+
| `c` | Create task |
|
|
202
|
+
| `e` | Edit task |
|
|
203
|
+
| `d` | Delete task |
|
|
204
|
+
| `s` | Cycle status |
|
|
205
|
+
| `/` | Search |
|
|
206
|
+
| `f` | Filter by status |
|
|
207
|
+
| `t` | Filter by type |
|
|
208
|
+
| `0` | Clear filters |
|
|
209
|
+
| `p` | Switch project |
|
|
210
|
+
| `?` | Help |
|
|
211
|
+
| `q` | Quit |
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
136
215
|
## Data Model
|
|
137
216
|
|
|
138
217
|
### Task Types
|
|
139
218
|
|
|
140
|
-
| Type |
|
|
219
|
+
| Type | Use for |
|
|
141
220
|
|---|---|
|
|
142
|
-
| `story` |
|
|
143
|
-
| `tech-debt` | Refactoring
|
|
144
|
-
| `bug` |
|
|
221
|
+
| `story` | Features and user stories |
|
|
222
|
+
| `tech-debt` | Refactoring, cleanup, missing tests |
|
|
223
|
+
| `bug` | Defects and issues |
|
|
145
224
|
|
|
146
|
-
###
|
|
225
|
+
### Statuses
|
|
147
226
|
|
|
148
|
-
`backlog` → `todo` → `in-progress` → `review` → `done`
|
|
227
|
+
`backlog` → `todo` → `in-progress` → `review` → `done` (or `cancelled`)
|
|
149
228
|
|
|
150
|
-
|
|
229
|
+
### Task Fields
|
|
151
230
|
|
|
152
|
-
|
|
231
|
+
Each task carries rich context for AI consumption:
|
|
153
232
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
| 5 | Lowest |
|
|
233
|
+
- **name** — short summary
|
|
234
|
+
- **description** — user-facing details
|
|
235
|
+
- **technical_notes** — implementation guidance (appendable)
|
|
236
|
+
- **additional_requirements** — constraints and edge cases (appendable)
|
|
237
|
+
- **rank** — execution order within the project
|
|
238
|
+
- **parent_id** — hierarchical breakdown support
|
|
161
239
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
Tasks support a `parent_id` field for hierarchical decomposition. Use `task breakdown` to batch-create subtasks under a parent, or pass `--parent <id>` on `task create`.
|
|
240
|
+
---
|
|
165
241
|
|
|
166
242
|
## Configuration
|
|
167
243
|
|
|
168
|
-
Configure via environment variables.
|
|
169
|
-
|
|
170
244
|
| Variable | Default | Description |
|
|
171
245
|
|---|---|---|
|
|
172
|
-
| `TASK_DB_PATH` | `~/.task/data.db` |
|
|
246
|
+
| `TASK_DB_PATH` | `~/.task/data.db` | SQLite database path |
|
|
173
247
|
| `TASK_DATA_DIR` | `~/.task` | Data directory |
|
|
174
|
-
| `TASK_LOG_LEVEL` | `info` |
|
|
175
|
-
| `OTEL_EXPORTER_OTLP_ENDPOINT` | — | OpenTelemetry collector
|
|
248
|
+
| `TASK_LOG_LEVEL` | `info` | `debug` / `info` / `warn` / `error` |
|
|
249
|
+
| `OTEL_EXPORTER_OTLP_ENDPOINT` | — | OpenTelemetry collector |
|
|
250
|
+
|
|
251
|
+
Database is created automatically on first run. All data stays on your machine.
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
## Claude Code Integration
|
|
176
256
|
|
|
177
|
-
|
|
257
|
+
Tayto ships with Claude Code skills for the full AI-assisted workflow:
|
|
258
|
+
|
|
259
|
+
| Skill | What it does |
|
|
260
|
+
|---|---|
|
|
261
|
+
| `/tayto` | Manage projects and tasks from conversation |
|
|
262
|
+
| `/implement-task` | Pick the top todo and implement it |
|
|
263
|
+
| `/enrich-task` | Research the codebase and write technical notes for the next backlog item |
|
|
264
|
+
|
|
265
|
+
The CLI's JSON output format means any AI agent with shell access can interact with Tayto — no special integration needed.
|
|
266
|
+
|
|
267
|
+
---
|
|
178
268
|
|
|
179
269
|
## Architecture
|
|
180
270
|
|
|
181
271
|
```
|
|
182
|
-
CLI
|
|
183
|
-
|
|
184
|
-
|
|
272
|
+
CLI (Commander.js) ──┐
|
|
273
|
+
├──> Service Layer (Zod validation) ──> Repository ──> SQLite
|
|
274
|
+
TUI (Ink/React) ─────┘
|
|
185
275
|
```
|
|
186
276
|
|
|
187
|
-
- **
|
|
188
|
-
- **
|
|
189
|
-
- **
|
|
190
|
-
- **
|
|
191
|
-
- **
|
|
277
|
+
- **Result\<T\>** return type across all layers — no thrown exceptions
|
|
278
|
+
- **OpenTelemetry** tracing on every operation
|
|
279
|
+
- **FTS5** full-text search across task fields
|
|
280
|
+
- **ULID** identifiers — sortable, collision-free
|
|
281
|
+
- **Fractional ranking** — O(1) reorder without renumbering
|
|
192
282
|
|
|
193
|
-
|
|
194
|
-
src/
|
|
195
|
-
cli/ # Commander.js commands, JSON output
|
|
196
|
-
tui/ # Ink (React) terminal UI components
|
|
197
|
-
service/ # Business logic
|
|
198
|
-
repository/ # Data access
|
|
199
|
-
db/ # SQLite connection, migrations
|
|
200
|
-
types/ # Zod schemas, enums, Result type
|
|
201
|
-
errors/ # Typed error hierarchy
|
|
202
|
-
logging/ # OpenTelemetry tracer
|
|
203
|
-
config/ # Environment-based configuration
|
|
204
|
-
```
|
|
283
|
+
---
|
|
205
284
|
|
|
206
285
|
## Development
|
|
207
286
|
|
|
208
287
|
```bash
|
|
209
|
-
npm run dev #
|
|
210
|
-
npm run check # prettier + eslint
|
|
288
|
+
npm run dev # watch mode
|
|
211
289
|
npm run test # run tests
|
|
290
|
+
npm run check # prettier + eslint
|
|
212
291
|
npm run build # production build
|
|
213
292
|
```
|
|
214
293
|
|