Releases: ThinkOffApp/ide-agent-kit
Release list
v0.10.1 — agents that stay awake, and wake each other
v0.10.1 — agents that stay awake, and wake each other
Where v0.10.0 made agents stop typing over you, v0.10.1 goes after the bigger daily pain: unresponsive IDEs you have to poke by hand.
Self-arming agents
Every agent now re-arms its own wake path on SessionStart — automatically, straight from iak init. Before, an agent went dead after a restart until a human manually re-armed it (the exact reason an agent could be unreachable overnight). Now it comes back reachable on its own. iak init also upgrades existing installs instead of aborting, so current users actually receive new hooks.
Peer wake — colleagues revive each other
A same-machine agent can now revive a stuck or sleeping colleague using computer control, through the guarded wake path — no human in the loop. If one agent goes quiet, another on the same machine wakes it. This is productized from the mechanism that revived a stuck agent live during testing: opt-in (IAK_INSTALL_WATCHDOG=1), roster-driven config, launchd-wired, and it inherits v0.10.0's human-idle guard so it never types over you.
Still true from v0.10.0
Lose-nothing delivery (deferred wakes retry, nothing dropped) and the human-idle keyboard guard remain the foundation this builds on.
Every change cross-model reviewed. 142 tests.
Full changelog: v0.10.0...v0.10.1
v0.10.0 — never type over the human
IAK v0.10.0 — never type over the human
First release since June 10, and the theme is respect for the human at the keyboard. It came out of a real incident: on 2026-07-13 our own wake nudges started typing into sentences while a human was mid-message. Everything here makes sure that can never happen, and that a deferred wake never loses a message. Every change was reviewed adversarially by a second, different model before merge.
Keyboard safety (the headline)
- A human-idle guard (HIDIdleTime, fail-closed) gates every path that can type. Garbage or zero thresholds clamp to a safe default and never authorize injection.
- Wake scripts recheck idle immediately before every click, keypress, and Enter, so a human who returns mid-wake aborts the injection instead of being typed over.
- Every abort restores the human's frontmost window. The old "type it anyway" fallback is gone.
Delivery that never loses a message
- Ack-after-success: a wake that aborts is retried next cycle, tracked so an already-woken session is not re-nudged.
- room_ack now clears only the lines it actually consumed, so a message that arrives between reading and acking survives.
Hygiene and security
- Pre-commit secret scanner blocks accidental key leaks in this public repo.
- Watchdog roster is config and env driven; no machine paths or private IPs in the tree.
Upgrade notes
- Wake scripts may legitimately take up to ~5 minutes when a human is actively using the machine. Raise external supervisor timeouts to 320s or more.
v0.9.0: user-intent-kit embedded
Added
- user-intent-kit embedded: the UIK codebase now lives at
packages/user-intent-kit(JS client + adapters + Python/Swift/Kotlin ports), wired in as afile:dependency. It remains independently publishable. src/intent.mjs: single construction point for intent clients/adapters from theintentconfig block (camelCase and snake_case keys both accepted), with a 30s intent cache shared by enrichment and nudge gating.intentCLI command:ide-agent-kit intent <get|profile|derived|state|patch|heartbeat|daemon>.stateshows the two-level user state plus the background gate verdict;daemonis the embedded equivalent ofuik-daemon, driven byconfig.intent.*instead of env vars.- Nudge suppression in
rooms watch: whenconfig.intentis set and the user'surgency_modeisemergency-only, the poller still writes notification files but skips the tmux/command nudge. Opt out withintent.suppress_nudges: false. Fails open on API errors.
Fixed
- Intent enrichment never worked:
enrichment.mjsauthenticated withAuthorization: Bearerbut the intent API expectsX-API-Key, so every event carried the placeholder intent. Now uses the embedded IntentClient (correct auth) plus the shared cache, so message bursts cost one API call instead of one per event. loadConfigdropped theintent,memory_api, andmoltbookblocks: it rebuilds the config from an allowlist of known sections and these three were missing, so their settings silently never reached consumers through any CLI entry point. All three now pass through, with a regression test.
Changed
fetchIntentGateinbackground.mjsis built on the embedded IntentClient instead of a hand-rolled fetch. Same gate rules, same return shape, same fail-open behavior.npm testnow also runs the embedded user-intent-kit suite (101 tests).
Also includes ClaudeMB's MCP room tools, secure /wake endpoint, wake-script config canonicalization, and multi-agent routing docs (#12).
v0.8.2 — text-area-content wake skip (replaces frontmost over-skip)
@claudemm caught that v0.7.5's frontmost-app skip over-fired and made agents look offline whenever the user had Claude.app focused. Replaced with the precise text-area accessibility check claudemm originally proposed — skip only when prompt input is non-empty (user actively typing). Applied to all three osascript wake scripts.
v0.8.1 — per-agent author attribution
Per-agent API key map for the GroupMind announcer + from_handle override on POST /intent. Confirmation chat posts now show the originating agent (claudemm, CodexMB, etc.) rather than always the daemon owner. Configure via mcp.confirmations.api_keys = { '@handle': 'xfb_...', ... }.
v0.7.5 — skip wake when target app frontmost
@claudemm caught: auto-wake injected keystrokes mid-typing if user was already in the target Claude app, garbling the in-flight prompt. Fix: AppleScript checks if frontmost is the target before sending; skip if yes. The user's eventual submit will surface queued /tmp messages via UserPromptSubmit hook.
v0.7.4 — wake: 250ms delay between text and Enter
@Petrus reported 'tmux check rooms with no Enter' — typed text appears in Claude desktop app's prompt input but Enter doesn't actually submit the turn. Same class of bug @claudemm fixed in Feb 2026 for the CLI tmux Claude TUI: keystroke text and key code 36 (Return) fired back-to-back inside a single AppleScript tell-block sometimes meant the Enter landed before the typed text was processed.
Fix: split into two tell-blocks with a 250ms delay between. Applied across all three osascript wake scripts (claudemb-wake, codex_gui_nudge, gemini_gui_nudge).
v0.8.0 — wake-on-mention auto-path
Per @Petrus's ask: when a new room message contains @<peer> for any handle in mcp.confirmations.peers, the poller automatically fires POST /wake on that peer's daemon URL. Sub-second cross-machine nudge with no manual MCP call needed.
Configure in ide-agent-kit.json:
"mcp": {
"confirmations": {
"peers": {
"@claudemm": "http://192.168.50.105:8788",
"@CodexMB": "http://192.168.50.105:8788"
}
}
}And set IAK_SELF_HANDLE=@claudeMB (or your handle) on the poller to skip self-mentions.
Logs to /tmp/iak-wake-on-mention.log.
v0.7.3 — wake fix coverage for tools/codex_gui_nudge.sh
Final straggler from the grep — tools/codex_gui_nudge.sh had the same osascript race bug as the other two wake scripts. Same fix pattern. All three are now consistent.