# Copy to $GLASSYS_DATA_DIR/config.yaml (default: ./data/config.yaml). # Secrets do not belong here — use environment variables or data/secrets.json. space: name: Glassys # Short host label in the PWA topbar. Editable in Settings. locale: en theme: dark # dark | light | system onboarding: completed: false agent: # cursor | claude | opencode | gemini | codex | acp adapter: cursor # Absolute host path. Empty until the wizard sets it. cwd: "" # Empty until the adapter fills its default (Cursor: grok-4.6 extra high). model: "" modelParams: [] # Opaque per adapter. Defaults below are for Cursor (the example adapter). # Cursor: settingSources, sandbox, autoRun. # autoRun false → local.autoReview (classifier denies; headless SDK cannot prompt). # Claude: permissionMode, autoRun. # ACP: command, args, registryId, autoRun (required command after onboarding too). # Codex: sandboxMode (read-only | workspace-write | danger-full-access; empty keeps ~/.codex/config.toml). # OpenCode: model only; every permission it asks for is refused (Glassys has no one to ask). # Gemini: model only; no Glassys deny lever. options: settingSources: - project - user sandbox: false autoRun: true network: bind: 127.0.0.1 port: 8787 publicUrl: "" allowedOrigins: [] wsKeepaliveSeconds: 25 # Clamped to 15–30. Applied per WebSocket connection. # true when a reverse proxy on this host (Caddy, cloudflared) fronts the gateway: login limits # then key on X-Forwarded-For instead of 127.0.0.1, so one visitor cannot lock everyone out. # Leave false when the gateway is reachable directly. Env: GLASSYS_TRUST_PROXY=1. trustProxy: false security: # none | cloudflare-access | header edgeAuth: none cloudflare: teamDomain: "" audience: "" identityHeader: "" sessionTtlHours: 168 display: thinkingDefault: collapsed diffPreview: true shellLinesVisible: 12 session: # Gateway process start only. Switching threads / the next send still resume when the adapter can. resumeOnStart: true queue: fifo stallSeconds: 180 # No run events for this long → run.stalled. 0 disables. notifyOnComplete: true # Web Push when a run finishes, errors, stalls, or a tool is denied. # Schedules and push subscriptions live in the data dir (schedules.json, push-subscriptions.json), not here. # Cron does not catch up after downtime; one-shot `at` jobs that are already due do fire. prompts: templates: - id: status slash: status title: Host status text: Check systemd/launchd failed units, disk usage, and memory. Summarize what needs attention. - id: disk slash: disk title: Disk usage text: Report filesystem usage and large directories that look abnormal. - id: failed-units slash: failed-units title: Failed units text: List failed or degraded services and recent journal errors.