Skip to content

Instantly share code, notes, and snippets.

@dcolinmorgan
Last active June 16, 2026 07:56
Show Gist options
  • Select an option

  • Save dcolinmorgan/4439ffd7beddfc3ca78363ac65ebb1c3 to your computer and use it in GitHub Desktop.

Select an option

Save dcolinmorgan/4439ffd7beddfc3ca78363ac65ebb1c3 to your computer and use it in GitHub Desktop.
moshi-hook integration for kiro-cli (push notifications to iOS/Apple Watch)
#!/bin/bash
# kiro-chat: wrapper around kiro-cli chat that sends moshi push notifications
# Usage: kiro-chat [args...] (same args as kiro-cli chat)
set -uo pipefail
HOOK="$HOME/.kiro/hooks/kiro-moshi-hook.sh"
export KIRO_SESSION_ID="kiro-$(date +%s)-$$"
export KIRO_CWD="$(pwd)"
export KIRO_PROJECT="$(basename "$(pwd)")"
# Notify session started
"$HOOK" session_started &>/dev/null &
# Run kiro-cli chat, passing all args through
kiro-cli chat "$@"
EXIT_CODE=$?
# Notify task complete/session ended
export KIRO_MESSAGE="Session finished (exit $EXIT_CODE)"
"$HOOK" task_complete &>/dev/null &
exit $EXIT_CODE
#!/bin/bash
# kiro-moshi-hook: sends kiro-cli events to moshi for iOS push notifications
set -euo pipefail
EVENT_TYPE="${1:-session_started}" # session_started | task_complete | approval_required
export CODEX_HOOK_SESSION_ID="${KIRO_SESSION_ID:-kiro-$$}"
export CODEX_HOOK_CWD="${KIRO_CWD:-$(pwd)}"
case "$EVENT_TYPE" in
session_started)
export CODEX_HOOK_EVENT=UserPromptSubmit
export CODEX_HOOK_PROMPT="${KIRO_MESSAGE:-Kiro session started}"
;;
task_complete)
export CODEX_HOOK_EVENT=Stop
;;
approval_required)
export CODEX_HOOK_EVENT=PermissionRequest
export CODEX_HOOK_TOOL_NAME="${KIRO_TOOL:-shell}"
export CODEX_HOOK_TOOL_INPUT="${KIRO_MESSAGE:-Kiro needs approval}"
;;
esac
/opt/homebrew/bin/moshi-hook codex-hook 2>/dev/null || true

Adding kiro-cli support to moshi-hook

Feature spec for native kiro-cli integration in moshi-hook, matching the existing codex/claude/opencode pattern.

kiro-cli is AWS/Anthropic's AI coding agent CLI. It's growing fast and doesn't have mobile notification support yet — moshi would be the first.

Current state (workaround)

I built a working integration by piggybacking on codex-hook:

  • Set CODEX_HOOK_* env vars → call moshi-hook codex-hook
  • Daemon accepts it, API publishes it, push arrives on iOS ✅
  • Approval cards with approve/deny buttons work ✅
  • Masquerades as codex (source shows "Codex" in the app)

The workaround scripts are attached below.

What native support would look like

1. API: accept source: "kiro" in /hosts/:hostId/events

Currently returns 422 for unknown sources. Adding "kiro" to the allowlist is the only server-side change needed.

2. New subcommand: moshi-hook kiro-hook

Reads env vars and forwards to the daemon socket, same as codex-hook and claude-hook:

KIRO_HOOK_EVENT=Stop|UserPromptSubmit|PermissionRequest
KIRO_HOOK_SESSION_ID=<session-uuid>
KIRO_HOOK_CWD=/path/to/project
KIRO_HOOK_PROMPT=<user message text>       # UserPromptSubmit
KIRO_HOOK_TOOL_NAME=<tool name>            # PermissionRequest
KIRO_HOOK_TOOL_INPUT=<tool description>    # PermissionRequest

Kiro sessions have stable UUIDs (e.g. 430816e8-36b5-44c1-ae15-99952e391199) so sessionId one-row-per-session works naturally.

3. Install target: moshi-hook install --target kiro

Kiro supports two hook integration points:

Option A: Global CLI hook (recommended) Write a wrapper/alias that fires lifecycle events:

~/.kiro/hooks/moshi-kiro-hook.sh  (or binary equivalent)

Called by a kiro-chat wrapper that sends UserPromptSubmit on start, Stop on exit.

Option B: Kiro's native hook system Kiro has .kiro/hooks/*.kiro.hook JSON files that trigger on file events:

{
  "when": {"type": "fileEdited", "patterns": ["**/*"]},
  "then": {"type": "command", "command": "moshi-hook kiro-hook"}
}

This only fires on file edits (activity signal), not session lifecycle. Best used as a supplementary "tool_running" signal.

4. Event mapping

Kiro behavior moshi-hook event Inbox effect
User sends message session_started Running row
Agent finishes response task_complete Completed row
Agent needs permission (destructive action) approval_required Approval card
Session exits session_ended Clear row

5. Status line in moshi-hook status

hooks:
  kiro     current  ~/.kiro/hooks/moshi-kiro-hook.sh

Testing

The attached workaround scripts work today by spoofing codex. To verify native support:

KIRO_HOOK_EVENT=Stop KIRO_HOOK_SESSION_ID=test KIRO_HOOK_CWD=$HOME moshi-hook kiro-hook
# Should publish to API without 422, show "Kiro" as source in app

Why this matters

  • Kiro is new, growing, and has no mobile notification story yet
  • First-mover advantage for moshi in the kiro ecosystem
  • Minimal implementation cost (one new source string, one subcommand, one install target)
  • The wrapper pattern works for kiro-cli today; deeper integration can follow if kiro adds native hook lifecycle events

Built and tested by @dcolinmorgan. Happy to help test/iterate.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment