claude-do-it 0.0.0-stage → 0.1.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/LICENSE +21 -0
- package/NOTICE +25 -0
- package/README.md +189 -2
- package/bin/daemon.js +2212 -0
- package/bin/do-it.js +1208 -0
- package/package.json +45 -4
- package/skill/SKILL.md +263 -0
- package/web/assets/index-6QftMBqY.css +2 -0
- package/web/assets/index-Bey8I5te.js +130 -0
- package/web/index.html +13 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Dominique Rau
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/NOTICE
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
The browser editor's notebook colours, PlainTasks markers, tag completions,
|
|
2
|
+
stamps, and tag colours are adapted from
|
|
3
|
+
PlainTasks (https://github.com/aziz/PlainTasks), an MIT licensed project,
|
|
4
|
+
Copyright (c) 2012 Allen Bargi and contributors. See the PlainTasks LICENSE file for the source attribution.
|
|
5
|
+
|
|
6
|
+
Copyright 2012-2013 Allen Bargi.
|
|
7
|
+
|
|
8
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
9
|
+
a copy of this software and associated documentation files (the
|
|
10
|
+
"Software"), to deal in the Software without restriction, including
|
|
11
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
12
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
13
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
14
|
+
the following conditions:
|
|
15
|
+
|
|
16
|
+
The above copyright notice and this permission notice shall be
|
|
17
|
+
included in all copies or substantial portions of the Software.
|
|
18
|
+
|
|
19
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
20
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
21
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
22
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
23
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
24
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
25
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,190 @@
|
|
|
1
|
-
#
|
|
1
|
+
# claude-do-it
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**A Markdown todo that you and Claude edit at the same time.**
|
|
4
|
+
|
|
5
|
+
You type in a browser editor. Claude reads the list, plans each task, hands it
|
|
6
|
+
to worker agents, and writes status, questions, and results back under the line
|
|
7
|
+
it belongs to. Your keystrokes, the agents' changes, and edits made to the file
|
|
8
|
+
on disk all merge instead of overwriting each other: every open file is one
|
|
9
|
+
[Loro](https://loro.dev) CRDT held by a small daemon on your machine. The file
|
|
10
|
+
itself stays plain Markdown, so any other editor still works on it.
|
|
11
|
+
|
|
12
|
+
```mermaid
|
|
13
|
+
flowchart LR
|
|
14
|
+
you["You<br/>browser editor"] <-->|"live sync"| daemon
|
|
15
|
+
agents["Claude Code<br/>do-it CLI"] <-->|"versioned commands"| daemon
|
|
16
|
+
daemon["do-it daemon<br/>127.0.0.1, one CRDT per file"] <-->|"atomic writes, file watching"| file[("TODO.md<br/>plain Markdown")]
|
|
17
|
+
other["Any other editor"] <--> file
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## What's inside
|
|
21
|
+
|
|
22
|
+
- **The `do-it` CLI.** Versioned commands agents use to read and change a
|
|
23
|
+
todo. Every change names the version it was made against, so a stale edit is
|
|
24
|
+
refused with a diff instead of clobbering someone else's work.
|
|
25
|
+
- **The daemon.** One per user on `127.0.0.1`. It holds the open documents,
|
|
26
|
+
watches their files, merges outside edits, and serves the editor. It starts
|
|
27
|
+
on demand and stops after 30 idle minutes.
|
|
28
|
+
- **The browser editor.** Built with Foldkit and CodeMirror 6. It keeps the
|
|
29
|
+
todo as plain Markdown while showing a live PlainTasks preview with markers,
|
|
30
|
+
tags, actions, stamps, and a command palette. Task lines always stay
|
|
31
|
+
rendered: markers show as ☐ ✔ ✘ and links as their text, with a popover to
|
|
32
|
+
edit them.
|
|
33
|
+
- **The `/do-it` skill for Claude Code.** It turns a session into a conductor
|
|
34
|
+
that sizes, plans, and delivers every task through worker agents and one
|
|
35
|
+
shared tester.
|
|
36
|
+
|
|
37
|
+
## Install
|
|
38
|
+
|
|
39
|
+
Needs [Bun](https://bun.sh) 1.3 or newer on macOS or Linux.
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
bun add -g claude-do-it # or: npm install -g claude-do-it (Bun still runs it)
|
|
43
|
+
do-it skill install # the /do-it skill, copied into ~/.claude/skills/do-it
|
|
44
|
+
do-it --help
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Run `do-it skill install` again after upgrading to refresh the skill. It never
|
|
48
|
+
replaces a skill directory it did not create unless you pass `--force`.
|
|
49
|
+
`do-it --skill` prints the skill, and `do-it skill path` shows where the
|
|
50
|
+
package keeps it. To try it without installing, use `bunx claude-do-it open TODO.md`.
|
|
51
|
+
|
|
52
|
+
The command is `do-it`, not `do`: `do` is a reserved word in bash and zsh.
|
|
53
|
+
|
|
54
|
+
### From source
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
git clone https://github.com/DomiR/claude-do-it ~/Developer/claude-do-it
|
|
58
|
+
cd ~/Developer/claude-do-it
|
|
59
|
+
bun install
|
|
60
|
+
bun run build:web # the editor the daemon serves
|
|
61
|
+
mkdir -p ~/.local/bin
|
|
62
|
+
ln -sf "$PWD/packages/cli/src/bin.ts" ~/.local/bin/do-it # any directory on PATH works
|
|
63
|
+
ln -s "$PWD/skill" ~/.claude/skills/do-it # the skill, always current with the checkout
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Use it from Claude Code
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
/do-it # TODO.md in the current directory, created when missing
|
|
70
|
+
/do-it PLAN.md
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
The browser opens on the todo. Add one task per line. The session sizes each
|
|
74
|
+
task, plans it, starts a worker in its own worktree, and writes one status line
|
|
75
|
+
under it, plus any question it needs you to answer (answer by writing under the
|
|
76
|
+
question). Delivered tasks are checked off with their branch and test result.
|
|
77
|
+
Inside Herdr (`HERDR_ENV=1`) the workers are Claude architects in Herdr
|
|
78
|
+
worktrees and tabs with Codex lanes; elsewhere they are Claude Code subagents.
|
|
79
|
+
|
|
80
|
+
Set `DO_IT_BROWSER` to the command that should open links, or to `true` to
|
|
81
|
+
open nothing.
|
|
82
|
+
|
|
83
|
+
## Use the CLI
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
do-it open TODO.md # start or reuse the daemon, open the browser, return
|
|
87
|
+
do-it read TODO.md # "Version: 7" then the text
|
|
88
|
+
do-it todo list TODO.md
|
|
89
|
+
do-it todo add TODO.md --version 7 --section tasks "Write tests"
|
|
90
|
+
do-it todo start TODO.md --version 8 --section tasks 3
|
|
91
|
+
do-it todo check TODO.md --version 9 3
|
|
92
|
+
do-it edit TODO.md --version 10 --old "ship friday" --new "ship monday"
|
|
93
|
+
do-it append TODO.md --version 11 --section notes -- "- found: flaky CI"
|
|
94
|
+
do-it diff TODO.md --since 9 --wait 300
|
|
95
|
+
do-it watch TODO.md --todos # or --settle 25 for one line per pause
|
|
96
|
+
do-it status
|
|
97
|
+
do-it stop
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### How versions work
|
|
101
|
+
|
|
102
|
+
Every reply starts with the document's version, and every change, by anyone,
|
|
103
|
+
takes the next one. A change names the version it was made against. When the
|
|
104
|
+
document has moved on, nothing is applied and the reply is the latest version
|
|
105
|
+
plus a diff (exit 1). With `--section ID` a stale version still applies while
|
|
106
|
+
that section is unchanged.
|
|
107
|
+
|
|
108
|
+
A resumed watch that missed history prints
|
|
109
|
+
`Missed changes, now at version N: run do-it read`. Use `--quiet` to skip the
|
|
110
|
+
initial `Watching PATH at version N` line.
|
|
111
|
+
|
|
112
|
+
`--json` works on every command, and `--as NAME` (or `DO_IT_AGENT`) names the
|
|
113
|
+
agent.
|
|
114
|
+
|
|
115
|
+
| Exit code | Meaning |
|
|
116
|
+
| --- | --- |
|
|
117
|
+
| 0 | Done |
|
|
118
|
+
| 1 | Refused, or version mismatch |
|
|
119
|
+
| 2 | Invalid arguments |
|
|
120
|
+
| 3 | The daemon is not running and could not start |
|
|
121
|
+
| 4 | Nothing changed yet |
|
|
122
|
+
| 9 | The document was deleted |
|
|
123
|
+
|
|
124
|
+
## Editor keys
|
|
125
|
+
|
|
126
|
+
| Action | macOS | Linux and Windows |
|
|
127
|
+
| --- | --- | --- |
|
|
128
|
+
| New task | `Cmd-Enter` or `Cmd-I` | `Ctrl-Enter` or `Ctrl-I` |
|
|
129
|
+
| Toggle done | `Cmd-D` or `Cmd-Shift-Enter` | `Ctrl-D` or `Ctrl-Shift-Enter` |
|
|
130
|
+
| Toggle cancelled | `Ctrl-C` or `Cmd-Alt-Enter` | `Alt-C` or `Ctrl-Alt-Enter` |
|
|
131
|
+
| Archive resolved tasks | `Cmd-Shift-A` or `Cmd-Alt-A` | `Ctrl-Shift-A` or `Ctrl-Alt-A` |
|
|
132
|
+
| Move up | `Cmd-Ctrl-Up` or `Alt-Up` | `Ctrl-Shift-Up` or `Alt-Up` |
|
|
133
|
+
| Move down | `Cmd-Ctrl-Down` or `Alt-Down` | `Ctrl-Shift-Down` or `Alt-Down` |
|
|
134
|
+
| Continue task | `Enter` | `Enter` |
|
|
135
|
+
| Expand a PlainTasks tag, or indent | `Tab` | `Tab` |
|
|
136
|
+
| Outdent | `Shift-Tab` or `Cmd-[` | `Shift-Tab` or `Ctrl-[` |
|
|
137
|
+
| Open link | `Cmd-Shift-U` or `Alt-Enter` | `Alt-Enter` |
|
|
138
|
+
| Edit link (or click a link on a task line) | `Cmd-K` | `Ctrl-K` |
|
|
139
|
+
| Go to project | `Cmd-P` | `Ctrl-P` |
|
|
140
|
+
| Command palette | `Cmd-Shift-P` or `F1` | `Ctrl-Shift-P` or `F1` |
|
|
141
|
+
| Find | `Cmd-F` | `Ctrl-F` |
|
|
142
|
+
| Keyboard shortcuts | `Cmd-/` | `Ctrl-/` |
|
|
143
|
+
|
|
144
|
+
Escape then Tab leaves the editor and returns focus to the page.
|
|
145
|
+
|
|
146
|
+
## The daemon
|
|
147
|
+
|
|
148
|
+
There is one daemon per user. Any command starts it on demand; `do-it stop` or
|
|
149
|
+
30 idle minutes stop it. State lives in `~/.do-it` (`DO_IT_HOME`): the runtime
|
|
150
|
+
record, a per user token (mode 0600), the log, and the last version of each
|
|
151
|
+
file, so version numbers survive restarts. It listens on `127.0.0.1:47100`
|
|
152
|
+
(`DO_IT_PORT`) and only answers requests that carry the token or the browser
|
|
153
|
+
cookie the `open` link sets.
|
|
154
|
+
|
|
155
|
+
## How it's built
|
|
156
|
+
|
|
157
|
+
| Package | What it does |
|
|
158
|
+
| --- | --- |
|
|
159
|
+
| [`protocol`](packages/protocol) | RPC schema, errors, and formatting shared by every side |
|
|
160
|
+
| [`doc`](packages/doc) | The CRDT document, Markdown sections and tasks, diffs, and atomic file I/O |
|
|
161
|
+
| [`server`](packages/server) | The daemon: HTTP and RPC, auth, the document registry, file watching |
|
|
162
|
+
| [`client`](packages/client) | Finds, starts, and stops the daemon, plus a typed RPC client |
|
|
163
|
+
| [`cli`](packages/cli) | The `do-it` command |
|
|
164
|
+
| [`web`](packages/web) | The browser editor |
|
|
165
|
+
| [`tui`](packages/tui) | A terminal editor (not built yet) |
|
|
166
|
+
|
|
167
|
+
Everything runs on [Effect](https://effect.website) 4. File system, paths,
|
|
168
|
+
child processes, standard I/O, crypto, and configuration all go through Effect
|
|
169
|
+
platform services, and Bun provides the implementations. The design notes are
|
|
170
|
+
in [docs/plan.md](docs/plan.md) and [docs/design.md](docs/design.md).
|
|
171
|
+
|
|
172
|
+
## Develop
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
bun run test # unit, daemon, and end to end tests
|
|
176
|
+
bun run typecheck
|
|
177
|
+
bun run build:web
|
|
178
|
+
bun run build:npm # the npm package, in dist/npm
|
|
179
|
+
bun --cwd packages/web run dev # editor with a proxy to the daemon on 47100
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
## Acknowledgements
|
|
183
|
+
|
|
184
|
+
The editor's notebook colours, PlainTasks markers, tag completions, stamps, and
|
|
185
|
+
tag colours are adapted from [PlainTasks](https://github.com/aziz/PlainTasks)
|
|
186
|
+
(MIT). See [NOTICE](NOTICE).
|
|
187
|
+
|
|
188
|
+
## License
|
|
189
|
+
|
|
190
|
+
[MIT](LICENSE)
|