-
Notifications
You must be signed in to change notification settings - Fork 67
Expand file tree
/
Copy path.env.example
More file actions
117 lines (110 loc) · 7.67 KB
/
Copy path.env.example
File metadata and controls
117 lines (110 loc) · 7.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# Collie configuration. Copy to your plugin config dir as `.env`:
# cp .env.example "$(herdr plugin config-dir herdr.collie)/.env"
# All values are optional; the defaults suit a single-user, tailnet-only setup.
# --- Networking ---
# Port the bridge listens on (loopback only; tailscale serve proxies to it).
COLLIE_PORT=8787
# Bind host. Keep this loopback. Binding 0.0.0.0 makes identity checks meaningless.
COLLIE_HOST=127.0.0.1
# How the bridge is published on the tailnet (read by collie-ctl.sh when it runs `tailscale serve`,
# not by the bridge itself): "https" (default — tailnet :443, Tailscale-managed cert) or "http"
# (plain HTTP on :$COLLIE_PORT — for Headscale / `.internal` domains without HTTPS certs; then set
# COLLIE_PUBLIC_HOSTS below, and note PWA install + Web Push need a secure context).
# COLLIE_SERVE_MODE=https
# Skip tailscale serve entirely (set to 1 when using a reverse proxy like Caddy/Nginx).
# The bridge stays on 127.0.0.1 only — your proxy handles TLS, auth, and public access.
# With this enabled, set COLLIE_ALLOWED_ORIGINS and COLLIE_PUBLIC_HOSTS to match your proxy's hostname.
# In this mode COLLIE_TRUSTED_USER has no effect (no tailscale serve injects the identity header) —
# use COLLIE_DEVICE_HEADER for per-device auth instead (DEPLOYMENT.md → Variant C).
# This is also the switch for any non-Tailscale mesh or tunnel — NetBird, ZeroTier, Cloudflare
# Tunnel: Collie publishes nothing, you point your tunnel at 127.0.0.1:$COLLIE_PORT and start it
# however you start your other services (DEPLOYMENT.md → Variant E).
# COLLIE_SKIP_SERVE=1
# Your public URL behind the proxy — shown as the "proxy" address by `collie-ctl.sh status`.
# COLLIE_PUBLIC_URL=https://collie.example.com
# --- Herdr connection ---
# Usually injected by the systemd unit; override only if your socket is elsewhere.
# Defaults to ~/.config/herdr/herdr.sock, or %APPDATA%\herdr\herdr.sock on Windows.
# HERDR_SOCKET_PATH=/home/you/.config/herdr/herdr.sock
# Which dialer opens that socket: auto (default) | net | bun. "auto" is right everywhere — node:net
# on Windows, where herdr's socket is a named pipe, and Bun's native transport elsewhere. Forcing
# "net" on Linux/macOS runs the Windows dial path against your real socket; that's how it gets
# tested without a Windows box. See bridge/dial.ts.
# COLLIE_HERDR_DIAL=auto
# Poll cadence (ms) and scrollback lines pulled for the detail view.
COLLIE_POLL_MS=1500
COLLIE_READ_LINES=200
# Keys sent to submit a reply after the text (comma-separated). Agent-dependent.
COLLIE_SUBMIT_KEYS=Enter
# Multi-session support (default on). One bridge fronts every running herdr session it finds under
# the config root (<HERDR_SOCKET_PATH dir>/herdr.sock + sessions/<name>/herdr.sock), and the UI gains
# a session switcher. Set "off" (or 0/false) to pin the bridge to the primary session only — no
# discovery, identical to the pre-multi-session behaviour.
# COLLIE_MULTI_SESSION=on
# --- Agent-commands palette ---
# Your own slash commands are NOT set here — they live in `commands.toml` next to this file, so a
# description can be a sentence. Start from `commands.toml.example` (README → Your own slash
# commands).
# --- Keys-tray presets ---
# Likewise your own preset chords: `keys.toml` next to this file, from `keys.toml.example`
# (README → Your own key presets).
# --- Pane history (the agent's own session log) ---
# On by default. This is the ONLY scrollback most agent panes can have: an agent TUI runs on the
# terminal's alternate screen, which keeps no scrollback ring, so history is read from the log the
# agent itself writes. Set to off/0/false to disable the feature and its route entirely.
# COLLIE_TRANSCRIPT=on
# Where each harness keeps those logs. Defaults suit a standard install; each takes ONE directory or
# SEVERAL, comma-separated and searched in order. More than one is the multi-profile case: Claude
# Code's CLAUDE_CONFIG_DIR gives each profile (work / personal) its own projects tree, and a herd
# mixing them needs both listed or half its panes have no history. Session ids are globally unique,
# so the first root holding one is the right one — no ordering decision to make. Reads stay confined
# to the root they were found under, so listing a root is you granting exactly that directory.
# COLLIE_TRANSCRIPT_ROOT=/home/you/.claude/projects,/home/you/.claude-personal/projects
# COLLIE_CODEX_ROOT=/home/you/.codex/sessions
# COLLIE_PI_ROOT=/home/you/.pi/agent/sessions
# COLLIE_OPENCODE_ROOT=/home/you/.local/share/opencode
# --- Security ---
# If set, requests must carry a matching Tailscale-User-Login header (from `tailscale serve`).
# COLLIE_TRUSTED_USER=you@example.com
# How much of each action's parameters the audit trail keeps. `preview` (default) keeps a bounded
# preview of every value; `none` redacts every string except the action parameters allowlisted in
# bridge/audit.ts, which explains what each mode does and does not keep.
# COLLIE_AUDIT_CONTENT=none
#
# Optional per-device authorisation (OFF by default). When Collie sits behind a reverse proxy that
# authenticates the device and injects its identity as a request header, name that header here to
# trust and enforce it. Proxy-agnostic — the value is just an opaque device id; Collie doesn't care
# how the proxy derived it. The header is trusted only because the bridge binds loopback behind the
# proxy (a direct client can't set it). Leave unset to disable.
# COLLIE_DEVICE_HEADER=X-Device-Id
# Device ids allowed to perform sensitive actions (typing into agents, creating tabs/spaces). Any
# other device carrying the header is read-only, and so is a request that arrives WITHOUT the header
# — setting the header above is you asserting your proxy injects it on every request, so a request
# without one didn't come through that proxy. That includes the bridge's own loopback URL, which
# bypasses the proxy: to drive a pane from the host by hand, send an allowlisted id yourself.
# To revoke a device, drop its id from this list and restart:
# herdr plugin action invoke restart --plugin herdr.collie
# With the header set but this list empty, EVERY device is read-only (fail-closed).
# COLLIE_DEVICE_ALLOWLIST=my-phone,my-laptop
# Extra allowed browser origins (comma-separated, each a FULL origin incl. scheme).
# The bridge is same-origin only: a request passes when the browser's Origin host equals the Host
# header the bridge receives (loopback always allowed). A plain `tailscale serve` on your MagicDNS
# name matches automatically, so you DON'T need this for a normal Tailscale setup.
# You DO need it when a *different* public hostname or an extra reverse proxy / TLS terminator fronts
# Collie (a custom/vanity domain, a load balancer, Headscale + upstream TLS) — the public origin then
# no longer matches the forwarded Host and API calls return 403 "cross-origin rejected". Add that
# exact origin here. e.g.:
# COLLIE_ALLOWED_ORIGINS=https://collie.example.com
#
# Host allowlist (comma-separated host[:port] values). When set, a request whose Host header isn't
# loopback, one of these, or an COLLIE_ALLOWED_ORIGINS host is rejected outright — this defeats DNS
# rebinding. Strongly recommended: set it to your MagicDNS name. Effectively MANDATORY when
# COLLIE_SERVE_MODE=http (no TLS = rebinding is otherwise same-origin). Unset = legacy behavior.
# COLLIE_PUBLIC_HOSTS=herd.your-tailnet.ts.net
# --- Web Push (optional) ---
# Don't fill these in by hand — run `bash scripts/collie-ctl.sh push-keys` (or the "Generate push
# keys" Herdr action) and it writes all three into the .env the service actually reads, mode 600.
# Pass a subject to identify yourself to the push services: push-keys mailto:you@example.com
# COLLIE_VAPID_PUBLIC=
# COLLIE_VAPID_PRIVATE=
# COLLIE_VAPID_SUBJECT=mailto:you@example.com