Skip to main content

Onboarding Wizard Reference

This is the full reference for the fased onboard CLI wizard. For a high-level overview, see Onboarding Wizard.

Flow details (local mode)

1

Existing config detection

  • If ~/.fased/fased.json exists, choose Review settings or Repair sign-in.
  • Review settings starts from the existing config and updates explicit setup sections while preserving existing wallet keystores, Tailscale account/device access, gateway port assumptions, mining/bond state, and firewall state unless you edit those sections.
  • Re-running the wizard does not wipe durable instance setup.
  • CLI fased onboard --reset defaults to auth+sessions; use --reset-scope sessions|auth|auth+sessions.
  • Repair never changes fased.json, gateway token/password, gateway settings, wallet assignments, SAT mining, Fased Network, plugins, Tailscale, firewall state, or wallet keystores under ~/.fased/wallet.
  • If the config is invalid or contains legacy keys, the wizard stops and asks you to run fased doctor before continuing.
  • Repair uses trash (never rm) and offers scopes:
    • Sessions only
    • Auth only
    • Auth + sessions
  • Destructive config/state reset is an explicit admin command: fased reset --scope ....
2

Model/Auth

  • Anthropic API key (recommended): uses ANTHROPIC_API_KEY if present or prompts for a key, then saves it for daemon use.
  • Anthropic OAuth (Claude Code CLI): on macOS the wizard checks Keychain item “Claude Code-credentials” (choose “Always Allow” so launchd starts don’t block); on Linux/Windows it reuses ~/.claude/.credentials.json if present.
  • Anthropic token (paste setup-token): run claude setup-token on any machine, then paste the token (you can name it; blank = default).
  • OpenAI sign-in (existing local credential): if ~/.codex/auth.json exists, the wizard can reuse the existing OpenAI sign-in credential.
  • OpenAI sign-in (ChatGPT OAuth): browser flow through OpenAI sign-in through the OpenAI Codex provider route.
    • Sets agents.defaults.model to openai-codex/gpt-5.5 when model is unset or openai/*.
  • OpenAI API key: uses OPENAI_API_KEY if present or prompts for a key, then stores it in auth profiles.
  • xAI (Grok): use Agent > Models for browser sign-in, device-code sign-in, or XAI_API_KEY.
  • OpenCode Zen (multi-model proxy): prompts for OPENCODE_API_KEY (or OPENCODE_ZEN_API_KEY, get it at https://opencode.ai/auth).
  • API key: stores the key for you.
  • Vercel AI Gateway (multi-model proxy): prompts for AI_GATEWAY_API_KEY.
  • More detail: Vercel AI Gateway
  • Cloudflare AI Gateway: prompts for Account ID, Gateway ID, and CLOUDFLARE_AI_GATEWAY_API_KEY.
  • More detail: Cloudflare AI Gateway
  • MiniMax M2.1: config is auto-written.
  • More detail: MiniMax
  • Synthetic (Anthropic-compatible): prompts for SYNTHETIC_API_KEY.
  • More detail: Synthetic
  • Moonshot (Kimi K2): config is auto-written.
  • Kimi Coding: config is auto-written.
  • More detail: Moonshot AI (Kimi + Kimi Coding)
  • Skip: no auth configured yet.
  • Pick a default model from detected options (or enter provider/model manually).
  • Wizard runs a model check and warns if the configured model is unknown or missing auth.
  • API key storage mode defaults to plaintext auth-profile values. Use --secret-input-mode ref to store env-backed refs instead (for example keyRef: { source: "env", provider: "default", id: "OPENAI_API_KEY" }).
  • OAuth credentials live in ~/.fased/credentials/oauth.json; auth profiles live in ~/.fased/agents/<agentId>/agent/auth-profiles.json (API keys + OAuth).
  • More detail: /concepts/oauth
  • After onboarding, manage provider accounts and this Agent’s selected models from Agent > Models. Use Advanced Config only for raw provider fields that are not exposed yet.
Headless/server tip: complete OAuth on a machine with a browser, then copy ~/.fased/credentials/oauth.json (or $FASED_STATE_DIR/credentials/oauth.json) to the gateway host.
3

Workspace

  • Default ~/.fased/workspace (configurable).
  • Seeds missing starter files for the Agent workspace without overwriting existing user-owned files.
  • Full workspace layout + backup guide: Agent workspace
4

Gateway

  • Port, bind, auth mode, tailscale exposure.
  • Auth recommendation: keep Token even for loopback so local WS clients must authenticate.
  • If you leave the token blank, onboarding generates a strong random token and prints a Control UI URL with #token=.... The UI exchanges that fragment for a local browser session and removes the token from the address bar. Save the token as a recovery/admin token.
  • Disable auth only if you fully trust every local process.
  • Non‑loopback binds still require auth.
5

Channels

  • WhatsApp: optional QR login.
  • Telegram: bot token.
  • Discord: bot token.
  • Google Chat: service account JSON + webhook audience.
  • Mattermost (plugin): bot token + base URL.
  • Signal: optional signal-cli install + account config.
  • BlueBubbles: recommended for iMessage; server URL + password + webhook.
  • iMessage: legacy imsg CLI path + DB access.
  • DM security: default is pairing. First DM sends a code; approve via fased pairing approve <channel> <code> or use allowlists.
  • After onboarding, manage channel credentials and this Agent’s routes from Agent > Channels.
6

Daemon install

  • macOS: LaunchAgent
    • Requires a logged-in user session; for headless, use a custom LaunchDaemon (not shipped).
  • Linux (and Windows via WSL2): systemd user unit
    • Wizard attempts to enable lingering via loginctl enable-linger <user> so the Gateway stays up after logout.
    • May prompt for sudo (writes /var/lib/systemd/linger); it tries without sudo first.
  • Runtime selection: Node (recommended; required for WhatsApp/Telegram). Bun is not recommended.
7

Health check

  • Starts the Gateway (if needed) and runs fased health.
  • Tip: fased status --deep adds gateway health probes to status output (requires a reachable gateway).
8

Skills (recommended)

  • Reads the available skills and checks requirements.
  • Lets you choose a node manager: npm / pnpm (bun not recommended).
  • Installs optional dependencies (some use Homebrew on macOS).
  • After onboarding, manage creation, install/review, dependency health, configuration, and per-Agent access from Agent > Skills. Wallet-capable skills still need explicit Wallet > Skill Grants before they can use wallets.
9

Finish

  • Summary + next steps, including iOS/Android/macOS apps for extra features.
If no GUI is detected, the wizard prints SSH port-forward instructions for the Control UI instead of opening a browser. If the Control UI assets are missing, rerun ./install.sh from the Fased checkout; if Fased is already installed, run fased doctor --fix for guided repair.

After onboarding

The wizard gets a working baseline onto disk. Normal day-to-day setup now lives under the selected Agent:
  • Agent > Models: provider accounts plus primary, fallback, and task model refs for that Agent.
  • Agent > Channels: account credentials and routes for Telegram, Discord, WhatsApp, Slack, and bundled channel extensions.
  • Agent > Skills: create, review/install, configure, test, and allow skills for that Agent.
  • Agent > Tools: per-Agent tool allow/deny policy only. Credentials belong in Services or Skills.
  • Agent > Memory: session-memory status, roots, archive health, and per-Agent memory diagnostics.
  • Agent > Services: service credentials and tests such as web search, GitHub, Gmail, and media.
  • Agent > Tasks: scheduled work for that Agent; coordination stays separate from task definitions.
Operator/admin surfaces are separate:
  • Dashboard (/dash) is the widget overview.
  • Usage is the local token/cost history.
  • Logs tails gateway logs.
  • Advanced (/config) contains Config, Debug, and Nodes tabs for raw or operator-only diagnostics.

Non-interactive mode

Use --non-interactive to automate or script onboarding:
fased onboard --non-interactive \
  --mode local \
  --auth-choice apiKey \
  --anthropic-api-key "$ANTHROPIC_API_KEY" \
  --gateway-port 18789 \
  --gateway-bind loopback \
  --install-daemon \
  --daemon-runtime node \
  --skip-skills
Add --json for a machine‑readable summary.
--json does not imply non-interactive mode. Use --non-interactive (and --workspace) for scripts.
fased onboard --non-interactive \
  --mode local \
  --auth-choice gemini-api-key \
  --gemini-api-key "$GEMINI_API_KEY" \
  --gateway-port 18789 \
  --gateway-bind loopback
fased onboard --non-interactive \
  --mode local \
  --auth-choice zai-api-key \
  --zai-api-key "$ZAI_API_KEY" \
  --gateway-port 18789 \
  --gateway-bind loopback
fased onboard --non-interactive \
  --mode local \
  --auth-choice ai-gateway-api-key \
  --ai-gateway-api-key "$AI_GATEWAY_API_KEY" \
  --gateway-port 18789 \
  --gateway-bind loopback
fased onboard --non-interactive \
  --mode local \
  --auth-choice cloudflare-ai-gateway-api-key \
  --cloudflare-ai-gateway-account-id "your-account-id" \
  --cloudflare-ai-gateway-gateway-id "your-gateway-id" \
  --cloudflare-ai-gateway-api-key "$CLOUDFLARE_AI_GATEWAY_API_KEY" \
  --gateway-port 18789 \
  --gateway-bind loopback
fased onboard --non-interactive \
  --mode local \
  --auth-choice moonshot-api-key \
  --moonshot-api-key "$MOONSHOT_API_KEY" \
  --gateway-port 18789 \
  --gateway-bind loopback
fased onboard --non-interactive \
  --mode local \
  --auth-choice synthetic-api-key \
  --synthetic-api-key "$SYNTHETIC_API_KEY" \
  --gateway-port 18789 \
  --gateway-bind loopback
fased onboard --non-interactive \
  --mode local \
  --auth-choice opencode-zen \
  --opencode-zen-api-key "$OPENCODE_API_KEY" \
  --gateway-port 18789 \
  --gateway-bind loopback

Add agent (non-interactive)

fased agents add work \
  --workspace ~/.fased/workspace-work \
  --model openai-codex/gpt-5.5 \
  --bind whatsapp:biz \
  --non-interactive \
  --json

Gateway wizard RPC

The Gateway exposes the wizard flow over RPC (wizard.start, wizard.next, wizard.cancel, wizard.status). Clients (macOS app, Control UI) can render steps without re‑implementing onboarding logic.

Signal setup (signal-cli)

The wizard can install signal-cli from GitHub releases:
  • Downloads the appropriate release asset.
  • Stores it under ~/.fased/tools/signal-cli/<version>/.
  • Writes channels.signal.cliPath to your config.
Notes:
  • JVM builds require Java 21.
  • Native builds are used when available.
  • Windows uses WSL2; signal-cli install follows the Linux flow inside WSL.

What the wizard writes

Typical fields in ~/.fased/fased.json:
  • agents.defaults.workspace
  • agents.defaults.model, auth profiles, and models.providers entries as needed for the selected provider
  • gateway.* (mode, bind, auth, tailscale)
  • session.dmScope (behavior details: CLI Onboarding Reference)
  • channels.telegram.botToken, channels.discord.token, channels.signal.*, channels.imessage.*
  • Channel allowlists (Slack/Discord/Matrix/Microsoft Teams) when you opt in during the prompts (names resolve to IDs when possible).
  • skills.install.nodeManager
  • wizard.lastRunAt
  • wizard.lastRunVersion
  • wizard.lastRunCommit
  • wizard.lastRunCommand
  • wizard.lastRunMode
fased agents add writes agents.list[] and optional bindings. WhatsApp credentials go under ~/.fased/credentials/whatsapp/<accountId>/. Sessions are stored under ~/.fased/agents/<agentId>/sessions/. Some channels are delivered as plugins. When you pick one during onboarding, the wizard will enable a bundled local extension or prompt for an external package only when the channel is not already shipped with Fased.