claudelink 1.1.0 → 1.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/README.md +52 -19
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -147,38 +147,71 @@ Read the bulletin board.
|
|
|
147
147
|
## CLI Commands
|
|
148
148
|
|
|
149
149
|
```bash
|
|
150
|
-
claudelink init
|
|
151
|
-
claudelink init --global
|
|
152
|
-
claudelink status
|
|
153
|
-
claudelink ui
|
|
154
|
-
claudelink ui --stop
|
|
155
|
-
claudelink
|
|
156
|
-
claudelink
|
|
150
|
+
claudelink init # Configure for current project
|
|
151
|
+
claudelink init --global # Configure globally
|
|
152
|
+
claudelink status # Show registered agents and message stats
|
|
153
|
+
claudelink ui # Open the Command Center in your browser
|
|
154
|
+
claudelink ui --stop # Stop the Command Center
|
|
155
|
+
claudelink install-hooks # Install autonomous-reply hooks (project)
|
|
156
|
+
claudelink install-hooks --global # Install hooks in ~/.claude/settings.json
|
|
157
|
+
claudelink install-hooks --uninstall # Remove ClaudeLink hooks
|
|
158
|
+
claudelink reset # Clear all data (fresh start)
|
|
159
|
+
claudelink help # Show help
|
|
157
160
|
```
|
|
158
161
|
|
|
159
162
|
## Autonomous Replies
|
|
160
163
|
|
|
161
|
-
ClaudeLink
|
|
164
|
+
ClaudeLink eliminates the "go to every terminal and type *check inbox*" loop with two complementary mechanisms: an **auto-nudge scheduler** for the periodic / idle case, and a **Stop hook** for low-latency turn-end processing. Both feed messages into the recipient agent through Claude's own `read_inbox` MCP tool, so Claude has full agency over whether and how to reply.
|
|
162
165
|
|
|
163
|
-
###
|
|
166
|
+
### Auto-nudge scheduler (primary)
|
|
164
167
|
|
|
165
|
-
The
|
|
168
|
+
The Command Center runs a periodic scheduler that types `check for updates` into each registered agent's terminal whenever its inbox has unread messages. Configure it directly from the Command Center UI:
|
|
166
169
|
|
|
167
|
-
|
|
170
|
+
- **On/off toggle** — the "Auto-nudge" panel (between Health and Recent messages)
|
|
171
|
+
- **Interval** — minutes between ticks (default 5, clamped to 1–120)
|
|
168
172
|
|
|
169
|
-
|
|
173
|
+
The scheduler is **smart**: the SQL trigger only nudges terminals that actually have unread mail, so empty inboxes don't burn Claude turns. Per-terminal-app dispatch:
|
|
170
174
|
|
|
171
|
-
|
|
175
|
+
- **tmux** → `tmux send-keys` (no permissions needed)
|
|
176
|
+
- **iTerm2** → `osascript` matched by tty (no Accessibility prompt)
|
|
177
|
+
- **Apple Terminal** → currently unsupported (would need Accessibility permission; logged as skipped)
|
|
172
178
|
|
|
173
|
-
|
|
174
|
-
- **Cooldown** — minimum seconds between auto-fires per terminal (`CLAUDELINK_COOLDOWN_S`, default 30).
|
|
175
|
-
- **Chain cap** — max `parent_id` chain depth before a message stops triggering auto-fires (`CLAUDELINK_CHAIN_CAP`, default 8).
|
|
179
|
+
When the keystroke arrives, the existing UserPromptSubmit hook fires, injects "you have N unread, call read_inbox" as `additionalContext`, and Claude reads the inbox via its own tool call. This routes through Claude's normal trusted-input path, so the prompt-injection defense never trips.
|
|
176
180
|
|
|
177
|
-
|
|
181
|
+
Settings persist at `~/.claudelink/scheduler.json`. Audit log at `~/.claudelink/scheduler.log`.
|
|
178
182
|
|
|
179
|
-
|
|
183
|
+
### Stop hook (supplementary low-latency path)
|
|
180
184
|
|
|
181
|
-
|
|
185
|
+
For the case where an agent has *just* finished a turn and there's a message in its inbox, a Stop hook can fire immediately instead of waiting for the next scheduler tick. Install with:
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
claudelink install-hooks # project-scoped — writes ./.claude/settings.json
|
|
189
|
+
claudelink install-hooks --global # writes ~/.claude/settings.json
|
|
190
|
+
claudelink install-hooks --uninstall # clean rollback
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
The hook emits `{"decision": "block", "reason": "..."}` directing Claude to call `read_inbox`. Three guards prevent runaway loops:
|
|
194
|
+
|
|
195
|
+
- **Hard cap** — max consecutive auto-fires per terminal without a human prompt (`CLAUDELINK_HARD_CAP`, default 5)
|
|
196
|
+
- **Cooldown** — minimum seconds between auto-fires per terminal (`CLAUDELINK_COOLDOWN_S`, default 30)
|
|
197
|
+
- **Chain cap** — max `parent_id` chain depth before a message stops triggering auto-fires (`CLAUDELINK_CHAIN_CAP`, default 8)
|
|
198
|
+
|
|
199
|
+
Set any to `0` to disable that specific guard. Every Stop hook decision logs to `~/.claudelink/auto-fire.log`.
|
|
200
|
+
|
|
201
|
+
**Honest note on Claude's safety boundary:** Claude Code's prompt-injection defense correctly flags "external content steering outbound tool calls" as adversarial. In practice this means the Stop hook reliably triggers an autonomous inbox read, but Claude may decline to send the outbound reply autonomously — particularly when the reply would be unrelated to the user's most recent prompt. This is responsible safety behavior, not a bug. The auto-nudge scheduler avoids this entirely because the keystroke path is indistinguishable from the user typing by hand.
|
|
202
|
+
|
|
203
|
+
### Per-agent opt-out (advisor pattern)
|
|
204
|
+
|
|
205
|
+
Register with `autonomousReply: false` for terminals that should receive but never auto-process messages:
|
|
206
|
+
|
|
207
|
+
- The Stop hook reads the inbox (so messages don't pile up) but never emits a continuation
|
|
208
|
+
- The auto-nudge scheduler skips advisor agents entirely
|
|
209
|
+
|
|
210
|
+
Use this for strategy/oversight terminals where you want visibility without auto-replies.
|
|
211
|
+
|
|
212
|
+
### Per-message opt-out
|
|
213
|
+
|
|
214
|
+
Send with `expectsReply: false` for FYI / informational pings. The recipient still reads them but the Stop hook treats them as ineligible for auto-fire (the scheduler already filters by message presence regardless of `expects_reply`, so FYIs trigger nudges too).
|
|
182
215
|
|
|
183
216
|
### Desktop notifications
|
|
184
217
|
|