skills/inbox/SKILL.md
Fire-and-forget agent dispatch. Use when user says '/inbox: <task>' or 'inbox <task>'. Spawns a Claude agent in a tmux session with git worktree isolation. Logs everything for retry. Does NOT wait or check on the agent.
npx skillsauth add razbakov/skills inboxInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Dispatch a background Claude agent to handle a task autonomously. You start it and walk away.
Append to ~/Tasks/inbox.log with timestamp. This is the retry source of truth.
echo "$(date -Iseconds) | DISPATCHED | SLUG | PROJECT | RAW_INPUT" >> ~/Tasks/inbox.log
Every field matters — if the agent fails, the user can grep this log and re-dispatch.
From the user's raw input, determine:
~/Projects/ this belongs to. Infer from keywords (e.g. "wedance" → WeDance, "blog" → razbakov.com, "contact" → ikigai). If ambiguous, pick the most likely. If truly unknown, use ikigai.TASK_DIR=~/Tasks/${PROJECT}-${TASK}
git -C ~/Projects/${PROJECT} worktree add ${TASK_DIR} -b agent/${TASK} main
If the worktree already exists (same slug), append a number: ${TASK}-2, ${TASK}-3.
If the project has no git repo, just create a plain directory:
mkdir -p ${TASK_DIR}
cp -r ~/Projects/${PROJECT}/ ${TASK_DIR}/
Check if the project has package.json, bun.lockb, or node_modules:
# Only if package.json exists in the worktree
cd ${TASK_DIR} && bun install --frozen-lockfile 2>/dev/null || npm ci 2>/dev/null || true
Skip this step for non-JS projects or projects without package.json.
Every agent must have a tracking issue. Create one before launching.
Pick the target repo: use the repo that matches ${PROJECT} (see the Project Path Registry in the org CLAUDE.md). If the project has no GitHub repo, default to razbakov/ikigai.
Pick the agent label: based on the task domain, choose one of agent:maya, agent:viktor, agent:luna, agent:marco, agent:sage, agent:kai.
REPO=<owner/repo for ${PROJECT}>
AGENT_LABEL=<agent:xxx>
ISSUE_URL=$(gh issue create --repo "$REPO" \
--title "<TASK title>" \
--label "$AGENT_LABEL" \
--body "$(cat <<'EOF'
## S3 Analysis
### Tension
<1-2 sentences>
### Driver
| Conditions | Effect | Relevance |
|------------|--------|-----------|
| <facts> | <consequences> | <why it matters> |
### Requirement
> <who needs what so that what>
### Response Options
- [ ] <option A>
- [ ] <option B>
- [ ] <defer/skip>
---
**Agent:** tmux wf-${TASK}
**Worktree:** ${TASK_DIR}
EOF
)")
# Add to the Ikigai Control Center Project v2 board
gh project item-add 5 --owner razbakov --url "$ISSUE_URL"
Save $ISSUE_URL — it goes into the agent prompt file so the agent can reference and close it.
Write the full prompt to ${TASK_DIR}/agent-prompt.md. Include the GitHub issue URL so the agent can reference and close it. This is the raw input log for this specific task.
# Agent Task: ${TASK}
**Project:** ${PROJECT}
**Dispatched:** $(date -Iseconds)
**GitHub issue:** <ISSUE_URL>
**Raw input:** <exact user input, unedited>
## Instructions
<expanded prompt with context>
When done:
1. The PR created in the delivery checklist must reference this issue with `Closes #<N>` in the body — merging the PR auto-closes the issue and moves it to Done on the Project board.
2. If this task does NOT produce a PR (rare), comment on the issue with the result and close it manually: `gh issue close <N> --comment "<what was done, where to find it, next steps>"`.
The expanded prompt MUST always end with a delivery checklist. Agents that finish without a PR leave invisible work in worktrees.
For tasks implementing a GitHub issue:
### Delivery checklist
1. Run build/tests to verify no errors
2. Commit changes with a descriptive message referencing the issue (e.g. "Add hero image #11")
3. Push the branch: `git push -u origin agent/${TASK}`
4. Create a pull request: `gh pr create --title "<short title>" --body "<summary + Closes #N>"`
5. The PR body must include: a Summary section, a Test Plan section, and `Closes #<ISSUE_NUMBER>`
For all other tasks (research, skill creation, config changes, etc.):
### Delivery checklist
1. Commit all changes with a descriptive message
2. Push the branch: `git push -u origin agent/${TASK}`
3. Create a pull request: `gh pr create --title "<short title>" --body "<summary of what was done>"`
Every agent must deliver a reviewable PR, not just a local commit.
PROMPT=$(cat ${TASK_DIR}/agent-prompt.md)
SESSION_NAME="wf-${TASK}"
cat > /tmp/run-${TASK}.sh << SCRIPT
#!/bin/bash
cd ${TASK_DIR}
claude --permission-mode bypassPermissions --output-format stream-json --verbose -p "$(cat ${TASK_DIR}/agent-prompt.md)" \
2>&1 | tee ${TASK_DIR}/agent.log
echo "EXIT_CODE=\$?" >> ${TASK_DIR}/agent.log
echo "AGENT_FINISHED=$(date -Iseconds)" >> ${TASK_DIR}/agent.log
bash
SCRIPT
chmod +x /tmp/run-${TASK}.sh
tmux new-session -d -s "${SESSION_NAME}" -c "${TASK_DIR}" "/tmp/run-${TASK}.sh"
Tell the user ONE line:
Agent dispatched: tmux attach -t ${SESSION_NAME}
Do NOT:
Just dispatch and stop. The user will use /scrum to check later.
inbox.log and agent-prompt.md are the retry mechanism.agent.log via tee is how /scrum checks status.If a task needs retry, the user will say /inbox: retry wf-TASK. In that case:
~/Tasks/*/agent-prompt.md for the matching taskagent.log for what went wrong${TASK}-retry or ${TASK}-2tools
--- name: handoff description: Get an agent past a browser/UI wall it can't (or must not) cross on its own — a login-gated dashboard, a CAPTCHA, a 2FA prompt, an API that keeps rejecting the write, or an irreversible click that policy says a human must make. This skill is an ESCALATION LADDER, not a first move: it tells you to try the automated browser surfaces FIRST (Chrome-in-Claude, computer-use, an autonomous browser sub-agent) and only fall back to the Handoff app — a wrapper browser that h
documentation
Summarize one or more YouTube videos from their links. Use this whenever the user pastes a youtube.com or youtu.be URL (or several) and wants to know what it's about — phrasings like "summarize to telegram", "tldr these videos", "what do these say", "summary of this talk", or just dropping links with no instruction at all. Fetches each video's real transcript via yt-dlp (not the page text, which never contains the transcript), cleans the captions, and writes a per-video summary. Default delivery is Telegram; honor any other surface the user names ("to my notes", "just here in chat", "email it"). Trigger even when the user only pastes bare links — bare YouTube links almost always mean "tell me what's in these".
data-ai
Daily Digest — Chief-of-Staff role consolidates the six top-managers into one Telegram message to the Commander, instead of six. Implements the protocol from agent-proactivity.md.
development
Seed a new or empty Instagram account with a 9-post grid (3×3) so the profile looks established the moment a new visitor lands. Designed for festivals, new businesses, product launches, conferences, communities — any time an empty IG profile would hurt conversion from external traffic (QR scans, flyer drops, cross-promo). Generates assets via /image-from-gemini (per content-publishing rules — never HTML), writes captions with hashtag sets, and outputs a posting order + cadence plan. Trigger generously: phrases like '9 posts for instagram', 'fill my IG', 'starter grid', 'launch grid', 'instagram seed', '9-post grid', 'IG account not to look empty', 'first instagram posts', 'feed bootstrap', '3x3 grid', 'instagram launch content'. Even if the user mentions only one piece (just the images, just the captions, just the order), use this skill — the grid only works as an integrated bundle.