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}-2development
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.
testing
Translate one English blog post into multiple target languages via parallel sub-agents, preserving frontmatter conventions, hero image, and brand voice. Use when the user shares a published English post URL or markdown path and says 'translate it', 'add other languages', 'publish in DE/ES/RU/UK', 'translate to 5 languages', or asks for localized versions of a specific post.
development
Build a complete press kit for an event, product launch, or campaign — in multiple languages — and publish it as a shareable Google Drive folder ready to send to journalists, partners, or a delegate. Produces press releases (typically DE/EN/ES, or configurable), uploads press photos and flyers, creates an Overview document for at-a-glance briefing, and creates a Handover document with pending tasks, contacts, risks, and decisions so press distribution can be delegated. Use when the user says 'I need a press release', 'create a press kit', 'press release in X languages', 'set up a Drive folder for press', 'handover doc for someone else to run press', or has an upcoming announcement that needs to be sent to media. Trigger generously: even partial requests (just a press release, just a flyer folder) typically evolve into the full kit.
development
Track ticket sales for a live event (concert, festival, conference, workshop) with daily snapshots, generate a burndown chart comparing actual sales to ideal-linear targets and tier-cumulative milestones, and report whether the event is on pace. Use when the user asks how sales are going, wants to know if their event will sell out, asks for a daily sales report, wants to set up sales tracking for an upcoming event, or asks about ticket pace / velocity / projection. Trigger generously: phrases like 'how is concert sales going', 'burndown for my event', 'are we going to sell out', 'sales velocity', 'daily ticket chart', 'how many tickets do we need to sell', or any case where the user has a ticketed event with a fixed sales window and wants visibility on pacing.