Resources
Three sibling dashboard pages that compose into an agent launch: Agent definitions bundle a kind + permission mode + skills + system prompt + secrets; System prompts are versioned CLAUDE.md / AGENTS.md documents; Secrets are AES-GCM ciphertext blobs decrypted in the daemon's memory at spawn time.
Agent definitions#
An agent definition is a reusable launch template. /agents lets you pin a name + kind (claude_code | codex), default permission_mode, and the set of skills / system prompt / secrets to attach. Launching from the New session dialog with an agent picked applies all of those server-side — the daemon receives the merged environment.
Permission modes mirror the underlying harness flags — see Sessions → Permission modes. Picking dangerous_skip_all in the form requires an explicit ack checkbox (no accidental bypasses).
System prompts#
Versioned markdown documents that the daemon writes to CLAUDE.md / AGENTS.md in the session's cwd before harness startup. /system-prompts creates the prompt; each save bumps the version monotonically.
Why versioned#
Editing a prompt mid-flight shouldn't change what an already-running session sees — agent definitions pin a specific (prompt_id, version) pair, and the daemon materialises THAT version into the cwd. Future sessions pick up newer versions when the agent is re-saved against them.
Secrets#
/secrets stores named values that agents propagate to the harness as env vars. Cleartext is encrypted with AES-256-GCM (server key from SECRETS_KEY env), only the ciphertext + nonce hit Postgres, and the List endpoint never returns the value back to the dashboard — once you save it the UI shows just the name.
Daemon path#
At session launch the API encrypts each requested secret with an ephemeral X25519 key derived from the daemon's registered pubkey + ChaCha20-Poly1305, sends it over WS, and the daemon decrypts in memory, sets it in the harness env, then zero-wipes the plaintext on session_ended. Values that appear in stdout get replaced with [REDACTED:NAME] before the event hits the dashboard.