Skip to content

Commit 531910e

Browse files
Merge pull request #203 from EvolvingAgentsLabs/ccr-c0eed325-5wd271
repo: CLAUDE.md, the director plugin enabled here, and a memory compiled for this repository
2 parents 4126295 + 034f026 commit 531910e

11 files changed

Lines changed: 331 additions & 1 deletion

File tree

‎.claude-plugin/marketplace.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"name": "director",
88
"source": "./packages/director",
99
"description": "Your CLAUDE.md, actually followed: compile your instructions into linked atomic statements, plan every task by walking them, and learn from corrections through gated, versioned edits.",
10-
"version": "0.2.4",
10+
"version": "0.2.5",
1111
"category": "productivity"
1212
}
1313
]

‎.claude/settings.json‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"extraKnownMarketplaces": {
3+
"evolvingagentslabs": {
4+
"source": { "source": "github", "repo": "EvolvingAgentsLabs/evolving-agents" }
5+
}
6+
},
7+
"enabledPlugins": {
8+
"director@evolvingagentslabs": true
9+
}
10+
}

‎.director/.gitignore‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Only the memory is shared through the repository; the journal, proposals and checks stay local.
2+
*
3+
!.gitignore
4+
!memory/
5+
!memory/**

‎.director/memory/Director_Code.md‎

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
# Director_Code
2+
Rules for changing the director's code, plugin and the independent benchmark.
3+
4+
## #memory_stdlib_only
5+
**When:** editing or adding an import in `director/memory/`.
6+
**Do:** Use only the Python standard library.
7+
**Because:** `director/memory/` is standard library only.
8+
**Links:** [[Director_Code#memory_no_model_calls]] · [[Director_Code#memory_no_package_imports]]
9+
10+
## #memory_no_model_calls
11+
**When:** writing code in `director/memory/`.
12+
**Do:** Never call a model from it.
13+
**Because:** The memory module never calls a model.
14+
**Links:** [[Director_Code#memory_stdlib_only]] · [[Director_Code#memory_no_package_imports]]
15+
16+
## #memory_no_package_imports
17+
**When:** about to import something from the rest of the director package inside `director/memory/`.
18+
**Do:** Don't; `director/memory/` imports nothing from the rest of the package. Keep `tests/test_memory_boundary.py` passing.
19+
**Because:** `tests/test_memory_boundary.py` holds this boundary.
20+
**Links:** [[Director_Code#memory_stdlib_only]] · [[Director_Code#run_tests_before_push]]
21+
22+
## #lessons_through_gate
23+
**When:** writing or changing an interface that accepts a lesson into memory.
24+
**Do:** Route the lesson through `memory.gate`.
25+
**Because:** Every interface accepts a lesson through `memory.gate`.
26+
**Links:** [[Director_Code#person_yes_required]] · [[Director_Code#headless_records_policy]]
27+
28+
## #person_yes_required
29+
**When:** a lesson is about to be accepted into memory from an interactive interface.
30+
**Do:** Require the person's yes (`memory_accept`) before accepting it.
31+
**Because:** A person's yes is required to accept a lesson.
32+
**Links:** [[Director_Code#lessons_through_gate]] · [[Director_Code#headless_records_policy]]
33+
34+
## #headless_records_policy
35+
**When:** a lesson is accepted through `director.headless`, where no person answers.
36+
**Do:** Record `decided_by: policy:<name>` on it instead of a person's yes.
37+
**Because:** `director.headless` is the one exception to the person's-yes rule.
38+
**Links:** [[Director_Code#person_yes_required]]
39+
40+
## #run_tests_before_push
41+
**When:** about to push a change to the director.
42+
**Do:** Run `cd packages/director && python -m pytest tests -q`; expect the 3 agentvcs tests to skip if the Rust CLI is absent.
43+
**Because:** Required before pushing a director change; the 3 agentvcs tests skip without the Rust CLI.
44+
**Links:** [[Director_Code#validate_plugin_before_push]] · [[Privacy#never_commit_key_or_private_term]]
45+
46+
## #validate_plugin_before_push
47+
**When:** about to push a change that touches the plugin.
48+
**Do:** Also run `claude plugin validate .` and `claude plugin test .`.
49+
**Because:** Required before pushing a plugin change.
50+
**Links:** [[Director_Code#run_tests_before_push]] · [[Director_Code#bump_both_versions]]
51+
52+
## #bump_both_versions
53+
**When:** making any change to the plugin.
54+
**Do:** Bump `version` in `packages/director/.claude-plugin/plugin.json` and in the root `.claude-plugin/marketplace.json`, together in the same change.
55+
**Because:** The two versions must move together.
56+
**Links:** [[Director_Code#validate_plugin_before_push]]
57+
58+
## #bench_no_director_imports
59+
**When:** editing code in `benchmarks/director-bench/`.
60+
**Do:** Never import director code; drive the director only as one configuration that calls its CLI.
61+
**Because:** The benchmark is independent of the director.
62+
**Links:** [[Director_Code#bench_tests_in_place]]
63+
64+
## #bench_tests_in_place
65+
**When:** testing a change to `benchmarks/director-bench/`.
66+
**Do:** Run its tests in place: `cd benchmarks/director-bench && python -m pytest -q`; don't expect the repository's CI to run them.
67+
**Because:** Its tests are not part of this repository's CI.
68+
**Links:** [[Director_Code#bench_no_director_imports]]

‎.director/memory/Index.md‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Index
2+
- Starting a task and deciding where the work goes → [[Scope#active_project_director]]
3+
- About to edit something in legacy/, ai-os/, plugin/, packages/memory/ or packages/agentvcs/ → [[Scope#leave_legacy_alone]]
4+
- About to launch a run, eval or anything that spends money or calls a model → [[Measurements#brief_before_run]], [[Measurements#brief_contents]], [[Measurements#verdict_fixed_before_run]]
5+
- About to measure whether a change is an improvement → [[Measurements#headroom_first]], [[Measurements#compare_against_replaced]]
6+
- Baseline came back near the ceiling → [[Measurements#stop_at_ceiling]]
7+
- Run finished; writing up the result → [[Measurements#record_result_in_brief]], [[Measurements#name_planner_and_judge]], [[Writing#update_citing_docs]]
8+
- Result is below the bar, or tempted to change the bar → [[Measurements#flat_result_published_flat]], [[Measurements#verdict_fixed_before_run]]
9+
- Reporting numbers measured with Sonnet → [[Measurements#label_sonnet_numbers]]
10+
- Run used one seed or a handful of cases → [[Measurements#smoke_run_not_measurement]]
11+
- Saving memory, plans, transcripts or lanes config → [[Privacy#private_stays_private]]
12+
- Writing a public file or publishing run results → [[Privacy#placeholders_for_private_names]], [[Privacy#publish_scores_only]]
13+
- About to commit → [[Privacy#never_commit_key_or_private_term]]
14+
- Public guard refused a commit → [[Privacy#respect_public_guard]]
15+
- Editing code in director/memory/ → [[Director_Code#memory_stdlib_only]], [[Director_Code#memory_no_model_calls]], [[Director_Code#memory_no_package_imports]]
16+
- Writing an interface that accepts lessons into memory → [[Director_Code#lessons_through_gate]], [[Director_Code#person_yes_required]], [[Director_Code#headless_records_policy]]
17+
- About to push a director change → [[Director_Code#run_tests_before_push]]
18+
- Changing or pushing the plugin → [[Director_Code#bump_both_versions]], [[Director_Code#validate_plugin_before_push]]
19+
- Working in benchmarks/director-bench/ → [[Director_Code#bench_no_director_imports]], [[Director_Code#bench_tests_in_place]]
20+
- Writing a doc or code comment → [[Writing#plain_outcome_first]], [[Writing#numbers_carry_brief_link]]

‎.director/memory/Measurements.md‎

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
# Measurements
2+
How runs that spend money or call models are planned, compared, judged and recorded.
3+
4+
## #brief_before_run
5+
**When:** about to launch anything that spends money or calls a model on the lab's behalf (a run, eval, benchmark).
6+
**Do:** First write `packages/director/docs/BRIEF-<ID>.md`; do not start the run until it exists.
7+
**Because:** The lab requires a brief before any run.
8+
**Links:** [[Measurements#brief_contents]] · [[Measurements#verdict_fixed_before_run]] · [[Measurements#headroom_first]]
9+
10+
## #brief_contents
11+
**When:** writing a `BRIEF-<ID>.md` before a run.
12+
**Do:** Include: what is run, why, the model and provider, the verdict table, what would falsify it, the stopping condition and a spending cap.
13+
**Because:** These are the required parts of a brief.
14+
**Links:** [[Measurements#brief_before_run]] · [[Measurements#verdict_fixed_before_run]] · [[Measurements#name_planner_and_judge]]
15+
16+
## #record_result_in_brief
17+
**When:** a run has finished (or been stopped) and its result is known.
18+
**Do:** Write the result into the same brief under `## Result` / `## Outcome`, dated, stating what was spent.
19+
**Because:** The brief is the single record of a run, and the public site checks its numbers against the briefs.
20+
**Links:** [[Writing#update_citing_docs]] · [[Measurements#flat_result_published_flat]] · [[Measurements#smoke_run_not_measurement]]
21+
22+
## #verdict_fixed_before_run
23+
**When:** setting the bar that decides whether a run succeeded, or tempted to adjust it after seeing numbers.
24+
**Do:** Fix the verdict table in the brief before the run, and never move it after seeing the numbers.
25+
**Because:** The lab rule: the verdict table is fixed before the run.
26+
**Links:** [[Measurements#brief_contents]] · [[Measurements#flat_result_published_flat]]
27+
28+
## #flat_result_published_flat
29+
**When:** a result came in below the bar of the verdict table and you are writing it up.
30+
**Do:** Publish it as flat; never reword it into a win.
31+
**Because:** The lab rule: a result below the bar is published as flat.
32+
**Links:** [[Measurements#verdict_fixed_before_run]] · [[Measurements#record_result_in_brief]]
33+
34+
## #headroom_first
35+
**When:** about to measure whether a change improves something.
36+
**Do:** Measure the baseline first, before measuring the improvement.
37+
**Because:** If the baseline is already near the ceiling there is no room to show an improvement.
38+
**Links:** [[Measurements#stop_at_ceiling]] · [[Measurements#brief_before_run]]
39+
40+
## #stop_at_ceiling
41+
**When:** the baseline you just measured is already near the ceiling.
42+
**Do:** Stop the measurement and say so in the write-up.
43+
**Because:** C0, D0O and PG were stopped there for this reason.
44+
**Links:** [[Measurements#headroom_first]] · [[Measurements#record_result_in_brief]]
45+
46+
## #compare_against_replaced
47+
**When:** choosing what to compare a new version against in a measurement.
48+
**Do:** Compare against the version it replaces; never against a frontier model alone.
49+
**Because:** The lab rule for measurements.
50+
**Links:** [[Measurements#name_planner_and_judge]] · [[Measurements#brief_contents]]
51+
52+
## #name_planner_and_judge
53+
**When:** writing up a measurement or its brief.
54+
**Do:** State which model planned and which model judged.
55+
**Because:** Results depend on the models used; since 2026-10-21 the person plans with Opus.
56+
**Links:** [[Measurements#label_sonnet_numbers]] · [[Measurements#compare_against_replaced]]
57+
58+
## #label_sonnet_numbers
59+
**When:** reporting or citing numbers that were measured with Sonnet.
60+
**Do:** Label them as Sonnet's numbers.
61+
**Because:** Since 2026-10-21 the person plans with Opus, so Sonnet numbers must not be read as the current setup's.
62+
**Links:** [[Measurements#name_planner_and_judge]]
63+
64+
## #smoke_run_not_measurement
65+
**When:** a run used one seed or only a handful of cases (a smoke run) and you are writing it up.
66+
**Do:** Treat it as deciding nothing, and say in the write-up that it is a smoke run, not a measurement.
67+
**Because:** One seed or a handful of cases decides nothing.
68+
**Links:** [[Measurements#record_result_in_brief]]

‎.director/memory/Privacy.md‎

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# Privacy
2+
What stays private, what may be published, and how commits are guarded.
3+
4+
## #private_stays_private
5+
**When:** about to save or move the lab's memory, plans, transcripts or lanes config.
6+
**Do:** Keep them in the private locations, `~/.config/director/` or a project's `.director/`, never in public files.
7+
**Because:** The lab's memory, plans, transcripts and lanes config are private.
8+
**Links:** [[Privacy#placeholders_for_private_names]] · [[Privacy#never_commit_key_or_private_term]]
9+
10+
## #placeholders_for_private_names
11+
**When:** writing a public file that would mention a private name.
12+
**Do:** Use a placeholder instead of the private name.
13+
**Because:** Public files use placeholders for private names.
14+
**Links:** [[Privacy#publish_scores_only]] · [[Privacy#never_commit_key_or_private_term]]
15+
16+
## #publish_scores_only
17+
**When:** publishing what a run produced.
18+
**Do:** Publish its scores; keep transcripts, plans and memory private.
19+
**Because:** What a run publishes is its scores.
20+
**Links:** [[Privacy#private_stays_private]] · [[Measurements#record_result_in_brief]]
21+
22+
## #never_commit_key_or_private_term
23+
**When:** about to commit any change.
24+
**Do:** Check that it contains no key and no private term; never commit one.
25+
**Because:** Keys and private terms must not become public.
26+
**Links:** [[Privacy#respect_public_guard]] · [[Director_Code#run_tests_before_push]]
27+
28+
## #respect_public_guard
29+
**When:** the plugin's public guard refuses a commit.
30+
**Do:** Remove the key or private term it flagged; do not work around the guard.
31+
**Because:** The guard exists to refuse such commits.
32+
**Links:** [[Privacy#never_commit_key_or_private_term]]

‎.director/memory/README.md‎

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# The operational memory's format
2+
3+
The memory is a small wiki of **operational** knowledge — how the lab works — in the shape of the lab's
4+
memory design: a **page** is a collection of **atomic statements**, the smallest verifiable unit; links live
5+
inside statements, and a task is planned by walking from an entry statement along its links. Encyclopedic
6+
facts (what a project is, what a number was) appear only as support for an operational statement.
7+
8+
## Files
9+
10+
```
11+
memory/
12+
Index.md situations → entry statements (where a walk starts)
13+
<Page_Name>.md one page per subject: a practice, a tool, a project, a kind of task
14+
```
15+
16+
## A page
17+
18+
```markdown
19+
# Experiment_Briefs
20+
How an experiment is set up before anything runs.
21+
22+
## #brief_before_run
23+
**When:** a run on Colab, a GPU, a paid API or the user's machine is about to start.
24+
**Do:** write `results/<run>/BRIEF.md` first — what, why, model, provider, what falsifies it, the verdict table, the stopping condition.
25+
**Because:** the briefing goes before the `nohup`, not beside the report (user's rule).
26+
**Links:** [[Measurement#headroom_first]] · [[Colab#one_session_one_training]]
27+
```
28+
29+
- A statement id is `Page_Name#snake_case`, unique, stable once written.
30+
- **When** is the trigger, phrased as a situation an agent will recognise mid-task, not as a topic.
31+
- **Do** is an action, concrete enough to check: a command, a file, a question to the user, a refusal.
32+
- **Because** is the reason or the evidence (a run, an incident, the user's decision), so a statement can
33+
be verified or retired.
34+
- **Links** name the statements that apply next or alongside; a walk follows them while they apply.
35+
36+
## Index.md
37+
38+
One line per situation, pointing at the statements a walk should start from:
39+
40+
```markdown
41+
- About to launch a run (Colab, GPU, paid API, local model) → [[Experiment_Briefs#brief_before_run]], [[Local_Hardware#ask_before_heavy_runs]]
42+
```
43+
44+
## What a walk is
45+
46+
Index → the matching entry statements → their links, while each applies → a plan whose actions cite the
47+
statements they follow (`[[Page#id]]`). A plan that cites nothing either found no applicable statement and
48+
says so, or did not walk.

‎.director/memory/Scope.md‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Scope
2+
Which parts of the repository are active and which must be left alone.
3+
4+
## #active_project_director
5+
**When:** starting a task in the evolving-agents repository and deciding where the work belongs.
6+
**Do:** Do the work in the director, `packages/director/`; it is the active project.
7+
**Because:** The lab states the director is the active project; everything else is legacy, paused or frozen.
8+
**Links:** [[Scope#leave_legacy_alone]] · [[Director_Code#run_tests_before_push]]
9+
10+
## #leave_legacy_alone
11+
**When:** about to edit a file under `legacy/`, `ai-os/`, `plugin/`, `packages/memory/` or `packages/agentvcs/`.
12+
**Do:** Do not change it unless the person explicitly asked for that change.
13+
**Because:** These directories are legacy, paused or frozen.
14+
**Links:** [[Scope#active_project_director]]

‎.director/memory/Writing.md‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Writing
2+
How docs and comments are written and kept in sync with runs.
3+
4+
## #plain_outcome_first
5+
**When:** writing a doc or a code comment.
6+
**Do:** Use plain words, put the outcome first, keep it short.
7+
**Because:** The lab's writing rule.
8+
**Links:** [[Writing#numbers_carry_brief_link]]
9+
10+
## #numbers_carry_brief_link
11+
**When:** putting a number (a score or result) in a doc.
12+
**Do:** Attach the link to the brief it came from.
13+
**Because:** Numbers carry their brief link; the public site checks its numbers against the briefs.
14+
**Links:** [[Measurements#record_result_in_brief]] · [[Writing#update_citing_docs]]
15+
16+
## #update_citing_docs
17+
**When:** something has run and its result is recorded.
18+
**Do:** In the same change, update every doc that cites it: the brief, `packages/director/README.md`, `ROADMAP.md`, `docs/EVOLUTION.md` and the RUNBOOK.
19+
**Because:** The public site (`evolvingagentslabs.github.io`) checks its numbers nightly against the briefs.
20+
**Links:** [[Measurements#record_result_in_brief]] · [[Writing#numbers_carry_brief_link]]

0 commit comments

Comments
 (0)