|
1 | | -# GPT-VoiceCoding — an example engine configuration. |
2 | | -# |
3 | | -# The bundle SHIPS this file and never writes one. The engine's configuration is |
4 | | -# a file the user owns and the engine only reads, so an installer that authored |
5 | | -# it would be claiming ownership of something that is not the installer's — and |
6 | | -# this file names adapters by import reference, which means it runs with the |
7 | | -# privileges of whoever wrote it. That is exactly as trusted as the engine, and |
8 | | -# it is trusted because *you* wrote it. |
9 | | -# |
10 | | -# Copy it into place and edit it: |
11 | | -# |
12 | | -# mkdir -p ~/Library/Application\ Support/GPT-VoiceCoding/engine |
13 | | -# cp /Applications/GPT-VoiceCoding.app/Contents/Resources/config.example.toml \ |
14 | | -# ~/Library/Application\ Support/GPT-VoiceCoding/engine/config.toml |
15 | | -# |
16 | | -# Until it is there, the engine refuses to start and says so on the terminal that |
17 | | -# started it (exit 2). That refusal is the design: an engine that silently loaded |
18 | | -# nothing behind a seam looks exactly like a healthy one until it is needed. |
19 | | -# |
20 | | -# `docs/control-plane.md` is the canonical description of every key here. |
| 1 | +# GPT-VoiceCoding first-launch configuration. |
| 2 | +# The shell creates this only when config.toml is absent, then edits it in place. |
| 3 | +# The engine only reads it. See docs/control-plane.md for every supported key. |
21 | 4 |
|
22 | 5 | [engine] |
23 | | -# Both optional; the defaults are the ones documented in docs/control-plane.md. |
24 | | -# The socket lives in a short runtime root because Darwin caps an AF_UNIX path |
25 | | -# at 103 bytes, and it is per-uid so two accounts do not fight over one engine. |
26 | | -# socket_path = "/tmp/gpt-voicecoding-501/control.sock" |
27 | | -# state_path = "~/Library/Application Support/GPT-VoiceCoding/engine/state.json" |
| 6 | +# The socket and state paths use the documented per-user defaults. |
28 | 7 |
|
29 | 8 | [adapters] |
30 | | -# Each is `module:attribute`, imported by the composition root and nothing else. |
31 | | -call = "gpt_voicecoding.adapters.call.realtime:realtime_call" |
32 | | -companion_channel = "gpt_voicecoding.adapters.companion_channel.telegram:telegram_channel" |
33 | | - |
34 | | -# With no text reach at all, name the null channel instead — running without a |
35 | | -# Companion Channel is legitimate, but it has to be said out loud: |
36 | | -# companion_channel = "gpt_voicecoding.adapters.companion_channel:null_channel" |
| 9 | +call = "gpt_voicecoding.adapters.call.realtime:realtime_call" |
| 10 | +companion_channel = "gpt_voicecoding.adapters.companion_channel:null_channel" |
37 | 11 |
|
38 | 12 | [adapters.agents] |
39 | 13 | claude = "gpt_voicecoding.adapters.agent.claude:claude_agent" |
40 | | -codex = "gpt_voicecoding.adapters.agent.codex:codex_agent" |
41 | | - |
42 | | -[adapters.settings.companion_channel] |
43 | | -# The token is named by variable and never written here: a configuration file is |
44 | | -# a file that gets committed by accident, and this is the shape that cannot be. |
45 | | -token_env = "GPTVOICECODING_TELEGRAM_TOKEN" |
46 | | -chat_id = "000000000" |
47 | | - |
48 | | -# One Telegram bot may have exactly one `getUpdates` consumer. If the |
49 | | -# first-generation bridge is still running on this machine, give this engine a |
50 | | -# DIFFERENT bot until that one is retired — otherwise the two steal each other's |
51 | | -# inbound messages, `verify` still passes, and only inbound goes quiet. |
| 14 | +codex = "gpt_voicecoding.adapters.agent.codex:codex_agent" |
52 | 15 |
|
53 | 16 | [adapters.settings.call] |
54 | | -# Where the bridge's own threads run. A location, so it defaults to ~. |
55 | | -# workspace = "~/code" |
56 | | - |
57 | | -# How the two speaking spans are derived. Neither is a measurement: the first is |
58 | | -# how long the user's transcript may go quiet before the utterance is called |
59 | | -# over, and the second bounds how long the Voice's stop edge waits for your |
60 | | -# audio path to finish playing. |
61 | | -# user_quiet_seconds = 1.5 |
62 | | -# voice_playout_wait_seconds = 180 |
63 | | - |
64 | | -# --- The external binaries, stated because this is a bundle ------------------ |
65 | | -# |
66 | | -# The menu-bar shell reads your login shell's PATH and hands it to the engine, |
67 | | -# so in the ordinary case these are found. State one anyway if your setup is |
68 | | -# not ordinary — the resolution fails open, so a profile that errors or hangs |
69 | | -# leaves the engine with launchd's PATH (/usr/bin:/bin:/usr/sbin:/sbin) and |
70 | | -# nothing you installed on it. `which codex` in your own shell, and paste the |
71 | | -# answer. |
72 | | -# |
73 | | -# You will know if you get it wrong: `bridgectl verify` fails naming the binary, |
74 | | -# and the engine refuses to start rather than serving a seam it cannot use. |
75 | | - |
76 | | -# The dotted seam name has to be quoted, or TOML reads it as two nested tables. |
77 | | -[adapters.settings."agent.codex"] |
78 | | -executable = "/opt/homebrew/bin/codex" |
| 17 | +# Voice, realtime model and timing use the engine's defaults until changed. |
| 18 | +# Codex is resolved from the login PATH on each spawn, never stored here. |
79 | 19 |
|
80 | 20 | [policy] |
81 | | -# Optional; these are the locked defaults. |
82 | | -# silence_end_seconds = 60 |
83 | | -# cool_down_seconds = 30 |
84 | | -# speech_settle_seconds = 5 |
85 | | -# history_page_entries = 5 |
86 | | -# first_prompt_characters = 40 # Maximum first-words length in a Session Name. |
| 21 | +# Silence and the two waits use the engine's defaults until changed. |
87 | 22 |
|
88 | 23 | [log] |
89 | | -# REQUIRED, all three. The engine owns its log and rotates it by rename |
90 | | -# (ADR 0004), and these three numbers have no default in code on purpose: they |
91 | | -# are what a 68 MB outage measured, and a compiled-in fallback would quietly |
92 | | -# reinstate a value the measurement proved matters. The values below are a |
93 | | -# sensible starting point, not a recommendation you are excused from reading. |
94 | | -# |
95 | | -# `max_bytes` binds EVERY generation, so the disk this can occupy is |
96 | | -# max_bytes x (retained_files + 1) — 32 MiB as written. |
| 24 | +# Each generation is bounded; retained generations occupy at most 32 MiB total. |
97 | 25 | max_bytes = 8388608 |
98 | 26 | retained_files = 3 |
99 | | -# Names starting with any of these are removed from the environment once, by |
100 | | -# every process that spawns others. `Malloc` is here because `MallocStackLogging` |
101 | | -# — inherited from whichever shell ran an installer, set by nobody — produced |
102 | | -# 98.1% of that outage, one line of stderr per spawned process. |
103 | 27 | stripped_environment_prefixes = ["Malloc"] |
104 | | -# The log's path is a location rather than a decision, so it defaults beside the |
105 | | -# state file: |
106 | | -# path = "~/Library/Application Support/GPT-VoiceCoding/engine/engine.log" |
107 | 28 |
|
108 | 29 | [delegate] |
109 | | -# Required: the Delegated Turn's model is the cost lever, and a default here |
110 | | -# would be a decision this project does not get to make for you. |
111 | | -# |
112 | | -# This is also the model the Call Agent runs on — the acting half of a Live |
113 | | -# Call, which has no model field of its own and is simply what backs the call's |
114 | | -# thread. Stated in one place so the two cannot diverge; left unstated, codex |
115 | | -# fell back to whatever `~/.codex/config.toml` said and every hand-off on a call |
116 | | -# was refused, in silence (#270). |
117 | | -model = "the-model-you-chose" |
118 | | - |
119 | | -# Required *for the bundle*, and only for the bundle. Left out, the engine uses |
120 | | -# the console script installed beside its own interpreter — which is right for a |
121 | | -# `pip install`, and wrong here, because the bundle's interpreter is inside the |
122 | | -# .app and so is its CLI. Point this at wherever the .app really is. |
123 | | -cli = "/Applications/GPT-VoiceCoding.app/Contents/Resources/engine/bin/bridgectl" |
| 30 | +model = "gpt-5.6-terra" |
| 31 | +effort = "low" |
| 32 | +# The shell inserts cli here from the running bundle's actual location. |
0 commit comments