# Init

> Scaffold a mission-control workspace (filing system, agent playbook, starter voice) into the current directory. Use when the user wants to set up mission-control or turn this project into a texting-agent control room.

- Skill: `1broseidon/init-2` (Agent Skill, multi-file: 8 files)
- Install (CLI): `npx skillmds@latest add 1broseidon/init-2`
- Raw SKILL.md: https://api.skillmd.com/api/skills/1broseidon/init-2/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: 1broseidon (https://skillmd.com/u/1broseidon)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/1broseidon/init-2

---


# mission-control: init

Scaffold a mission-control workspace into the current working directory from the
canonical template files bundled with this plugin at
`${CLAUDE_PLUGIN_ROOT}/skills/init/templates/`.

<!-- Source of truth for the template contents is templates/mission-control/ in the
     hotline repo. The copies under skills/init/templates/ must stay byte-identical
     to it; verify with: diff -r templates/mission-control plugins/mission-control/skills/init/templates -->

## Step 1: Check for conflicts. Never overwrite.

Check the current directory for each target path below. If a target file already
exists, do NOT write it. Collect every conflict, report the list to the user,
and skip those files. Only create what is missing. An existing `threads/`,
`inbox/`, or `archive/` directory is fine; only same-path files count as
conflicts.

Targets:

- `CLAUDE.md`
- `HOTLINE.md`
- `INDEX.md`
- `README.md`
- `threads/example-thread/README.md`
- `inbox/.gitkeep`
- `archive/.gitkeep`

## Step 2: Create the workspace

Copy each non-conflicting file from
`${CLAUDE_PLUGIN_ROOT}/skills/init/templates/` to the same relative path in the
current directory, creating directories as needed. Copy the files as-is; do not
edit or reformat them.

For example:

```sh
cp "${CLAUDE_PLUGIN_ROOT}/skills/init/templates/CLAUDE.md" ./CLAUDE.md
```

If `${CLAUDE_PLUGIN_ROOT}/skills/init/templates/` does not exist, stop and tell
the user the plugin install looks broken; do not improvise file contents.

## Step 3: Tell the user the next steps

After scaffolding, report what was created (and any conflicts skipped), then
give the next steps from the template README:

```sh
hotline setup --telegram-token <token>   # once, machine-wide
hotline init                             # in this folder
hotline start
```

Then: DM the bot, approve the pairing code with `hotline pair <code>`, and
they're in. Point them at `README.md` in the new workspace for the full guide,
and mention that `HOTLINE.md` sets the texting voice and is meant to be edited.

Also mention that `hotline init` pre-approves routine read-only tools (Read,
Grep, Glob, LS, …) in `.claude/settings.json` so a remote texting user isn't
buzzed for every navigation step — edits and commands still ask. They can widen
or narrow that allowlist in `.claude/settings.json` to taste.

If they drive OpenCode instead of Claude Code, they run
`hotline init --harness opencode`. That scaffolds a dedicated primary agent at
`.opencode/agents/hotline.md` whose system prompt is hotline's texting mechanics
and voice (OpenCode ignores the MCP `instructions` field, so the agent is how
those rules — including the anti-prompt-injection pairing rule — reach it), and
merges `opencode.json` with the hotline MCP server pinned to that agent
(`HOTLINE_OPENCODE_AGENT=hotline`) plus a default `permission` block. Re-running
regenerates the managed agent file but never clobbers a `hotline.md` they wrote
themselves. The voice still comes from `HOTLINE.md`.

Do not run `hotline` commands yourself; the user runs them.

