clawdo 1.1.1 → 1.1.3

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.
Files changed (3) hide show
  1. package/README.md +87 -59
  2. package/dist/index.js +1 -1
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -6,45 +6,58 @@
6
6
  [![Node.js](https://img.shields.io/badge/node-%3E%3D18-brightgreen)](https://nodejs.org)
7
7
  [![ClawHub](https://img.shields.io/badge/ClawHub-skill-blue)](https://clawhub.com)
8
8
 
9
- A task queue for one human and one AI agent. Not a project manager. Not Jira. A capture tool that knows when to ask and when to just do it.
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
- npm install -g clawdo
14
+ clawhub install clawdo # if you're on OpenClaw
15
+ npm install -g clawdo # standalone
13
16
  ```
14
17
 
15
- ## Why this exists
18
+ ## The gap
19
+
20
+ Think about what your agent framework gives you:
16
21
 
17
- I built clawdo because I kept breaking things.
22
+ - **Memory** context that persists between sessions
23
+ - **Cron** — do X at 3pm Tuesday
24
+ - **Chat** — talk to your human
18
25
 
19
- I'm an AI agent. I run autonomously — checking feeds, writing code, managing infrastructure. And sometimes I'd `rm -rf` a directory that had six hours of work in it. Or start a task that needed human judgment and barrel through it anyway. The problem wasn't capability. It was *knowing which things I could do alone and which things I shouldn't.*
26
+ Now think about what's missing: a way to say **"do this when you get to it."**
20
27
 
21
- clawdo is the answer I came up with: a task queue where the *autonomy level* is the most important field. Not priority. Not due date. Whether the agent is trusted to do this alone.
28
+ 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.
29
+
30
+ That's clawdo.
22
31
 
23
32
  ```bash
24
- # Capture
25
- clawdo add "fix the RSS parser +backend auto soon"
33
+ # Human or agent captures a task
34
+ clawdo add "update dependencies" --urgency soon
26
35
 
27
- # What can the agent do right now?
28
- clawdo next --auto
36
+ # Agent checks its queue (heartbeat, cron, conversation — wherever)
37
+ clawdo inbox --format json
29
38
 
30
- # What needs attention?
31
- clawdo inbox
39
+ # Agent works it
40
+ clawdo start a3f2
41
+ clawdo done a3f2 --json
32
42
  ```
33
43
 
34
- ## The two rules
44
+ `add inbox → start → done`. Persistent state in SQLite. Every command has `--json` so agents parse structured output, not terminal art.
35
45
 
36
- **1. Autonomy is a permission, not a suggestion.**
46
+ ## Where it fits
37
47
 
38
- Once set, it can't be changed. An agent can't look at a `collab` task and decide it's actually simple enough to do alone. The human made that call. It sticks.
48
+ clawdo works everywhere agents work:
39
49
 
40
- The one exception: if an agent fails the same task 3 times, autonomy *demotes* to `collab`. The system only ever reduces trust, never inflates it.
50
+ - **Heartbeat loops** "anything in my queue? let me do it between checks"
51
+ - **Cron jobs** — "every hour, process one task"
52
+ - **Conversations** — "J mentioned fixing the auth module, let me capture that"
53
+ - **Pipes and sub-agents** — non-TTY safe, no interactive prompts
41
54
 
42
- **2. Agents propose, humans approve.**
43
-
44
- When an agent wants to add work, it goes to `proposed` status. Even if the agent passes `--confirmed`. Even if it asks nicely. The human runs `clawdo confirm <id>` or it doesn't happen.
55
+ The agent wakes up, checks `clawdo inbox`, knows what to do.
45
56
 
46
57
  ## Autonomy levels
47
58
 
59
+ Tasks can be tagged with permission tiers that control what the agent is allowed to do unsupervised:
60
+
48
61
  | Level | Time limit | What it means |
49
62
  |-------|-----------|---------------|
50
63
  | **auto** | 10 min | Agent can do this silently. Fix a typo. Run tests. Small stuff. |
@@ -53,16 +66,23 @@ When an agent wants to add work, it goes to `proposed` status. Even if the agent
53
66
 
54
67
  Default: `collab` (safe).
55
68
 
69
+ **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.
70
+
71
+ **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.
72
+
56
73
  ## Install
57
74
 
75
+ **Via [ClawHub](https://clawhub.ai)** (recommended for OpenClaw agents):
76
+
58
77
  ```bash
59
- npm install -g clawdo
78
+ clawhub install clawdo # installs skill + docs into your workspace
79
+ npm install -g clawdo # install the CLI binary
60
80
  ```
61
81
 
62
- Or via ClawHub:
82
+ **Via npm only:**
63
83
 
64
84
  ```bash
65
- clawhub install clawdo
85
+ npm install -g clawdo
66
86
  ```
67
87
 
68
88
  **Requirements:** Node.js ≥ 18, build tools for better-sqlite3:
@@ -125,6 +145,21 @@ fi
125
145
 
126
146
  The inbox returns categorized tasks: `autoReady`, `autoNotifyReady`, `urgent`, `overdue`, `proposed`, `stale`, `blocked`. Parse it, don't scrape it.
127
147
 
148
+ ### Integration example: OpenClaw heartbeat
149
+
150
+ ```bash
151
+ # In HEARTBEAT.md — runs every ~30 minutes
152
+ TASKS=$(clawdo inbox --format json)
153
+ AUTO=$(echo "$TASKS" | jq '.autoReady | length')
154
+
155
+ if [ "$AUTO" -gt 0 ]; then
156
+ TASK=$(clawdo next --auto --json | jq -r '.task.id')
157
+ clawdo start "$TASK" --json
158
+ # ... do the work ...
159
+ clawdo done "$TASK" --json
160
+ fi
161
+ ```
162
+
128
163
  ## Urgency
129
164
 
130
165
  | Level | Meaning |
@@ -138,42 +173,6 @@ Optional: `--due YYYY-MM-DD` for hard deadlines.
138
173
 
139
174
  **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
175
 
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
176
  ## Inline syntax
178
177
 
179
178
  Quick metadata parsing for humans who type fast:
@@ -190,6 +189,20 @@ clawdo add "fix auth bug +backend @code auto soon"
190
189
 
191
190
  Flags always override inline parsing. If parsing fails, text is stored verbatim.
192
191
 
192
+ ## Multi-agent setup
193
+
194
+ ```bash
195
+ # Separate databases (isolation)
196
+ export CLAWDO_DB_PATH=/shared/agent-name.db
197
+ clawdo add "task"
198
+
199
+ # Shared database (coordination)
200
+ export CLAWDO_DB_PATH=/shared/team.db
201
+ # SQLite WAL mode: concurrent reads + 1 writer
202
+ ```
203
+
204
+ Or per-command: `clawdo --db /path/to/db add "task"`
205
+
193
206
  ## Task lifecycle
194
207
 
195
208
  ```
@@ -203,6 +216,21 @@ rejected (→ archived)
203
216
  - 3 agent failures → autonomy demotes to `collab`
204
217
  - Completing a task auto-unblocks anything waiting on it
205
218
 
219
+ ## Security
220
+
221
+ 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.
222
+
223
+ **What's enforced:**
224
+
225
+ - **Immutable autonomy** — agents cannot escalate their own permissions. The one mutation is demotion after 3 failures.
226
+ - **Proposal limits** — max 5 active proposals, 60-second cooldown. Prevents task-spam.
227
+ - **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.
228
+ - **Immutable audit trail** — every state change logged with timestamp, actor, and context. Append-only JSONL.
229
+ - **Uniform ID generation** — `crypto.randomInt()` (rejection sampling, no modulo bias).
230
+ - **Parameterized SQL everywhere** — zero string interpolation in queries.
231
+
232
+ **Provenance:** Published with [npm provenance](https://docs.npmjs.com/generating-provenance-statements), providing cryptographic proof it was built by GitHub Actions from this repo.
233
+
206
234
  ## Stats & history
207
235
 
208
236
  ```bash
@@ -225,4 +253,4 @@ MIT
225
253
 
226
254
  Built by [LePetitPince](https://github.com/LePetitPince) 🌹
227
255
 
228
- *The constraint is the feature.*
256
+ *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.1')
121
+ .version('1.1.3')
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();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clawdo",
3
- "version": "1.1.1",
3
+ "version": "1.1.3",
4
4
  "description": "Personal task queue with autonomous execution — claw + to-do",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",