352 lines
9.0 KiB
Markdown
352 lines
9.0 KiB
Markdown
# Setup Wizard Menu Reference
|
||
|
||
Proposed wizard flow. Each menu the interactive setup wizard presents, in the
|
||
order an operator encounters them. Use this as a design reference.
|
||
|
||
---
|
||
|
||
## Main Menu
|
||
|
||
```
|
||
╔═ Main Menu ═══════════════════════════════════════════════════╗
|
||
║ Choose Setup Mode ║
|
||
╠═══════════════════════════════════════════════════════════════╣
|
||
║ n ew agent -- create a fresh identity ║
|
||
║ e xisting -- start an already set up agent ║
|
||
║ l oad -- boot from genesis.jsonc ║
|
||
║ q uit ║
|
||
╚═══════════════════════════════════════════════════════════════╝
|
||
```
|
||
|
||
---
|
||
|
||
## New Agent Flow (8 steps)
|
||
|
||
### Step 1 of 8 — Agent Profile
|
||
|
||
```
|
||
Agent name [Didactyl]: _
|
||
```
|
||
Single prompt. Default `Didactyl`.
|
||
|
||
### Step 2 of 8 — Relay Configuration
|
||
|
||
```
|
||
Current relays:
|
||
1. ws://localhost:7777
|
||
2. wss://relay.laantungir.net
|
||
3. wss://relay.primal.net
|
||
|
||
a dd a relay
|
||
r emove a relay (by number)
|
||
d one -- use this list
|
||
b ack
|
||
q uit
|
||
```
|
||
|
||
- **a** — prompt: `Relay URL (wss:// or ws://):`
|
||
- **r** — prompt: `Remove which number?` (cannot remove last relay)
|
||
- **d** — accept and continue
|
||
- Starts from the default relay list; operator adds/removes before identity
|
||
validation queries the network
|
||
|
||
### Step 3 of 8 — Identity
|
||
|
||
```
|
||
g enerate a new Nostr keypair
|
||
p rovide an existing nsec
|
||
s ign with a running n_signer
|
||
b ack
|
||
q uit
|
||
```
|
||
|
||
- **g** — generates a fresh keypair, shows npub+nsec, asks to confirm saved
|
||
- **p** — prompts for nsec (echo-suppressed), derives pubkey
|
||
- **s** — enters the **n_signer Transport** sub-menu (below)
|
||
|
||
### Step 4 of 8 — Identity Validation & Existing Agent Detection
|
||
|
||
After the identity is established (new keypair, imported nsec, or n_signer
|
||
pubkey), the wizard queries the configured relays for a kind 10002 relay list
|
||
and kind 30078 encrypted config for this pubkey.
|
||
|
||
**If NO existing agent data is found:**
|
||
|
||
```
|
||
Agent kind 10002: NOT FOUND (new identity available)
|
||
Admin profile: N/A
|
||
|
||
c ontinue to administrator setup
|
||
q uit
|
||
```
|
||
|
||
**If existing agent data IS found:**
|
||
|
||
```
|
||
Agent kind 10002: FOUND
|
||
Admin profile: <admin name or NOT FOUND>
|
||
|
||
This identity already has an agent configured on the network.
|
||
|
||
d ownload existing config and review it
|
||
r estart with a fresh identity
|
||
c ontinue anyway (overwrite existing state)
|
||
q uit
|
||
```
|
||
|
||
- **d** — downloads all relevant events (kind 10002 relay list, kind 30078
|
||
encrypted config, kind 0 profile, kind 3 contacts) from the relays, decrypts
|
||
the config, and presents everything on a single review page (see Step 4a
|
||
below). This merges the "existing agent" recovery path into the new agent
|
||
flow so the operator does not need to restart the wizard.
|
||
- **r** — returns to Step 3 (Identity) to pick a different identity
|
||
- **c** — continues to Step 5 (Administrator) as a fresh setup that will
|
||
overwrite the existing state
|
||
|
||
#### Step 4a — Downloaded Config Review (only if `d` chosen)
|
||
|
||
```
|
||
Downloaded configuration for this identity:
|
||
|
||
Name: <agent_name>
|
||
Identity: <pubkey>...
|
||
Admin: <admin pubkey or (not set)>
|
||
LLM Provider: <provider or (not set)>
|
||
LLM Model: <model or (not set)>
|
||
LLM Base URL: <base_url or (not set)>
|
||
LLM API Key: <masked or (not set)>
|
||
Relays: <N> configured
|
||
DM Protocol: <nip04/nip17/both>
|
||
|
||
e dit these settings
|
||
b oot with this config now
|
||
i nstall dedicated-user systemd service and boot
|
||
q uit
|
||
```
|
||
|
||
- **e** — enters the review/edit loop (admin, LLM, relays — same as the
|
||
Existing Agent review loop), then returns here
|
||
- **b** — boots immediately with the downloaded config
|
||
- **i** — installs systemd service and boots
|
||
|
||
If the operator chooses **b** or **i**, the wizard skips Steps 5–8 and goes
|
||
straight to launch — the downloaded config is already complete.
|
||
|
||
### Step 5 of 8 — Administrator
|
||
|
||
```
|
||
Admin pubkey (npub1... or 64-char hex): _
|
||
```
|
||
Single prompt. Accepts npub or hex.
|
||
|
||
### Step 6 of 8 — LLM Provider
|
||
|
||
```
|
||
LLM provider [openai]: _
|
||
API key: _
|
||
Model [gpt-4o-mini]: _
|
||
Base URL [https://api.openai.org/v1]: _
|
||
Max tokens [512]: _
|
||
Temperature [0.7]: _
|
||
```
|
||
|
||
### Step 7 of 8 — Default Skills
|
||
|
||
(silent — prepares default startup skill events)
|
||
|
||
### Step 8 of 8 — Review
|
||
|
||
```
|
||
Name: <agent_name>
|
||
Identity: <pubkey>...
|
||
Admin: <admin>...
|
||
LLM: <model> @ <base_url>
|
||
Relays: <N> configured
|
||
DM Protocol: nip04
|
||
|
||
b oot the agent now
|
||
i nstall dedicated-user systemd service and boot
|
||
s tart over
|
||
q uit
|
||
```
|
||
|
||
- **b** — publishes kind-30078 config, boots immediately
|
||
- **i** — publishes config, installs systemd unit, starts service
|
||
- **s** — resets config and returns to Main Menu
|
||
|
||
---
|
||
|
||
## n_signer Transport Sub-menu
|
||
|
||
Reached from Step 3 (`s`) or Existing Agent (`s`).
|
||
|
||
```
|
||
u nix abstract socket (auto-discover or named)
|
||
t cp (host:port + optional auth privkey)
|
||
s erial USB device (auto-discover or path)
|
||
f d pair (read_fd:write_fd -- advanced)
|
||
e xec -- Qubes cross-qube qrexec (target qube + service)
|
||
b ack
|
||
q uit
|
||
```
|
||
|
||
### Per-transport prompts
|
||
|
||
**u (unix)**
|
||
```
|
||
Discovered n_signer abstract sockets:
|
||
1. nsigner_hairy_dog
|
||
Pick a number, type a custom name, or press Enter for auto-discovery.
|
||
Socket name [1]: _
|
||
```
|
||
|
||
**t (tcp)**
|
||
```
|
||
host:port [127.0.0.1:7777]: _
|
||
Auth privkey hex (64 chars, optional, echo-suppressed): _
|
||
```
|
||
|
||
**s (serial)**
|
||
```
|
||
Discovered serial devices:
|
||
1. /dev/ttyACM0
|
||
Pick a number or type a custom path.
|
||
Device [1]: _
|
||
```
|
||
|
||
**f (fds)**
|
||
```
|
||
read_fd:write_fd: _
|
||
```
|
||
|
||
**e (qrexec)**
|
||
```
|
||
Target qube [nostr_signer]: _
|
||
qrexec service [qubes.NsignerRpc]: _
|
||
```
|
||
|
||
### Common role + path prompts (after transport chosen)
|
||
|
||
```
|
||
Role [nostr_range]: _
|
||
|
||
Derivation path presets:
|
||
1) m/44'/1237'/0'/0/0 (NIP-06 standard)
|
||
2) m/44'/1237'/0'/0'/0' (all-hardened)
|
||
3) custom
|
||
Select preset [1]: _
|
||
role_path [m/44'/1237'/0'/0/0]: _
|
||
|
||
Timeout ms [15000]: _
|
||
```
|
||
|
||
Then a connectivity check runs:
|
||
```
|
||
Checking connectivity to n_signer (mode=nsigner_unix, ..., role=nostr_range, path=m/44'/1237'/0'/0/0)...
|
||
Connectivity check: OK. Pubkey: <hex>
|
||
```
|
||
On failure, the n_signer error string is shown and the operator can retry.
|
||
|
||
---
|
||
|
||
## Existing Agent Flow
|
||
|
||
Kept as a separate entry point from the Main Menu for operators who know they
|
||
want to recover an existing agent and do not want to go through the new-agent
|
||
steps.
|
||
|
||
### Identity
|
||
|
||
```
|
||
n sec -- enter the agent private key
|
||
s ign with a running n_signer (no nsec required)
|
||
q uit
|
||
```
|
||
|
||
- **n** — prompt: `Enter your agent nsec (nsec1... or 64-char hex):` (echo-suppressed)
|
||
- **s** — enters the **n_signer Transport** sub-menu (same as above)
|
||
|
||
### Config Recovery
|
||
|
||
If no kind 10002 relay list is found:
|
||
```
|
||
Relay list (kind 10002): NOT FOUND
|
||
|
||
n ew agent setup with this identity
|
||
q uit to main menu
|
||
```
|
||
|
||
### Recovered Configuration (review loop)
|
||
|
||
```
|
||
Your agent was found. Change any of the following:
|
||
|
||
Name: <name>
|
||
Identity: <pubkey>...
|
||
Admin: <admin>
|
||
LLM Provider: <provider>
|
||
LLM Model: <model>
|
||
LLM Base URL: <base_url>
|
||
LLM API Key: <masked>
|
||
Relays: <N> configured
|
||
|
||
a dmin pubkey
|
||
l lm config
|
||
r elay configuration
|
||
c ontinue to launch options
|
||
q uit
|
||
```
|
||
|
||
- **a** — re-prompt admin pubkey
|
||
- **l** — re-prompt LLM config
|
||
- **r** — relay add/remove/done sub-menu (same as Step 2)
|
||
- **c** — proceed to launch
|
||
|
||
### Launch Options
|
||
|
||
```
|
||
Name: <name>
|
||
Identity: <pubkey>...
|
||
Admin: <admin>...
|
||
LLM: <model> @ <base_url>
|
||
Relays: <N> configured
|
||
|
||
b oot the agent now
|
||
i nstall dedicated-user systemd service and boot
|
||
q uit
|
||
```
|
||
|
||
---
|
||
|
||
## Load Genesis Flow
|
||
|
||
```
|
||
Path to genesis.jsonc: _
|
||
```
|
||
Single prompt. Loads and boots.
|
||
|
||
---
|
||
|
||
## Default Relays
|
||
|
||
```
|
||
1. ws://localhost:7777
|
||
2. wss://relay.laantungir.net
|
||
3. wss://relay.primal.net
|
||
```
|
||
|
||
---
|
||
|
||
## Summary of changes from previous design
|
||
|
||
1. **Default relays changed** to `ws://localhost:7777`,
|
||
`wss://relay.laantungir.net`, `wss://relay.primal.net`
|
||
2. **Step order changed**: Agent (1) → Relays (2) → Identity (3) → Validation
|
||
(4) → Admin (5) → LLM (6) → Skills (7) → Review (8)
|
||
3. **Step 4 redesigned**: if an existing agent is detected, the operator is
|
||
notified and offered three choices: download existing config and review it
|
||
(merges the recovery path inline), restart with a fresh identity, or
|
||
continue anyway (overwrite). The download path shows all recovered settings
|
||
on a single page and lets the operator edit or boot directly — skipping
|
||
Steps 5–8 since the config is already complete.
|