New /new-setup-2 skill, invoked when the user picks "continue setup"
at the end of /new-setup. Linear rollthrough; every step skippable:
1. What should the agent call you?
2. What's your agent's name?
3. Messaging channel (plain list, no AskUserQuestion) — invokes the
matching /add-<channel> skill, captures platform IDs from its
output, then wires via init-first-agent.ts with --no-cli-bonus.
On success, emits the encouragement line verbatim.
4. Quality-of-life picks (dashboard, compact, karpathy-wiki, plus
macos-statusbar only when the probe reports PLATFORM=darwin).
5. Wrap-up.
scripts/init-first-agent.ts gains a --no-cli-bonus flag. In DM mode,
the bonus "wire new agent to CLI" call is skipped when set. Used by
/new-setup-2 so the throwaway CLI-only agent from /new-setup retains
clean single-agent ownership of CLI routing instead of being duelled
by the real agent on the same channel.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5.3 KiB
name, description, allowed-tools
| name | description | allowed-tools |
|---|---|---|
| new-setup-2 | Follow-on to /new-setup. Captures the operator and agent names, wires a real messaging channel, and adds quality-of-life extras. Linear rollthrough; every step is skippable. Invoked when the user picks "continue setup" at the end of /new-setup. | Bash(bash setup/probe.sh) Bash(pnpm exec tsx setup/index.ts *) Bash(pnpm exec tsx scripts/init-first-agent.ts *) |
NanoClaw phase-2 setup
Runs after /new-setup. At this point the host is running and a throwaway CLI-only agent exists (used during /new-setup for the end-to-end ping check — inferred name, not user-facing). This flow creates the real agent and wires it to a messaging channel.
Linear — one step at a time. Every step is skippable: if the user says "skip", "not now", "later", or similar, move on without complaint. If they say they're done at any point, stop cleanly — don't push the remaining steps.
Before each step, narrate in your own words what's about to happen — one short, friendly sentence, no jargon. Match the tone of /new-setup.
Current state
!bash setup/probe.sh
Parse the probe block above for INFERRED_DISPLAY_NAME and PLATFORM — referenced below.
Steps
1. What should the agent call you?
Plain-prose ask (do not use AskUserQuestion):
What should your agent call you? (Default:
<INFERRED_DISPLAY_NAME>)
Capture the answer into a local variable OPERATOR_NAME. Don't persist yet — this value is consumed by step 3's channel wiring. If the user skips or confirms the default, set OPERATOR_NAME = INFERRED_DISPLAY_NAME.
2. What's your agent's name?
Plain-prose ask:
What would you like to call your agent? (Default:
<OPERATOR_NAME>)
Capture as AGENT_NAME. If skipped, set AGENT_NAME = OPERATOR_NAME. Nothing persisted yet.
3. Pick a messaging channel
Print the list as plain prose. Do not use AskUserQuestion for this step — just the list, then wait for the user's reply:
Which messaging channel should I wire your agent to?
- WhatsApp (native) —
/add-whatsapp- WhatsApp Cloud (Meta official) —
/add-whatsapp-cloud- Telegram —
/add-telegram- Slack —
/add-slack- Discord —
/add-discord- iMessage —
/add-imessage- Teams —
/add-teams- Matrix —
/add-matrix- Google Chat —
/add-gchat- Linear —
/add-linear- GitHub —
/add-github- Webex —
/add-webex- Resend (email) —
/add-resend- Emacs —
/add-emacsOr say "skip" to leave this for later.
When the user picks one:
-
Install the adapter. Invoke the matching
/add-<channel>skill via the Skill tool. It copies the adapter source in from thechannelsbranch, registers it, installs the pinned npm package, and handles credentials. Some channels (e.g. Telegram) also run a pairing step as part of their flow. -
Capture platform IDs. After the
/add-<channel>skill finishes, you need two values: the operator's user-id on that platform, and the chat/channel platform-id. Each channel surfaces these differently — consult the Channel Info section at the bottom of that skill'sSKILL.mdfor the exact path. For Telegram, for example, thepair-telegramstep emitsPLATFORM_IDandADMIN_USER_IDin a status block once the user sends the 4-digit code. -
Wire the agent. Run
init-first-agent.tsin DM mode with--no-cli-bonus(this keeps the new agent off the CLI messaging group so the pre-existing throwaway agent still owns CLI routing cleanly):pnpm exec tsx scripts/init-first-agent.ts \ --channel <channel> \ --user-id "<platform-user-id>" \ --platform-id "<platform-chat-id>" \ --display-name "<OPERATOR_NAME>" \ --agent-name "<AGENT_NAME>" \ --no-cli-bonus -
Announce. On success, emit the encouragement line verbatim:
Your agent is now available on {channel-name}, you can already start chatting — But I encourage you to continue and finish this setup, we're almost done!
Substitute
{channel-name}with the friendly name (e.g. "Telegram", "WhatsApp", "Slack").
If the user skipped, move on to step 4.
4. Quality of life
Optional polish. Print the list; the user may pick zero, one, or several — invoke each chosen skill in sequence:
Want to add any of these? Pick any that sound useful — or skip:
/add-dashboard— browser dashboard showing agent activity/add-compact—/compactslash command for managing long sessions/add-karpathy-llm-wiki— persistent knowledge-base memory for the agent
If the probe reports PLATFORM=darwin, also offer:
/add-macos-statusbar— macOS menu bar indicator with Start/Stop/Restart controls
Do not list /add-macos-statusbar on Linux. If the user skips everything, just move on.
5. Done
Short wrap-up:
Setup complete. You can chat with your agent on {channel-name} — or via CLI with
pnpm run chat <message>.
Substitute {channel-name} with whatever was wired in step 3. If step 3 was skipped, drop the "on {channel-name} — or" clause entirely so the line just mentions the CLI form.
If anything fails
Same rule as /new-setup: don't bypass errors to keep moving. Read logs/setup.log or logs/nanoclaw.log, diagnose, fix the underlying cause, re-run the failed step.