Repository navigation
Expand file tree
/
Copy path.env.example
More file actions
89 lines (79 loc) · 4.81 KB
/
Copy path.env.example
File metadata and controls
89 lines (79 loc) · 4.81 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
# Tasks — example configuration. Copy to `.env` and edit.
#
# Every line is commented out and shows the default, so an unedited copy
# changes nothing. These are the six variables a person actually has to decide
# about; the complete table, with the reasoning attached, is in CLAUDE.md.
#
# Load order: `<data dir>/.env`, then the nearest `.env` at or above the
# working directory, then the nearest one at or above the binary. First to
# define a variable wins, and the real environment outranks all three.
# ---- Credentials ----------------------------------------------------------
#
# Credentials do not belong in this file. They belong in the sealed store,
# which is where the server looks first:
#
# tasks secrets init # unseal key -> Keychain
# # (or `--key-file PATH`)
# tasks secrets set github-token # value on stdin, never argv
# tasks secrets set anthropic-api-key
#
# A sealed key is picked up by a *running* server with no restart, and it never
# reaches a VM: agents redeem short-lived, repo-bound leases through the
# in-process broker. See docs/plans/2026-08-18-credential-custody.md.
#
# The two variables below still work, as *fallbacks* rather than as the path to
# take: the server warns at startup for each one it falls back to, naming the
# `tasks secrets set` that should have answered instead.
# GitHub. The token must cover the whole write surface in
# crates/tasks/src/github.rs — create / merge / close a pull request,
# create / close / reopen / update an issue, set labels, issue and review
# comments, and the branch push behind a build. Classic token: `repo`.
# Fine-grained: Contents read+write, Pull requests read+write, Issues
# read+write, Metadata read. With no token at all, polling is disabled and the
# pipeline has no intake.
#GITHUB_TOKEN=ghp_replace_me
# Anthropic. Resolution is: sealed store, then this variable, then the host's
# Claude Code apiKeyHelper at `~/.claude/anthropic_key.sh` (Anthropic only).
# The last step is worth stating because it is invisible — with the helper
# present, agent runs work with nothing set anywhere and nothing saying where
# the key came from, which is why it surprises the second machine.
#ANTHROPIC_API_KEY=sk-ant-replace_me
# ---- The pipeline ---------------------------------------------------------
# The mode *every* boot starts in, overwriting whatever the last process left
# in the store: `pause`, `play` or `stop`. The default is the surprising part —
# a restart, a crash or a launchd relaunch always comes back quiet, intake and
# the API running and nothing dispatching. Say `play` on a host you want
# dispatching unattended. An unparseable value refuses to boot.
#TASKS_DEFAULT_MODE=pause
# Scouts at once. Each holds a vm-pool slot and the serial build lane holds one
# more, so the pool (6 by default) must fit this plus one — three is the
# recommended ceiling, and the server warns on every vm-pool connect when what
# it found is short or an exact fit. The tighter limit is memory, not slots: at
# the default VM shapes, three scouts plus a Builder plus the container
# runtime's buildkit reserve roughly 22 GB.
#SCOUT_MAX_CONCURRENT=2
# ---- The orchestrator -----------------------------------------------------
#
# What the orchestrator *may* do is the charter's business, not this file's;
# these two decide what it can reach. Both values contain spaces and so are
# quoted — `dotenvy` strips the quotes, and a parser that kept them would leave
# the program name starting with a double quote.
#
# (A) Curl-only, the default, and the shape the workdir default belongs to: a
# scratch directory with no checkout in it, so there is nothing to edit.
# `--allowedTools` is default-deny and prefix-matched, so an allowlist is
# written in verbs. Do not extend it with an entry containing a space —
# `Bash(git log:*)` is shattered into two permissions matching nothing by
# the whitespace split in crates/tasks/src/orchestrator.rs. Leave the
# workdir variable unset.
#ORCHESTRATOR_CMD="claude --print --output-format stream-json --verbose --include-partial-messages --allowedTools Bash(curl:*)"
#
# (B) A full dev agent pointed at this checkout. `--dangerously-skip-permissions`
# *discards* the allowlist rather than widening it, so this shape is only
# for a working directory you are content to have it edit. What it buys is
# verification: with a checkout and a warm build directory
# (ORCHESTRATOR_TARGET_DIR, see CLAUDE.md) the orchestrator can run the
# tests behind a composition of open pull requests before landing it,
# rather than handing every one of them back to a human.
#ORCHESTRATOR_CMD="claude --print --output-format stream-json --verbose --include-partial-messages --dangerously-skip-permissions"
#ORCHESTRATOR_WORKDIR=/absolute/path/to/this/checkout