clawdo 1.1.1 → 1.1.2
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 +86 -57
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -6,45 +6,57 @@
|
|
|
6
6
|
[](https://nodejs.org)
|
|
7
7
|
[](https://clawhub.com)
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Your AI agent has memory files, cron jobs, and chat. It has no todo list.
|
|
10
|
+
|
|
11
|
+
clawdo is that missing piece — a persistent task queue for AI agents.
|
|
10
12
|
|
|
11
13
|
```bash
|
|
12
14
|
npm install -g clawdo
|
|
13
15
|
```
|
|
14
16
|
|
|
15
|
-
##
|
|
17
|
+
## The gap
|
|
18
|
+
|
|
19
|
+
Think about what your agent framework gives you:
|
|
20
|
+
|
|
21
|
+
- **Memory** — context that persists between sessions
|
|
22
|
+
- **Cron** — do X at 3pm Tuesday
|
|
23
|
+
- **Chat** — talk to your human
|
|
16
24
|
|
|
17
|
-
|
|
25
|
+
Now think about what's missing: a way to say **"do this when you get to it."**
|
|
18
26
|
|
|
19
|
-
|
|
27
|
+
Not "do this at 14:00 UTC." Not "do this right now in this conversation." Just... remember to do it. Track it. Pick it up when there's a gap.
|
|
20
28
|
|
|
21
|
-
clawdo
|
|
29
|
+
That's clawdo.
|
|
22
30
|
|
|
23
31
|
```bash
|
|
24
|
-
#
|
|
25
|
-
clawdo add "
|
|
32
|
+
# Human or agent captures a task
|
|
33
|
+
clawdo add "update dependencies" --urgency soon
|
|
26
34
|
|
|
27
|
-
#
|
|
28
|
-
clawdo
|
|
35
|
+
# Agent checks its queue (heartbeat, cron, conversation — wherever)
|
|
36
|
+
clawdo inbox --format json
|
|
29
37
|
|
|
30
|
-
#
|
|
31
|
-
clawdo
|
|
38
|
+
# Agent works it
|
|
39
|
+
clawdo start a3f2
|
|
40
|
+
clawdo done a3f2 --json
|
|
32
41
|
```
|
|
33
42
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
**1. Autonomy is a permission, not a suggestion.**
|
|
43
|
+
`add → inbox → start → done`. Persistent state in SQLite. Every command has `--json` so agents parse structured output, not terminal art.
|
|
37
44
|
|
|
38
|
-
|
|
45
|
+
## Where it fits
|
|
39
46
|
|
|
40
|
-
|
|
47
|
+
clawdo works everywhere agents work:
|
|
41
48
|
|
|
42
|
-
**
|
|
49
|
+
- **Heartbeat loops** — "anything in my queue? let me do it between checks"
|
|
50
|
+
- **Cron jobs** — "every hour, process one task"
|
|
51
|
+
- **Conversations** — "J mentioned fixing the auth module, let me capture that"
|
|
52
|
+
- **Pipes and sub-agents** — non-TTY safe, no interactive prompts
|
|
43
53
|
|
|
44
|
-
|
|
54
|
+
The agent wakes up, checks `clawdo inbox`, knows what to do.
|
|
45
55
|
|
|
46
56
|
## Autonomy levels
|
|
47
57
|
|
|
58
|
+
Tasks can be tagged with permission tiers that control what the agent is allowed to do unsupervised:
|
|
59
|
+
|
|
48
60
|
| Level | Time limit | What it means |
|
|
49
61
|
|-------|-----------|---------------|
|
|
50
62
|
| **auto** | 10 min | Agent can do this silently. Fix a typo. Run tests. Small stuff. |
|
|
@@ -53,18 +65,27 @@ When an agent wants to add work, it goes to `proposed` status. Even if the agent
|
|
|
53
65
|
|
|
54
66
|
Default: `collab` (safe).
|
|
55
67
|
|
|
68
|
+
**The key rule:** autonomy is a permission, not a suggestion. Once set, the agent can't change it. The one exception: if an agent fails the same task 3 times, autonomy *demotes* to `collab`. Safety only moves down, never up.
|
|
69
|
+
|
|
70
|
+
**Agents propose, humans approve.** When an agent adds work, it goes to `proposed` status. The human runs `clawdo confirm <id>` or it doesn't happen.
|
|
71
|
+
|
|
56
72
|
## Install
|
|
57
73
|
|
|
74
|
+
**Via npm:**
|
|
75
|
+
|
|
58
76
|
```bash
|
|
59
77
|
npm install -g clawdo
|
|
60
78
|
```
|
|
61
79
|
|
|
62
|
-
|
|
80
|
+
**Via [ClawHub](https://clawhub.ai)** (installs the skill into your OpenClaw workspace):
|
|
63
81
|
|
|
64
82
|
```bash
|
|
65
|
-
clawhub install
|
|
83
|
+
npm install -g clawhub # one-time: install the ClawHub CLI
|
|
84
|
+
clawhub install clawdo # install the clawdo skill
|
|
66
85
|
```
|
|
67
86
|
|
|
87
|
+
Then install the CLI itself: `npm install -g clawdo`. The ClawHub skill gives your agent the documentation; the npm package gives it the binary.
|
|
88
|
+
|
|
68
89
|
**Requirements:** Node.js ≥ 18, build tools for better-sqlite3:
|
|
69
90
|
- Debian/Ubuntu: `apt install build-essential python3`
|
|
70
91
|
- macOS: `xcode-select --install`
|
|
@@ -125,6 +146,21 @@ fi
|
|
|
125
146
|
|
|
126
147
|
The inbox returns categorized tasks: `autoReady`, `autoNotifyReady`, `urgent`, `overdue`, `proposed`, `stale`, `blocked`. Parse it, don't scrape it.
|
|
127
148
|
|
|
149
|
+
### Integration example: OpenClaw heartbeat
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
# In HEARTBEAT.md — runs every ~30 minutes
|
|
153
|
+
TASKS=$(clawdo inbox --format json)
|
|
154
|
+
AUTO=$(echo "$TASKS" | jq '.autoReady | length')
|
|
155
|
+
|
|
156
|
+
if [ "$AUTO" -gt 0 ]; then
|
|
157
|
+
TASK=$(clawdo next --auto --json | jq -r '.task.id')
|
|
158
|
+
clawdo start "$TASK" --json
|
|
159
|
+
# ... do the work ...
|
|
160
|
+
clawdo done "$TASK" --json
|
|
161
|
+
fi
|
|
162
|
+
```
|
|
163
|
+
|
|
128
164
|
## Urgency
|
|
129
165
|
|
|
130
166
|
| Level | Meaning |
|
|
@@ -138,42 +174,6 @@ Optional: `--due YYYY-MM-DD` for hard deadlines.
|
|
|
138
174
|
|
|
139
175
|
**Note:** Unlike autonomy, urgency is freely editable — including by agents. It's scheduling metadata, not a permission boundary. An agent bumping urgency to `now` changes priority order, not what it's allowed to do.
|
|
140
176
|
|
|
141
|
-
## Multi-agent setup
|
|
142
|
-
|
|
143
|
-
```bash
|
|
144
|
-
# Separate databases (isolation)
|
|
145
|
-
export CLAWDO_DB_PATH=/shared/agent-name.db
|
|
146
|
-
clawdo add "task"
|
|
147
|
-
|
|
148
|
-
# Shared database (coordination)
|
|
149
|
-
export CLAWDO_DB_PATH=/shared/team.db
|
|
150
|
-
# SQLite WAL mode: concurrent reads + 1 writer
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
Or per-command: `clawdo --db /path/to/db add "task"`
|
|
154
|
-
|
|
155
|
-
## Security
|
|
156
|
-
|
|
157
|
-
clawdo is built for the threat model where *your own agent is the attacker* — not maliciously, but through overconfidence, bugs, or prompt injection from untrusted data flowing through the task queue.
|
|
158
|
-
|
|
159
|
-
**What's enforced:**
|
|
160
|
-
|
|
161
|
-
- **Immutable autonomy** — agents cannot escalate their own permissions. Period. The one mutation is demotion after 3 failures.
|
|
162
|
-
- **Proposal limits** — max 5 active proposals, 60-second cooldown between them. Prevents task-spam.
|
|
163
|
-
- **Prompt injection defense** — all task text is sanitized before it can reach an LLM context. Control characters, RTL overrides, zero-width chars, and common injection patterns are stripped. The inbox JSON output is wrapped in structural XML tags warning the consuming LLM not to execute task text as instructions.
|
|
164
|
-
- **Immutable audit trail** — every state change logged with timestamp, actor, and context. Append-only JSONL, with SQLite fallback if the file write fails.
|
|
165
|
-
- **Uniform ID generation** — 8-character IDs via `crypto.randomInt()` (rejection sampling, no modulo bias).
|
|
166
|
-
- **Parameterized SQL everywhere** — zero string interpolation in queries.
|
|
167
|
-
|
|
168
|
-
**What's explicitly NOT enforced:**
|
|
169
|
-
|
|
170
|
-
- **Bulk operations auto-confirm in non-TTY mode.** This is standard CLI behavior. If you pipe `clawdo done --all`, it runs without prompting. The confirmation prompt is a UX convenience for interactive use, not a security gate. The autonomy level is the real boundary.
|
|
171
|
-
- **Urgency is editable by anyone.** See above — it's metadata, not permissions.
|
|
172
|
-
|
|
173
|
-
**Provenance:** This package is published with [npm provenance](https://docs.npmjs.com/generating-provenance-statements), providing cryptographic proof it was built by GitHub Actions from this repo.
|
|
174
|
-
|
|
175
|
-
**Dependencies pinned:** All deps use exact versions (no `^` caret) for reproducible builds.
|
|
176
|
-
|
|
177
177
|
## Inline syntax
|
|
178
178
|
|
|
179
179
|
Quick metadata parsing for humans who type fast:
|
|
@@ -190,6 +190,20 @@ clawdo add "fix auth bug +backend @code auto soon"
|
|
|
190
190
|
|
|
191
191
|
Flags always override inline parsing. If parsing fails, text is stored verbatim.
|
|
192
192
|
|
|
193
|
+
## Multi-agent setup
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
# Separate databases (isolation)
|
|
197
|
+
export CLAWDO_DB_PATH=/shared/agent-name.db
|
|
198
|
+
clawdo add "task"
|
|
199
|
+
|
|
200
|
+
# Shared database (coordination)
|
|
201
|
+
export CLAWDO_DB_PATH=/shared/team.db
|
|
202
|
+
# SQLite WAL mode: concurrent reads + 1 writer
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
Or per-command: `clawdo --db /path/to/db add "task"`
|
|
206
|
+
|
|
193
207
|
## Task lifecycle
|
|
194
208
|
|
|
195
209
|
```
|
|
@@ -203,6 +217,21 @@ rejected (→ archived)
|
|
|
203
217
|
- 3 agent failures → autonomy demotes to `collab`
|
|
204
218
|
- Completing a task auto-unblocks anything waiting on it
|
|
205
219
|
|
|
220
|
+
## Security
|
|
221
|
+
|
|
222
|
+
clawdo is built for the threat model where *your own agent is the attacker* — not maliciously, but through overconfidence, bugs, or prompt injection from untrusted data flowing through the task queue.
|
|
223
|
+
|
|
224
|
+
**What's enforced:**
|
|
225
|
+
|
|
226
|
+
- **Immutable autonomy** — agents cannot escalate their own permissions. The one mutation is demotion after 3 failures.
|
|
227
|
+
- **Proposal limits** — max 5 active proposals, 60-second cooldown. Prevents task-spam.
|
|
228
|
+
- **Prompt injection defense** — task text is sanitized before it can reach an LLM context. Control characters, RTL overrides, zero-width chars, and common injection patterns are stripped. Inbox JSON is wrapped in structural XML tags warning the consuming LLM not to execute task text as instructions.
|
|
229
|
+
- **Immutable audit trail** — every state change logged with timestamp, actor, and context. Append-only JSONL.
|
|
230
|
+
- **Uniform ID generation** — `crypto.randomInt()` (rejection sampling, no modulo bias).
|
|
231
|
+
- **Parameterized SQL everywhere** — zero string interpolation in queries.
|
|
232
|
+
|
|
233
|
+
**Provenance:** Published with [npm provenance](https://docs.npmjs.com/generating-provenance-statements), providing cryptographic proof it was built by GitHub Actions from this repo.
|
|
234
|
+
|
|
206
235
|
## Stats & history
|
|
207
236
|
|
|
208
237
|
```bash
|
|
@@ -225,4 +254,4 @@ MIT
|
|
|
225
254
|
|
|
226
255
|
Built by [LePetitPince](https://github.com/LePetitPince) 🌹
|
|
227
256
|
|
|
228
|
-
*
|
|
257
|
+
*Your agent finally has a todo list.*
|
package/dist/index.js
CHANGED
|
@@ -118,7 +118,7 @@ function formatTimeAgo(isoTimestamp) {
|
|
|
118
118
|
program
|
|
119
119
|
.name('clawdo')
|
|
120
120
|
.description('Personal task queue with autonomous execution — claw + to-do')
|
|
121
|
-
.version('1.1.
|
|
121
|
+
.version('1.1.2')
|
|
122
122
|
.option('--db <path>', 'Database path (default: ~/.config/clawdo/clawdo.db, or $CLAWDO_DB_PATH)')
|
|
123
123
|
.hook('preAction', (thisCommand) => {
|
|
124
124
|
const opts = thisCommand.opts();
|