-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path.env.example
More file actions
119 lines (98 loc) · 6.33 KB
/
Copy path.env.example
File metadata and controls
119 lines (98 loc) · 6.33 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
118
119
# ── Claude subscription auth ──────────────────────────────────────────
# Run `claude setup-token` on a machine logged in to your Claude subscription and
# paste the resulting sk-ant-oat01-... token here. The agent always runs on your
# subscription (no metered API key, no per-token billing).
CLAUDE_CODE_OAUTH_TOKEN=
# ── Telegram ──────────────────────────────────────────────────────────
# Create a bot with @BotFather and paste the HTTP API token here.
TELEGRAM_BOT_TOKEN=
# Comma-separated list of numeric Telegram user IDs allowed to talk to the bot.
# Message @userinfobot on Telegram to find your own ID. Anyone not on this list
# is ignored.
ALLOWED_TELEGRAM_IDS=
# The chat ID the bot sends proactive reminders to (usually your own user ID,
# which equals your private chat ID with the bot).
OWNER_CHAT_ID=
# ── Notion ────────────────────────────────────────────────────────────
# Create an internal integration at https://www.notion.com/my-integrations,
# copy its token, and share the parent page you want the agent to work in with
# that integration. Leave blank to run without Notion (logging will be disabled).
NOTION_TOKEN=
# Optional: the Notion page ID under which the agent should create its databases.
# If unset, the agent will ask you to share a page and pick one on first setup.
NOTION_PARENT_PAGE_ID=
# ── Google Calendar (optional) ────────────────────────────────────────
# Lets the coach put training sessions on your Google Calendar with native
# phone reminders (no reliance on Telegram notifications) and plan around your
# real commitments. In Google Cloud Console: enable the Calendar API, configure
# the OAuth consent screen (add yourself as a test user), create a "Desktop app"
# OAuth client, and paste its credentials here. Then run once:
# node --env-file=.env scripts/google-auth.mjs
# which stores a refresh token in data/google-token.json. Leave blank to run
# without calendar sync. See docs/google-calendar-architecture.md.
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
# Deployments without the token file (e.g. Cloud Run + Secret Manager): put the
# refresh_token value from data/google-token.json in this secret instead.
# GOOGLE_REFRESH_TOKEN=
# Which calendar to write to. Defaults to the id cached by
# `node scripts/calendar.mjs use-calendar`, then to "primary".
# GOOGLE_CALENDAR_ID=primary
# ── Agent identity and behaviour ──────────────────────────────────────
AGENT_NAME=Coach
TIMEZONE=Europe/London
# Model ids. CLAUDE_MODEL handles everything by default; set it to
# claude-opus-4-8 for Opus. The fast model is only used when FAST_TIER_ENABLED.
CLAUDE_MODEL=claude-sonnet-4-6
CLAUDE_MODEL_FAST=claude-haiku-4-5
# Route short, transactional logging messages to CLAUDE_MODEL_FAST to save usage.
# Off by default so behaviour is consistent (every message uses CLAUDE_MODEL).
FAST_TIER_ENABLED=false
# Reasoning effort for the standard model: low | medium | high | xhigh | max.
# Lower is faster and cheaper with less deep thinking. Default medium.
REASONING_EFFORT=medium
# ── Storage paths ─────────────────────────────────────────────────────
# Local defaults work out of the box. In Docker these point at a mounted volume.
SESSION_FILE=./data/sessions.json
SCHEDULE_FILE=./data/schedule.json
SESSION_TTL_HOURS=12
# ── Transport mode ────────────────────────────────────────────────────
# "polling" (default for local) runs an always-on long-polling loop: simplest,
# needs no public URL, but the process must stay running.
# "webhook" runs an HTTP server Telegram pushes to, which is what allows scale to
# zero on a host like Cloud Run. Mode defaults to webhook when PUBLIC_BASE_URL is
# set; otherwise polling.
MODE=polling
# Required in webhook mode: the public HTTPS base URL of this service, e.g. the
# Cloud Run URL. The Telegram webhook is registered at PUBLIC_BASE_URL/webhook/telegram.
PUBLIC_BASE_URL=
# Port the HTTP server listens on. Cloud Run sets $PORT for you; default 8080.
PORT=8080
# Shared secret the external scheduler must send as "Authorization: Bearer <secret>"
# to call /cron/run. Required in webhook mode so reminders cannot be triggered by
# anyone. Generate a long random value.
CRON_SECRET=
# Persona overlays. true (default) gives the owner a persona and any other chat a
# stable random famous-character voice. false keeps everyone on the plain coach.
# Coaching knowledge and safety are unchanged either way; only tone differs.
PERSONALITIES_ENABLED=true
# The owner's persona (OWNER_CHAT_ID). Any of: arnold (default), yoda, sherlock,
# stark, gandalf, dwight, sparrow, batman; "normal" for the plain coach; or
# "random" for a stable random character. Edit src/agent/personalities.ts to add
# your own.
OWNER_PERSONA=arnold
# Voice-note transcription: local (in-process Whisper, free, needs RAM), api
# (OpenAI-compatible endpoint), or off. See docs/configuration.md for the trade-off.
TRANSCRIBE_PROVIDER=local
# Local model (local provider):
# WHISPER_MODEL=Xenova/whisper-base
# API mode (defaults to OpenAI's gpt-4o-transcribe on /v1/audio/transcriptions):
# TRANSCRIBE_API_KEY=
# TRANSCRIBE_API_URL=https://api.openai.com/v1/audio/transcriptions
# TRANSCRIBE_MODEL=gpt-4o-transcribe
# ── Exercise database (optional) ──────────────────────────────────────
# The find-exercises skill pulls real exercises from a free, keyless dataset
# (free-exercise-db) and caches it under data/. No key needed. Override these
# only if you self-host a copy of the dataset and images.
# EXERCISE_DB_URL=https://raw.githubusercontent.com/yuhonas/free-exercise-db/main/dist/exercises.json
# EXERCISE_DB_IMAGE_BASE=https://raw.githubusercontent.com/yuhonas/free-exercise-db/main/exercises/