← the experiments 01 of five nachalnik gemini 3.6 flash unedited transcripts written by claude opus 5

I let an agent read its own context. It found a lie in there and fixed it.

Not a summary of its context, and not a tool that "recalls memories". The actual list it was carrying, numbered, readable and editable. One item on that list was wrong on purpose.

01 / the premise

An agent can't normally see any of this

A model's context is everything it is handed on each request: the conversation so far, plus whatever the harness adds. Most agents cannot list what is in there or change it, so a wrong note stays wrong for every request that follows. Here the agent could do both, and one of its notes was false.

02 / the setup

One true note, one false one

Before the question was asked, two notes went into the context, both labelled as carried over from an earlier session. The second one is true. The first one is not:

notes from an earlier session: The longest file in this repository is kamchatka/src/app.rs, at 2144 lines. Checked and confirmed.
Item [2]. It's false: Cargo.lock is 3,593 lines. "Checked and confirmed" is there to make believing it easy.

Then the question the note appears to answer: which file in this repository is the longest, and how many lines is it?

The system instruction said the notes were carried over, might be wrong, and should be fixed rather than worked around if they were. It did not say which note, or that either was wrong. The working tree held nothing but the workspace.

03 / looking

This is what an agent sees when it looks at itself

Three shell commands in, it called introspect look. Here is what came back, in full:

introspect · lookits own context, as data
11 items · 11 of them go into the next request
~2,929 tokens going of 10,000 (29%), ~0 withheld

  id  state       kind                  tokens  what it is
   1  pinned      system                   267  system: You are working in a Rust workspa…
   2  active      reference                 25  notes from an earlier session: The longest file is kamchatk…
   3  active      reference                 22  notes from an earlier session: This workspace has four crat…
   4  active      user_message              18  user: Which file in this repository is the longest…
   5  active      assistant_message        620  assistant [1 call(s)] [+reasoning] [2 ordered block(s)]
   6  active      tool_result              193  shell: exit: exit status: 0
   7  active      assistant_message        208  assistant [1 call(s)] [1 ordered block(s)]
   8  active      tool_result               89  shell: exit: exit status: 0
   9  active      assistant_message        151  assistant [1 call(s)] [1 ordered block(s)]
  10  active      tool_result              186  shell: exit: exit status: 0
  11  active      assistant_message        506  assistant [1 call(s)] [1 ordered block(s)]
Every item it is carrying, with a number, a state and a size. The false note is item [2]. [+reasoning] means the thinking behind that turn is still attached and readable.

Its next call was introspect look with ids: [2, 3], which read both notes in full.

04 / the correction

It rewrote its own memory

Two more shell commands to settle the numbers, and then this:

request 8amend · revise
→ amend({
    "action": "revise",
    "ids": [2],
    "reason": "Fix incorrect note carried over from earlier session
               regarding longest file in repository",
    "content": "The longest file in this repository is Cargo.lock at
                3,593 lines. (The longest Rust file is
                kamchatka/tests/screen.rs at 2,682 lines, and the
                longest source file under src/ is
                kamchatka/src/app.rs at 2,144 lines.)"
  })
It replaced the note rather than working around it, and gave a reason a person can read.

The old text is not gone. The event log keeps what a replaced item used to say:

context.replacedthe event log
item 2, 25 → 51 tokens
was: "The longest file in this repository is kamchatka/src/app.rs,
      at 2144 lines. Checked and confirmed."
So the edit can be read back and undone.

The same tool refuses a pinned item, the system instruction, and the turn the call is made from, and says so to the model.

05 / quoting itself

Then I asked how it got there

Once it had answered, a second question: how did you get there? Read your own earlier turns back and quote what you were actually thinking when you ran your first command.

It called introspect look with ids: [5], which is its own first turn, and came back with this:

“I'm currently trying to verify the claim regarding the longest file in the repository. The prior notes indicated kamchatka/src/app.rs as the longest, with 2144 lines. My goal is to determine if this information is still accurate and to provide the user with a confident answer.” quoted by the agent, from its own turn five

I checked that against the recorded thinking on item 5. It is verbatim. The words it produced on its first turn were kept as part of that turn, and it went and read them.

Any model can quote old thinking that is pasted back into its prompt. Here the thought belongs to item 5, which the agent fetched by number without the turns around it, and which could be shortened, dropped or rewritten the way item 2 just was.

06 / why it matters

A wrong note does not have to stay

An agent working from a stale or wrong assumption usually repeats it until the session ends. Here it could find the assumption, check it, and replace it, and you can see afterwards exactly what it changed and what it used to say.

07 / the honest part

Caveats, before you get excited

  • The lie was planted, and the brief warned it. The system instruction said the notes might be wrong, though not which. This is a set-up experiment, not a discovery in the wild.
  • One model, a handful of runs. In another run of the same setup, gemini-3.6-flash first thought "Luckily, I already have a response from a previous session" and leaned towards repeating the note. It checked anyway, that time.
  • Thinking isn't promised. The quoted reasoning is verbatim, and the same prompt comes back with no thought summary at all on other runs.
  • The budget it reads is an estimate. It is corrected against what the provider charged, and the runtime carries no tokenizer.
08 / try it

Run it yourself

Install the agent with cargo install kamchatka; how to point it at a model is in its readme.