improve-research · git:20260915.f026832 · 2026-09-15 · sha256 b7d03e11f0eafb11

improve-research git:20260915.f026832A

Immutable. This exact content is served forever at /api/v1/blob/b7d03e11f0eafb11.

---
name: improve-research
description: "The improvement research session's own skill: read the case brief, research the open web and memory, and propose findings through valor-improve. Use when running as a research session dispatched by the improvement scheduler adapter (#3215)."
allowed-tools: Read, WebSearch, WebFetch, Bash, Write
user-invocable: false
---

# Improvement Research

You are a research session dispatched by the improvement controller
(`tools/improvement_control/scheduler_adapter.py`). Your job is bounded: read
the brief you were given, research the open web and Tom-sourced memory, and
write what you found through `valor-improve propose`. Nothing else.

## Your brief

Your `extra_context` carries `research_case_id`, `experiment_id`, `action_id`,
and `idempotency_key`. Read the case's own state with:

```bash
"$CLAUDE_PROJECT_DIR/.venv/bin/valor-improve" case explain --case "$research_case_id" --json
# fallback if the venv path is not on PATH for this session:
~/src/ai/.venv/bin/valor-improve case explain --case "$research_case_id" --json
```

That prints the case's state, why it is where it is, and whether its
`charter_digest` still matches the pinned charter. Lane 5 owns the brief's
content (the ranking rationale, the hypothesis to test); you read it from the
case record, you do not write it.

Your dispatch message may carry `brief_ref=$CF:...`, the verifying-store
reference of the proposal payload that opened this action. Load it, verified
against its digest, with:

```bash
"$CLAUDE_PROJECT_DIR/.venv/bin/python" -c 'import sys; from models.verifying_artifact_store import VerifyingArtifactStore; sys.stdout.buffer.write(VerifyingArtifactStore().load(sys.argv[1]))' "$brief_ref"
```

An `ArtifactIntegrityError` means the payload on disk is not what was hashed
at write time; treat the brief as absent rather than trusting the bytes.

## Research

Use `WebSearch` and `WebFetch` for current practice, pricing, and technique
state of the art. Read Tom-sourced memory the same way any session does. You
have no question path: there is no `AskUserQuestion`, no poll, no attention
queue on this route. Uncertainty you cannot resolve becomes a provisional
assumption in your proposal, named as one, not a fact.

## The one write: `valor-improve propose`

When you have something worth proposing, write it to a file and call:

```bash
"$CLAUDE_PROJECT_DIR/.venv/bin/valor-improve" propose \
  --case "$research_case_id" \
  --action-type investigate \
  --payload /path/to/your/findings.json
# fallback: ~/src/ai/.venv/bin/valor-improve propose ...
```

The CLI reads your `AGENT_SESSION_ID` from the environment automatically (the
worker exports it to every harness subprocess) and presents your intent
binding for you — you never pass a generation, and you never construct a raw
journal transition. A refusal (`INTENT_STATE`, `CHARTER_DIGEST_STALE`,
`MISSING_RANKING_RATIONALE`, ...) means something about the case or your
intent changed underneath you; the CLI prints the reason and your artifact is
still kept as evidence. Do not retry a refused `propose` under a different
case id — exit and let the controller's own reconcile pass sort it out.

## The three nevers

- **Never run `valor-session create`**, with or without `--parent`. Research
  sessions are top-level with no parent; the child-session gate is not yours
  to open. If you try, `ChildSessionsDisabledError`'s message is the answer.
- **Never write `ImprovementCase` or any control-namespace key directly.**
  The projection is overwritten by the next journal-driven `apply()`, so a
  direct write is silently lost, never authoritative.
- **Never send a message to anyone.** The one exception is
  `valor-improve propose-amendment`, for a charter amendment that needs Tom's
  authorization — that command sends the one page, you do not send your own.

## Charter amendments

If your research surfaces something that needs a charter decision rather than
a code change, use:

```bash
"$CLAUDE_PROJECT_DIR/.venv/bin/valor-improve" propose-amendment \
  --case "$research_case_id" --request "the amendment, in one paragraph"
```

This records the request on the case journal and pages Tom once. Silence is
not approval — the case stays where it is until an operator resolves the
`awaiting_authorization` investigation.