@joenandez/academy 0.4.0 → 0.5.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +5 -0
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +390 -0
- package/README.md +67 -122
- package/hooks/backstory/.claude-plugin/plugin.json +11 -0
- package/hooks/backstory/SOURCE +2 -0
- package/hooks/backstory/bin/backstory +9 -0
- package/hooks/backstory/hooks/hooks.json +45 -0
- package/hooks/backstory/scripts/knowledge.mjs +87 -0
- package/hooks/backstory/scripts/memory.mjs +685 -0
- package/hooks/backstory/scripts/tool-tick.mjs +1 -0
- package/hooks/backstory/skills/capture/SKILL.md +71 -0
- package/hooks/backstory/skills/capture/references/knowledge-capture-input.json +16 -0
- package/hooks/backstory/skills/capture/references/tagging-policy.md +29 -0
- package/hooks/backstory/skills/memory/SKILL.md +70 -0
- package/hooks/backstory/skills/setup/SKILL.md +85 -0
- package/hooks/context_metrics.mjs +67 -0
- package/hooks/hook_runtime.mjs +43 -2
- package/hooks/memory_bridge.mjs +286 -52
- package/hooks/memory_store.mjs +78 -26
- package/hooks/register_session.mjs +76 -14
- package/hooks/roque/.claude-plugin/plugin.json +6 -0
- package/hooks/roque/LICENSE +21 -0
- package/hooks/roque/SOURCE +1 -0
- package/hooks/roque/hooks.json +38 -0
- package/hooks/roque/package.json +3 -0
- package/hooks/roque/roque.js +1690 -0
- package/hooks/sync_memory.mjs +11 -7
- package/package.json +7 -3
- package/scripts/cli/agent-gate.mjs +70 -0
- package/scripts/cli/agent-id.mjs +37 -0
- package/scripts/cli/archive.mjs +39 -38
- package/scripts/cli/archived.mjs +4 -2
- package/scripts/cli/args-kinds.mjs +33 -0
- package/scripts/cli/args-notes.mjs +42 -0
- package/scripts/cli/args-owner.mjs +37 -0
- package/scripts/cli/args-run.mjs +38 -0
- package/scripts/cli/args.mjs +47 -104
- package/scripts/cli/beads.mjs +57 -0
- package/scripts/cli/codex.mjs +66 -12
- package/scripts/cli/core.mjs +117 -41
- package/scripts/cli/create.mjs +224 -76
- package/scripts/cli/curator-feed-codex.mjs +81 -0
- package/scripts/cli/curator-feed-observations.mjs +97 -0
- package/scripts/cli/curator-feed-scope.mjs +124 -0
- package/scripts/cli/curator-feed-sources.mjs +172 -0
- package/scripts/cli/curator-feed.mjs +318 -0
- package/scripts/cli/default-name.mjs +73 -0
- package/scripts/cli/doctor.mjs +67 -2
- package/scripts/cli/eventlog.mjs +6 -2
- package/scripts/cli/exit-code.mjs +9 -0
- package/scripts/cli/first-run.mjs +115 -0
- package/scripts/cli/heartbeat.mjs +135 -0
- package/scripts/cli/helm-skip.mjs +20 -0
- package/scripts/cli/hire-headless.mjs +37 -22
- package/scripts/cli/hire.mjs +8 -2
- package/scripts/cli/inspect.mjs +36 -18
- package/scripts/cli/lifecycle.mjs +95 -49
- package/scripts/cli/main.mjs +32 -2
- package/scripts/cli/memory-env.mjs +124 -0
- package/scripts/cli/migrate.mjs +13 -7
- package/scripts/cli/next-steps.mjs +13 -0
- package/scripts/cli/nightly-launch.mjs +118 -0
- package/scripts/cli/nightly.mjs +228 -0
- package/scripts/cli/notes.mjs +58 -8
- package/scripts/cli/owner-config.mjs +181 -0
- package/scripts/cli/owner-jobs.mjs +201 -0
- package/scripts/cli/prompt-append.mjs +135 -0
- package/scripts/cli/rename.mjs +90 -109
- package/scripts/cli/run-context.mjs +50 -0
- package/scripts/cli/run.mjs +236 -79
- package/scripts/cli/scaffold.mjs +119 -126
- package/scripts/cli/schedule-errors.mjs +70 -0
- package/scripts/cli/sessions.mjs +10 -3
- package/scripts/cli/skills-check.mjs +147 -0
- package/scripts/cli/skills.mjs +170 -0
- package/scripts/cli/start.mjs +201 -0
- package/scripts/cli/templates.mjs +119 -45
- package/scripts/cli/tldr.mjs +184 -0
- package/scripts/cli/toml-string.mjs +76 -0
- package/scripts/cli/user-work-view.mjs +48 -0
- package/scripts/cli/writable-dirs.mjs +23 -0
- package/scripts/cli/yaml.mjs +1 -1
- package/skills/hire/SKILL.md +112 -100
- package/skills/hire/references/owner.md +68 -0
- package/templates/agents/claude-code/knowledge-curator.md +5 -2
- package/templates/agents/codex/knowledge-curator.toml +2 -1
- package/templates/operating-model/base.md +78 -0
- package/templates/operating-model/owner.md +11 -0
- package/templates/operating-model/principal.md +9 -0
- package/templates/operating-model/specialist.md +9 -0
- package/templates/packs/owner/craft.md +32 -0
- package/templates/packs/owner/identity.md +13 -0
- package/templates/packs/owner/mandate.md +26 -0
- package/templates/packs/owner/owner/SKILL.md +118 -0
- package/templates/packs/owner/owner-feedback/SKILL.md +49 -0
- package/templates/packs/owner/owner-heartbeat/SKILL.md +35 -0
- package/templates/packs/owner/owner-nightly/SKILL.md +114 -0
- package/templates/packs/owner/owner-review/SKILL.md +70 -0
- package/templates/packs/owner/owner-work/SKILL.md +53 -0
- package/templates/packs/principal/craft.md +27 -0
- package/templates/packs/principal/identity.md +13 -0
- package/templates/packs/principal/mandate.md +23 -0
- package/templates/packs/principal/principal-brief/SKILL.md +44 -0
- package/templates/packs/principal/principal-intro/SKILL.md +95 -0
- package/templates/packs/principal/principal-nightly/SKILL.md +152 -0
- package/templates/skills/check-in/SKILL.md +34 -24
- package/templates/skills/knowledge-curation/SKILL.md +89 -48
- package/templates/skills/local-rules/SKILL.md +86 -0
- package/templates/skills/nightly-consolidation/SKILL.md +131 -100
- package/templates/skills/skill-method/SKILL.md +79 -0
- package/templates/skills/user-nightly/SKILL.md +143 -0
- package/templates/skills/work-graph/SKILL.md +75 -0
- package/conformance/README.md +0 -60
- package/conformance/discovery.test.mjs +0 -140
- package/conformance/envelope.test.mjs +0 -185
- package/conformance/error-codes.test.mjs +0 -125
- package/conformance/harness.mjs +0 -180
- package/conformance/identity.test.mjs +0 -125
- package/docs/integration-guide.md +0 -1042
- package/templates/skills/self-update/SKILL.md +0 -121
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,396 @@
|
|
|
3
3
|
This project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
4
4
|
The heading at the top of this file is the version in `package.json`.
|
|
5
5
|
|
|
6
|
+
<!--
|
|
7
|
+
The release skill folds the block below into the `## <target>` section when it
|
|
8
|
+
cuts the next release. It is not a `## ` heading, so the version check in
|
|
9
|
+
`scripts/release-check.mjs` still reads the released version at the top.
|
|
10
|
+
-->
|
|
11
|
+
|
|
12
|
+
## 0.5.12 — 2026-10-19
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
|
|
16
|
+
- **Backstory memory for agents.** The Stop-hook sweep also copies Backstory
|
|
17
|
+
observations (`BACKSTORY_HOME`, default `~/.backstory`) for the agent's
|
|
18
|
+
recorded sessions into its archive, so an agent that runs on Backstory instead
|
|
19
|
+
of Subspace memory still feeds its nightly. Nightly sessions are now marked in
|
|
20
|
+
`memory/sessions.jsonl`, and their own observations are never swept.
|
|
21
|
+
|
|
22
|
+
## 0.5.11 — 2026-10-19
|
|
23
|
+
|
|
24
|
+
### Changed
|
|
25
|
+
|
|
26
|
+
- **Context compression: agents just note, and the nightly routes.** Agents
|
|
27
|
+
add notes with `academy notes add` and no longer pick a file. Each nightly
|
|
28
|
+
files a note into knowledge, work, a new `references/` file, or Beads (system
|
|
29
|
+
notes become `academy-system` tasks). The curator hands agent-specific
|
|
30
|
+
`[proposed]` user lines back to that agent.
|
|
31
|
+
- **The nightly runs only when there is something to do.** A note or new
|
|
32
|
+
session arms it; a night with no new input skips in code, without a model
|
|
33
|
+
run. A night with an empty archive still curates notes and trims.
|
|
34
|
+
- **`references/` holds conditional facts.** Each file is reached by a
|
|
35
|
+
`useWhen` line in an always-on file, and `academy skills check` measures it.
|
|
36
|
+
Owner hires write their environment and context to `references/mandate.md`;
|
|
37
|
+
curation never edits that file.
|
|
38
|
+
- **Budgets.** The mandate cap is 600 tokens, enforced and reported, but it
|
|
39
|
+
never blocks a nightly. Staged `## Proposed` lines in `user.md` do not count.
|
|
40
|
+
`user.md` is organized in tiers, with `## Proposed` last.
|
|
41
|
+
|
|
42
|
+
### Fixed
|
|
43
|
+
|
|
44
|
+
- **A note added during a nightly is never lost.** Every writer saves its input
|
|
45
|
+
and arms the nightly marker in one locked step, and a marker the last run did
|
|
46
|
+
not use always launches the next one. A lock left by a dead process clears
|
|
47
|
+
after 60 seconds.
|
|
48
|
+
|
|
49
|
+
## 0.5.10 — 2026-10-18
|
|
50
|
+
|
|
51
|
+
### Changed
|
|
52
|
+
|
|
53
|
+
- **The curator emails the user after every nightly run, quiet nights
|
|
54
|
+
included.** Before, it wrote only when something material changed, so a
|
|
55
|
+
quiet night looked the same as a failed run. A material change still leads
|
|
56
|
+
with what changed and what the curator needs. A quiet night says so in the
|
|
57
|
+
subject, and the body lists what was updated or says that nothing changed.
|
|
58
|
+
- **Internal: the curator feed code is split into smaller modules** so the
|
|
59
|
+
pre-push quality gate passes again. The feed's output is unchanged.
|
|
60
|
+
|
|
61
|
+
## 0.5.9 — 2026-10-17
|
|
62
|
+
|
|
63
|
+
### Fixed
|
|
64
|
+
|
|
65
|
+
- **Scheduled agent runs in a memory topic now keep their memory.** When a run
|
|
66
|
+
inherits a topic (its project and workspace) without the memory-enabled flag,
|
|
67
|
+
as a scheduled job does, `academy run` now sets the flag. Before, the
|
|
68
|
+
client skipped every turn of such a run, and the session record kept no
|
|
69
|
+
topic, so the agent's nightly found nothing to consolidate. An explicit flag
|
|
70
|
+
value, such as `0`, is kept.
|
|
71
|
+
|
|
72
|
+
## 0.5.8 — 2026-10-17
|
|
73
|
+
|
|
74
|
+
### Added
|
|
75
|
+
|
|
76
|
+
- **Every Principal sends a morning brief.** A new job,
|
|
77
|
+
`<name>-principal-brief`, runs each day at 07:00 in the agent's timezone and
|
|
78
|
+
starts the new `principal-brief` skill. The agent emails the user a short
|
|
79
|
+
agenda: what they did together the day before, and what to pair on today.
|
|
80
|
+
It suggests an idea only from something the user said, with its date. The
|
|
81
|
+
brief only reads, writes, and sends; it starts no work. The agent picks the
|
|
82
|
+
sections and the length, and keeps a quiet day short. A local rule can change
|
|
83
|
+
the brief or turn it off. `create` registers the job for a new Principal,
|
|
84
|
+
`stop`, `archive`, and `delete` remove it, and `start` registers it again. An
|
|
85
|
+
existing Principal gets the job with `academy start <name>`. A rename keeps
|
|
86
|
+
the job. Under a named `AGENTS_ROOT`, the brief gets the same
|
|
87
|
+
`jobs.agents_root` warning as the nightly.
|
|
88
|
+
- **Every agent can read the user feed.** The feed script now serves any
|
|
89
|
+
agent, and the operating model lists it in every agent's Tools table. By
|
|
90
|
+
default it holds only the entries attributed to the calling agent. `--all`
|
|
91
|
+
holds every entry, and `--project`, `--topic`, and `--branch` narrow it; a
|
|
92
|
+
header line counts the entries each filter leaves out. `--max-tokens` caps
|
|
93
|
+
the file (default 25,000). When the cap cuts, the oldest entries go first and
|
|
94
|
+
a header line says how many went and how to narrow the window. A cap smaller
|
|
95
|
+
than the header is refused.
|
|
96
|
+
|
|
97
|
+
### Changed
|
|
98
|
+
|
|
99
|
+
- **The curator still reads every entry.** The `user-nightly` skill runs the
|
|
100
|
+
feed with `--all --max-tokens 500000`, so the curator's file is the same as
|
|
101
|
+
in 0.5.7.
|
|
102
|
+
|
|
103
|
+
### Fixed
|
|
104
|
+
|
|
105
|
+
- **The agent-written brief mark names no person.** Spectre plan-review briefs
|
|
106
|
+
in the feed are now marked
|
|
107
|
+
`[likely agent-written brief, not the user's words]`.
|
|
108
|
+
|
|
109
|
+
## 0.5.7 — 2026-10-17
|
|
110
|
+
|
|
111
|
+
### Added
|
|
112
|
+
|
|
113
|
+
- **The curator reads a daily feed.** A new script,
|
|
114
|
+
`scripts/cli/curator-feed.mjs`, writes one file per night to the curator's
|
|
115
|
+
`dreams/user-feed/` folder. It holds every prompt the user typed in Claude
|
|
116
|
+
Code and Codex chat, every email the user sent to an agent through tldr, and
|
|
117
|
+
the last memory observation of each turn, each with its time, project,
|
|
118
|
+
branch, session, and agent. Automation turns are left out only by an entry
|
|
119
|
+
flag, an exact generated string, or a complete generated envelope; a typed
|
|
120
|
+
prompt is never dropped for its opening words. Spectre plan-review briefs
|
|
121
|
+
stay in, marked as likely agent-written. Prompts are cut at 2,000 characters
|
|
122
|
+
with a `[cut: N chars]` marker. When one source fails, the file still holds
|
|
123
|
+
the others. The script prints one JSON line with the counts, the source
|
|
124
|
+
states, and the token totals of the curator's previous run.
|
|
125
|
+
- **Sessions record their injected context size.** Each `sessions.jsonl` row
|
|
126
|
+
now carries a `context` measurement (total, overhead, per-surface tokens,
|
|
127
|
+
skill listing) and the transcript path, so context growth can be tracked per
|
|
128
|
+
agent.
|
|
129
|
+
|
|
130
|
+
### Changed
|
|
131
|
+
|
|
132
|
+
- **The `user-nightly` skill reads the feed first.** The curator runs the
|
|
133
|
+
feed script, reads the whole file, and searches memory or transcripts only
|
|
134
|
+
to settle a question the feed cannot answer. When a source fails, it falls
|
|
135
|
+
back to its old search for that source. Its report gets a `## Feed` section
|
|
136
|
+
with the feed size and the previous run's tokens. On a test day the run
|
|
137
|
+
took 9 minutes instead of 46 and used 34 model calls instead of 53.
|
|
138
|
+
- **Roque sync.** Roque `f62066c` (0.1.1): `3c61e59` retires the standalone
|
|
139
|
+
Roque release, and `f62066c` documents that Roque ships inside Academy. No
|
|
140
|
+
hook behavior changed.
|
|
141
|
+
|
|
142
|
+
## 0.5.6 — 2026-10-15
|
|
143
|
+
|
|
144
|
+
### Added
|
|
145
|
+
|
|
146
|
+
- **Roque ships with Academy.** Every agent session now loads Roque, which
|
|
147
|
+
keeps long sessions on track across compaction. Near the compaction point
|
|
148
|
+
(75% and 90%) it asks the agent to keep a state file at
|
|
149
|
+
`.roque/state/<session>.md`. After a compaction it gives that state back to
|
|
150
|
+
the agent. Claude Code sessions also save each compaction summary. Claude
|
|
151
|
+
Code loads the Roque copy in Academy with `--plugin-dir`, so an installed
|
|
152
|
+
`roque` plugin does not run a second time. Codex sessions get two Roque
|
|
153
|
+
hooks next to the Academy hooks; approve them once in Codex `/hooks`.
|
|
154
|
+
`.roque/off` in a project turns Roque off there. First Roque sync: Roque
|
|
155
|
+
`bf4c36b` (0.1.1).
|
|
156
|
+
- **Normal sessions can install Roque from Academy.** The Academy marketplace
|
|
157
|
+
now lists `roque`: `claude plugin install roque@academy-local`.
|
|
158
|
+
|
|
159
|
+
### Changed
|
|
160
|
+
|
|
161
|
+
- **Agent sessions compact at a 430,000-token window.** `academy run` sets
|
|
162
|
+
`CLAUDE_CODE_AUTO_COMPACT_WINDOW=430000` for each Claude Code session it
|
|
163
|
+
starts. A value already set in the environment wins. Other sessions do not
|
|
164
|
+
change.
|
|
165
|
+
|
|
166
|
+
## 0.5.5 — 2026-10-15
|
|
167
|
+
|
|
168
|
+
### Added
|
|
169
|
+
|
|
170
|
+
- **The Owner loop.** An Owner now keeps a strategy, runs a weekly
|
|
171
|
+
owner-review with the user, drives initiatives, and schedules its own
|
|
172
|
+
follow-up sessions. A new Owner gets a seeded `craft.md` and identity, and
|
|
173
|
+
says hello with a first update on its first daily open.
|
|
174
|
+
- **Owner onboarding.** `academy create` makes an Owner as a draft. A draft
|
|
175
|
+
Owner has only the nightly job and does not run. `academy start <agent>`
|
|
176
|
+
checks the Owner's mandate and terms, registers its jobs, and requests one
|
|
177
|
+
first daily run. A failed start restores the earlier state.
|
|
178
|
+
- **`academy stop <agent>`.** Stop marks the agent stopped, deletes every job
|
|
179
|
+
of the agent, and keeps its files. A stopped agent does not run until
|
|
180
|
+
`academy start`.
|
|
181
|
+
- **Default names.** `academy create` without a name picks the first free
|
|
182
|
+
default name.
|
|
183
|
+
- **Rename keeps the agent.** Each agent has a fixed id. `academy rename`
|
|
184
|
+
changes only the name: the folder, jobs, run routes, and Beads labels keep
|
|
185
|
+
the fixed id. Commands accept the fixed id or the current name.
|
|
186
|
+
- **A Principal can hire an Owner** through the Owner hire steps.
|
|
187
|
+
|
|
188
|
+
### Changed
|
|
189
|
+
|
|
190
|
+
- `academy doctor` lists `start` and `stop` in its command list and usage.
|
|
191
|
+
- A terminal Owner create prints how to start the draft.
|
|
192
|
+
- Every tldr call has a 60 s limit, so a hung call cannot hold the lifecycle
|
|
193
|
+
lock.
|
|
194
|
+
|
|
195
|
+
### Fixed
|
|
196
|
+
|
|
197
|
+
- An agent loads the `user-work.md` sections that name its fixed id or its
|
|
198
|
+
current name.
|
|
199
|
+
- `academy list`, `clean`, and `run` use the current name after a rename.
|
|
200
|
+
- `academy hire` counts a draft Owner as a taken name and never reuses an
|
|
201
|
+
existing agent.
|
|
202
|
+
- An Owner backs off only after an empty session.
|
|
203
|
+
- Archive and rename delete an Owner's self-scheduled sessions.
|
|
204
|
+
|
|
205
|
+
## 0.5.4 — 2026-10-13
|
|
206
|
+
|
|
207
|
+
### Changed
|
|
208
|
+
|
|
209
|
+
- **Scheduled runs bypass permission prompts by default.** A nightly run
|
|
210
|
+
without a permission flag on its job now launches Claude Code with
|
|
211
|
+
`--permission-mode bypassPermissions` (was `auto`) and Codex with
|
|
212
|
+
`--dangerously-bypass-approvals-and-sandbox` (was `--ask-for-approval never
|
|
213
|
+
--sandbox workspace-write`). New Owner daily and heartbeat jobs store
|
|
214
|
+
`bypassPermissions` for Claude and `danger-full-access` for Codex. A mode
|
|
215
|
+
already stored on a job is never changed.
|
|
216
|
+
|
|
217
|
+
### Fixed
|
|
218
|
+
|
|
219
|
+
- **Nightly runs can write their memory files again.** Auto mode refused every
|
|
220
|
+
file write in an unattended run, so the nightly kept no work, notes,
|
|
221
|
+
knowledge, or dreams report.
|
|
222
|
+
|
|
223
|
+
## 0.5.3 — 2026-10-12
|
|
224
|
+
|
|
225
|
+
### Added
|
|
226
|
+
|
|
227
|
+
- **A new Principal opens with a short first-session intro.** `create --kind
|
|
228
|
+
principal` now writes `intro-pending.md` in the agent's home. The first
|
|
229
|
+
`academy run` of that Principal from a terminal, with nothing after `--`,
|
|
230
|
+
starts the session with one plain sentence that points at the
|
|
231
|
+
`principal-intro` skill. A scheduled run, a headless run, a resume, and any
|
|
232
|
+
run with a passthrough never starts the intro. `run` writes one
|
|
233
|
+
`run.intro_seed` line to stderr when it does.
|
|
234
|
+
- **`create --kind principal` in a terminal asks for a missing name and starts
|
|
235
|
+
the first session.** `--no-start` creates the agent and prints
|
|
236
|
+
`academy run <name>` instead. `--json`, a pipe, and every other kind take the
|
|
237
|
+
same path as before: a missing name is still `invalid_name`, and the
|
|
238
|
+
`create` envelope has no new field. `contract_version` stays `1`.
|
|
239
|
+
|
|
240
|
+
### Changed
|
|
241
|
+
|
|
242
|
+
- **The Principal mandate names the work, not projects.** A new Principal's
|
|
243
|
+
`mandate.md` has a `## Working on` section. The first session adds one
|
|
244
|
+
`- <ws-id> <title>` line for the work the user names, and the curator uses
|
|
245
|
+
it to map that Workstream to the Principal. The template has no
|
|
246
|
+
`## Projects` or `## Environment` section, and the Principal operating
|
|
247
|
+
model points at the work in the mandate.
|
|
248
|
+
|
|
249
|
+
## 0.5.2 — 2026-10-12
|
|
250
|
+
|
|
251
|
+
### Changed
|
|
252
|
+
|
|
253
|
+
- **Each agent loads only its own part of `user-work.md`.** The shared file is
|
|
254
|
+
now a short preamble and `##` sections, one for each goal and each
|
|
255
|
+
Workstream. Each section has an `agents:` line with agent names or `none`.
|
|
256
|
+
When `academy run` compiles an agent's prompt, it keeps the preamble and
|
|
257
|
+
only the sections that name the agent, and it removes the `agents:` lines.
|
|
258
|
+
A section without an `agents:` line goes to no agent, and an agent that no
|
|
259
|
+
section names gets the preamble only. Claude and Codex get the same view.
|
|
260
|
+
`academy run` writes one `run.user_work_view` line to stderr with the
|
|
261
|
+
section and kept counts.
|
|
262
|
+
- **`academy tokens` and `academy budget` count each agent's share** of
|
|
263
|
+
`user-work.md`, not the whole file. The JSON shape is unchanged, and
|
|
264
|
+
`contract_version` stays `1`.
|
|
265
|
+
- **The curator's `user-nightly` skill writes the sectioned format.** It maps
|
|
266
|
+
sections to agents from mandates and Beads `owner:` labels, checks each
|
|
267
|
+
mapped agent's budget, and lists each new or changed assignment in its
|
|
268
|
+
email. Rules that apply to every agent go to `user.md` Standing rules.
|
|
269
|
+
- **Agent skills read the full `user-work.md` only on demand.** The operating
|
|
270
|
+
model and the work skills say the agent's share is in its prompt.
|
|
271
|
+
`work-graph` lists Workstream titles with `bd list --type workstream --json`
|
|
272
|
+
before it proposes a new Workstream.
|
|
273
|
+
|
|
274
|
+
## 0.5.1 — 2026-10-09
|
|
275
|
+
|
|
276
|
+
### Changed
|
|
277
|
+
|
|
278
|
+
- **A user can create any number of Principals.** `create --kind principal`
|
|
279
|
+
no longer refuses a second Principal, live or archived. The `agent_exists`
|
|
280
|
+
reason `principal_exists` is retired and no longer raised. `contract_version`
|
|
281
|
+
stays `1`: no field was added or removed. A create now writes each missing
|
|
282
|
+
shared seed with an exclusive-create flag, so concurrent creates and
|
|
283
|
+
`academy notes add --user` never overwrite `user.md` or `user-work.md`.
|
|
284
|
+
- **The Principal pack mandate has a Projects section.** A new Principal's
|
|
285
|
+
`mandate.md` starts with `- Not yet named.` under `## Projects` and tells the
|
|
286
|
+
Principal to ask the user in its first session which projects it covers. The
|
|
287
|
+
pack text no longer says "all projects".
|
|
288
|
+
|
|
289
|
+
### Fixed
|
|
290
|
+
|
|
291
|
+
- **A create that loses a same-name race no longer deletes the winner.** When
|
|
292
|
+
two `academy create` requests for one name run at once, the one that loses
|
|
293
|
+
the directory creation now refuses with `agent_exists` and removes nothing.
|
|
294
|
+
Before, its rollback could delete the agent the other request had just made.
|
|
295
|
+
- **Concurrent first creates no longer fail on the agents folder.** Creating
|
|
296
|
+
the `AGENTS_ROOT` folder is now safe when several creates start together.
|
|
297
|
+
|
|
298
|
+
## 0.5.0 — 2026-10-09
|
|
299
|
+
|
|
300
|
+
### Added
|
|
301
|
+
|
|
302
|
+
- **`academy notes add --user "<text>"`** appends a
|
|
303
|
+
`- [proposed] YYYY-MM-DD HH:MM <agent>: <text>` line to the shared `user.md`.
|
|
304
|
+
- **Skills `work-graph` and `check-in` for every kind, and `user-nightly` for
|
|
305
|
+
the curator.** `work-graph` covers Workstreams in Beads. `user-nightly`
|
|
306
|
+
maintains `user.md` and `user-work.md` each night.
|
|
307
|
+
- **Agent kinds.** `academy create --kind specialist|owner|principal` makes
|
|
308
|
+
an agent of that kind, and agent records report `kind`. Each kind renders its
|
|
309
|
+
own skill list from a package-skill manifest, and every kind gets the
|
|
310
|
+
`skill-method` and `local-rules` skills and a `local-rules.md` surface.
|
|
311
|
+
- **The Owner pack.** An Owner gets the `owner`, `owner-work`,
|
|
312
|
+
`owner-heartbeat`, `owner-nightly`, and `owner-feedback` skills, `owner_*`
|
|
313
|
+
settings in `agent.yaml`, and three scheduled jobs: a daily run, a heartbeat
|
|
314
|
+
inside `owner_hours`, and a nightly. `academy delete` and `archive`
|
|
315
|
+
unschedule every Academy job of the agent.
|
|
316
|
+
- **The Principal pack.** One Principal per user, with its pack skills and
|
|
317
|
+
write access to the shared root for Codex runs.
|
|
318
|
+
- **Scheduler skip line.** A scheduled run that decides on purpose not to start
|
|
319
|
+
a session prints one `helm.skip` line and exits 0, so the scheduler records a
|
|
320
|
+
skip and starts no fallback session.
|
|
321
|
+
- **Nightly receipts.** The nightly verifies its consolidation and writes
|
|
322
|
+
`memory/nightly-last.json`; `academy doctor` reports each agent's last
|
|
323
|
+
nightly receipt and checks `bd`.
|
|
324
|
+
- **Skill size check.** `academy skills check` measures unpublished skills
|
|
325
|
+
against the 2,000-token ceiling.
|
|
326
|
+
|
|
327
|
+
### Changed
|
|
328
|
+
|
|
329
|
+
- **Breaking: a new boot-surface file set for every agent.** Every kind now
|
|
330
|
+
boots the same nine surfaces, in this order: `identity.md`, `craft.md`,
|
|
331
|
+
`mandate.md`, `work.md`, `knowledge.md`, `notes.md`, `local-rules.md`, and the
|
|
332
|
+
shared `user.md` and `user-work.md` in `ACADEMY_HOME`. These files are
|
|
333
|
+
retired: `role.md`, `goals.md`, `priorities.md`, `threads.md`, `dailys.md`,
|
|
334
|
+
and the shared `projects.md`. `inspect` reports the new names, so a client
|
|
335
|
+
that reads or writes a retired file must move to the new names. An existing
|
|
336
|
+
agent needs a one-time, reviewed migration: split `identity.md` and `role.md`
|
|
337
|
+
into identity, craft, and mandate; fold `goals.md` into `mandate.md`; fold
|
|
338
|
+
`priorities.md` and `threads.md` into `work.md`. The migration moves the old
|
|
339
|
+
files to `<agent>/retired/` and deletes nothing. `contract_version` stays
|
|
340
|
+
`1`: Academy's own tools were the only consumers of these filenames.
|
|
341
|
+
`docs/integration-guide.md` §10 lists the new file set and the shared paths.
|
|
342
|
+
- **One user Beads database.** Every kind works in the database at
|
|
343
|
+
`ACADEMY_HOME/.beads`, with `BEADS_ACTOR=<agent>@<pid>`. Workstreams are a
|
|
344
|
+
custom Beads type in it, and each Owner item carries the label
|
|
345
|
+
`owner:<agent>`. An Owner's own `.beads` directory moves into it once.
|
|
346
|
+
- **The harness prompt is kept.** Academy now appends its prompt to the
|
|
347
|
+
runtime's own system prompt (inline `--append-system-prompt <text>` for Claude,
|
|
348
|
+
and `developer_instructions` for Codex). It no longer replaces that prompt.
|
|
349
|
+
Claude gets the inline form so that a host's own
|
|
350
|
+
`--append-system-prompt-file` (the Subspace terminal wrapper) combines with
|
|
351
|
+
Academy's prompt instead of being replaced by it.
|
|
352
|
+
- **A shared writable home.** Every kind gets `ACADEMY_HOME` as a writable
|
|
353
|
+
directory, so any agent can append to the shared user files.
|
|
354
|
+
- **The memory bridge is always on.** There is no opt-in flag. Runs go
|
|
355
|
+
through the memory wrapper when the memory environment is absent, each
|
|
356
|
+
session records its memory project and workspace, and a sweep collects
|
|
357
|
+
delayed observations.
|
|
358
|
+
- **Every compiled prompt opens with the operating model** for the agent's
|
|
359
|
+
kind.
|
|
360
|
+
- **Scheduling goes through `tldr-agents tasks`**, and nightly jobs register
|
|
361
|
+
with `schedule --merge`, so a re-register keeps operator edits.
|
|
362
|
+
|
|
363
|
+
### Fixed
|
|
364
|
+
|
|
365
|
+
- **A scheduled run for a missing agent skips instead of failing.** Under a
|
|
366
|
+
scheduler job id, `academy run` and `academy nightly` print one `helm.skip`
|
|
367
|
+
line (`agent_not_found`), log `run.agent_missing`, and exit 0, so the
|
|
368
|
+
scheduler records a skip and launches no fallback session. A run without a
|
|
369
|
+
job id still exits 1 with the not-found message.
|
|
370
|
+
- **Owner status emails name the agent and the run.** The `owner-work` skill
|
|
371
|
+
starts each subject with the agent's name and says in its first body line
|
|
372
|
+
which run sent the message, in plain words.
|
|
373
|
+
- **Dependency security.** `smol-toml` moves past GHSA-r4xh-jqrq-34v2.
|
|
374
|
+
- **Nightly robustness.** A failed, busy, or swept nightly keeps its input; a
|
|
375
|
+
Codex nightly runs outside a git repository; a report Academy judged failed
|
|
376
|
+
never seeds a checkpoint; and the verdict and seed read the report with one
|
|
377
|
+
parser.
|
|
378
|
+
- **Owner schedules.** Scheduled run flags come from the job id, an overnight
|
|
379
|
+
weekday window is read by the day it opened, and `owner_hours` is read once
|
|
380
|
+
for both the daily cron and the heartbeat guard.
|
|
381
|
+
- **Prompt rendering.** The shared system prompt is written atomically, and a
|
|
382
|
+
failed write removes its temp file.
|
|
383
|
+
- **`create` errors.** `create` reports the scheduler's error envelope instead
|
|
384
|
+
of its log line.
|
|
385
|
+
- **Curator nightly.** It works in the foreground, writes its report before
|
|
386
|
+
any email, and states a failed report.
|
|
387
|
+
|
|
388
|
+
### Removed
|
|
389
|
+
|
|
390
|
+
- **`principal-memory` and `self-update` skills.** Routing moves into the
|
|
391
|
+
operating model, and graduation rules move into the nightly skills.
|
|
392
|
+
- **Internal files in the package.** The packed tarball no longer carries the
|
|
393
|
+
conformance suite or the integration guide, and the release check refuses
|
|
394
|
+
internal paths.
|
|
395
|
+
|
|
6
396
|
## 0.4.0 — 2026-09-02
|
|
7
397
|
|
|
8
398
|
First stable release.
|