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
# The environment report, data end to end: what the probe looks for,
# the OS name mapping, and every text the report renders — Jinja
# templates over the facts the module gathers (os, date, model,
# harness, workspace, shell, branch, tools, notes, kind, reason). The
# same renderer and whitespace rules as SYSTEM.md apply.
# The friendly name for each `uname -s` system value; a system without
# a row keeps its raw uname spelling.
os_names:
darwin: macOS
# What the probe looks for, in report order. `advice` joins the report's
# notes only when the executable answered: guidance about a missing tool
# would be the stale kind.
probe:
- executable: rg
advice: >-
Use `rg` rather than recursive grep: it respects .gitignore by
default. `rg -uu` also searches ignored files.
- executable: fd
advice: >-
Use `fd` rather than `find`: it respects .gitignore by default.
`fd -uu` also searches ignored files.
- executable: jq
advice: >-
Use `jq` for JSON parsing and editing. Useful for API responses as well.
- executable: yq
advice: >-
Use `yq` for YAML parsing and editing.
- executable: sd
advice: >-
Use `sd` for targetted edits: `sd "before" "after" file`
- executable: curl
advice: >-
Use `curl` to access APIs (`curl | jq` pattern), raw data pages (.md,.txt, etc.)
and to download files. The rest of the web will likely not work.
# The session facts every shape carries — written once here and placed
# by reference (`{{ facts }}`), never duplicated in the texts below.
# The date is stamped at the conversation's start and carried across
# resumes, so the prompt prefix stays byte-identical and the label
# tells the model what the stamp means.
facts: |
- Date: {{ date }} (at conversation start)
- Model: {{ model }}
- Harness: {{ harness }}
# The report a local session renders: host facts, probed once.
report: |
## Environment
{{ facts }}
### Machine
- OS: {{ os }}
### Workspace
- CWD: {{ workspace }}
{% if branch %}- git branch: {{ branch }}{% endif %}
### Command-line tools
{% for tool in tools %}
- {{ tool.name }}: {{ tool.state }}
{% endfor %}
{% if notes %}
Notes:
{% for note in notes %}- {{ note }}
{% endfor %}
{% endif %}
# The message a sandboxed session shows instead of host facts: host
# facts would be lies about a container, so none are claimed and the
# kind is named. The sandbox-side workspace is named — it is where the
# model's commands run, not a host fact.
notice: |
## Environment
Commands run in the {{ kind }} sandbox, not on the machine {{ harness }}
launched from, so no host facts are claimed here. Probe the sandbox
itself (`uname -sm`, `command -v <tool>`) when a fact matters.
- Workspace: {{ workspace }}
{{ facts }}
# The message a failed probe degrades to: the reason rides the line.
unavailable: |
## Environment
The startup probe did not answer ({{ reason }}); ask the shell
directly (`uname -sm`, `command -v <tool>`) when a fact matters.
{{ facts }}