-
Notifications
You must be signed in to change notification settings - Fork 14
Expand file tree
/
Copy pathconfig.example.yaml
More file actions
196 lines (171 loc) · 8.18 KB
/
Copy pathconfig.example.yaml
File metadata and controls
196 lines (171 loc) · 8.18 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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
# Teich configuration
#
# Quick start:
# 1. Choose agent.provider: codex, pi, claude-code, hermes, or chat
# 2. Set model.model to the model you want to run
# 3. Keep prompts in prompts.jsonl, or add inline prompts below
# 4. Prefer TEICH_API_KEY / OPENROUTER_API_KEY / OPENAI_API_KEY in your environment for secrets
# 5. Run: uvx teich generate -c config.yaml
agent:
# codex = Codex CLI in Docker
# pi = Pi coding agent in Docker
# claude-code = Claude Code CLI in Docker
# hermes = Hermes Agent CLI in Docker
# chat = direct text-only dataset generation via an OpenAI-compatible API
provider: pi
# Codex-only: use your ChatGPT subscription instead of an API key. Teich seeds
# one auth.json snapshot from your host login ($CODEX_HOME/auth.json or
# ~/.codex/auth.json) into auth_dir, then runs a host-side broker that owns the
# rotating refresh token. Each container gets its own seeded auth.json (refresh
# token swapped for a per-run secret) and refreshes through the broker, which
# single-flights rotation, so any max_concurrency is safe.
# NOTE: the first rotation invalidates your host `codex` login; run `codex
# login` again afterward to restore it. auth_dir holds live credentials, so
# Teich keeps it out of output/sandbox/failures and gitignores it.
# codex:
# use_host_auth: true
# host_auth_file: null # default: $CODEX_HOME/auth.json or ~/.codex/auth.json
# auth_dir: ./.teich/codex-auth
# Claude Code-only settings.
# Subscription auth (Pro/Max): create a long-lived token with `claude
# setup-token` on the host and export CLAUDE_CODE_OAUTH_TOKEN (or set
# oauth_token below). When a token is available and api.base_url is unset,
# Teich passes it into each container and withholds ANTHROPIC_API_KEY (an API
# key silently wins over subscription auth inside Claude Code and would bill
# the API). Usage counts against your plan's rate limits, not API credits,
# and the token is safe at any max_concurrency.
# fallback_model forwards as --fallback-model (a model or list, tried in
# order on overload); always_thinking writes alwaysThinkingEnabled into the
# container's ~/.claude/settings.json; max_thinking_tokens sets
# MAX_THINKING_TOKENS in the container (0 disables thinking where allowed).
# claude:
# oauth_token: null # prefer CLAUDE_CODE_OAUTH_TOKEN in the env
# fallback_model: [sonnet, haiku]
# always_thinking: true
# max_thinking_tokens: null
# Trace each agent session to Langfuse (https://langfuse.com). Works for Codex
# and Claude Code -- each uses its own native integration (Codex plugin, Claude
# Code Stop hook) and Teich passes the credentials into the container. Side-
# channel only: it reads transcripts, fails open, and doesn't change agent
# behavior or Teich's output files. All three credentials are required when
# enabled. base_url may be Langfuse Cloud or a self-hosted URL; for a host-local
# instance use http://host.docker.internal:<port>.
# langfuse:
# enabled: true
# public_key: pk-lf-...
# secret_key: sk-lf-...
# base_url: https://cloud.langfuse.com
model:
# Model id passed to the selected agent/provider.
model: deepseek/deepseek-v4-flash
# Codex approval behavior. Common values: never, on-request.
approval_policy: never
# Codex sandbox mode.
sandbox: danger-full-access
# Optional reasoning / thinking level.
# - Codex: forwarded as model_reasoning_effort
# - Pi: normalized to low / medium / high when supported
# - Claude Code: forwarded as --effort (low | medium | high | xhigh | max on
# supported models)
# - Hermes: model/provider specific
# Hermes also enables built-in toolsets:
# safe,terminal,file,skills,memory,session_search,delegation
reasoning_effort: medium
# Optional Codex reasoning-summary detail, forwarded as model_reasoning_summary.
# Values: auto | concise | detailed | none. Set to "detailed" to capture rich
# reasoning summaries in traces (Codex's default can emit empty summaries).
# Leave null to use Codex's default.
reasoning_summary: null
# Optional Codex service tier. Set to "fast" to enable Codex fast mode: it
# runs ~1.5x faster at a higher credit rate and requires ChatGPT subscription
# auth (agent.codex.use_host_auth) plus a supported model such as gpt-5.5 or
# gpt-5.4. Leave null for the standard tier.
service_tier: null
# Optional context length override for providers that support it.
# Useful for Hermes custom endpoints when /v1/models reports a served
# context below Hermes' minimum but the endpoint supports a larger window.
context_length: null
# Optional Pi-specific provider overrides.
# Teich already defaults maxTokens to 131072 even if this block is omitted.
# Uncomment to customize the Pi/OpenRouter model entry further.
# pi_model_overrides:
# maxTokens: 131072
# compat:
# maxTokensField: max_tokens
# Optional API/provider configuration.
# Leave this section commented out to use the runtime defaults.
#
# Common setups:
# - OpenAI: provider=openai
# - OpenRouter: provider=openrouter, base_url=https://openrouter.ai/api/v1
# - Local OpenAI-compatible server: provider=openai, base_url=http://localhost:1234/v1
#
# You can also put secrets in env vars instead of committing them here:
# TEICH_API_KEY=...
# OPENROUTER_API_KEY=...
# OPENAI_API_KEY=...
# TEICH_BASE_URL=...
# TEICH_PROVIDER=...
# TEICH_MODEL=...
api:
provider: openrouter
base_url: https://openrouter.ai/api/v1
api_key: null
# Pi uses OpenRouter through chat/completions even if this is set to responses;
# the Responses adapter can stall before the first native session event.
wire_api: responses
# Optional MCP servers exposed inside the agent runtime.
# mcp_servers:
# - name: filesystem
# command: npx
# args: ["-y", "@modelcontextprotocol/server-filesystem", "/workspace"]
# Prompts can come from a file, inline below, or both.
# Relative paths are resolved from the location of this config file.
# JSONL is recommended because it safely supports multiline prompts, prompt-level system messages, and follow_up_prompts.
# CSV is still supported, but prompt files with commas/newlines are easier to maintain as JSONL.
prompts_file: prompts.jsonl
# Optional inline prompts. Use objects when you need metadata or chat follow-up turns.
# prompts:
# - prompt: "Draft a compact project plan"
# system: "Answer as a concise project manager."
# follow_up_prompts:
# - "Revise it for a solo developer"
# - "Add a risk checklist"
prompts: []
output:
# Where generated .jsonl files are written.
# - codex / pi: normalized copies of native agent session traces
# - claude-code: native Claude Code transcript JSONL from .claude/projects/...
# - hermes: native Hermes session export JSONL from generated runs, including delegated subagents
# - chat: text-only training rows with messages/prompt/response/thinking fields
traces_dir: ./output
# Where Teich stores workspace snapshots for each run.
sandbox_dir: ./sandbox
# Where Teich stores failed or interrupted traces for debugging.
# These files are excluded from resume detection, conversion, README generation, and uploads.
failures_dir: ./failures
# Used in the generated trace README.
pretty_name: "My Agent Traces"
# Optional direct upload to a Hugging Face dataset repo.
# Tags are auto-generated from the provider and model.
publish:
repo_id: null
hf_token: null
private: false
# Number of prompts to run in parallel.
max_concurrency: 1
# Per-session timeout in seconds.
timeout_seconds: 600
# Legacy global API key field.
# Prefer env vars or api.api_key above for new configs.
openai_api_key: null
# Optional developer/system instructions injected into every agent run.
# Applied across codex (developer_instructions), claude-code and pi
# (--append-system-prompt), and hermes (AGENTS.md) — additive, so the agent's
# built-in base prompt is preserved. Handy for nudging chain-of-thought into the
# trace, e.g.:
# developer_instructions: |
# Think out loud so your problem-solving process is visible. Before each tool
# call or edit, briefly explain what you're doing and why; after a command or
# test runs, state what you concluded before the next step.
developer_instructions: null