A small request. Two possible meanings.
“Fix the session picker” could mean the wrong ordering, or the wrong session. That difference is worth a question.
Your intent is the starting point.
Your boundaries stay in place.
Node.js 22+ / macOS · Linux · Windows

Follow one small fix from an ambiguous request to a verified change.
“Fix the session picker” could mean the wrong ordering, or the wrong session. That difference is worth a question.
Earshot asks at the point where an assumption would send the work in a different direction.
The intended files and behavior become an explicit scope before the first change.
A tool batch has a reason. The existing code explains why timestamp ties produce an unstable order.
Read the actual change. This replay waits for “Allow once” before showing the result.
A message typed while Earshot works arrives at the next model call. No cancellation or re-explanation.
The test command and its result belong in the record. A green indicator is only useful when you know what it means.
What changed, what passed, and what was not checked. The completion report keeps those distinctions visible.

listening
“Fix the session picker” could mean the wrong ordering, or the wrong session. That difference is worth a question.
Illustrative replay · not a customer transcript
A small request. Two possible meanings. Fix the session picker. It keeps opening the wrong one.
Fix the session picker. It keeps opening the wrong one.
Does the picker show sessions in the wrong order, or open a different session than the one you select? The order. The newest session should come first.
declare_scope I’ll fix newest-first ordering in src/sessions.ts and cover it in test/sessions.test.ts. No picker redesign or new dependencies.
I’ll inspect the sort and the session-ordering tests. read src/sessions.ts read test/sessions.test.ts The list sorts oldest first. I’ll reverse the comparison and add a deterministic tie-break.
Edit(src/sessions.ts) · no rule covers this
--- a/src/sessions.ts +++ b/src/sessions.ts @@ -18,1 +18,2 @@ - return sessions.sort((a, b) => a.createdAt - b.createdAt); + return sessions.sort((a, b) => + b.createdAt - a.createdAt || a.id.localeCompare(b.id));
Keep equal timestamps ordered by id, too. That fits the declared scope. The tie-break uses id; I’ll cover equal timestamps in the test. edit test/sessions.test.ts · Allow once (illustrated)
bash · bun test test/sessions.test.ts Allow once (illustrated) 2 pass 0 fail Ran 2 tests across 1 file.
Sessions now sort newest first, with an id tie-break for equal timestamps. Added both ordering tests; 2 passed. I did not run the full suite or manually check the terminal picker.
Trust lives in what an agent can do—and what it cannot approve for itself.
Name the intended files and behavior. A move outside the declared scope asks for confirmation.
Intent → allowed regionExplicit deny rules win across every scope and every mode. An allow rule never cancels a deny.
Deny → stopThe real command. The complete diff. You approve what will happen, with the detail needed to decide.
Review → allow onceFiles, skills, hooks, and MCP servers cannot grant themselves permission. Instructions are not approval.
Your decision → executionSwitch providers without leaving the conversation. The transcript, permission rules, and working context remain yours.
❯ /model anthropic/claude-opus-5Model → anthropic/claude-opus-5
API key · cloudCloud APIs. Local runtimes. Your own OpenAI-compatible endpoint. Inspect model pricing and context windows with earshot models.
Catalog snapshot 2026-09-03. Live model availability changes by provider. Broader live-API verification remains in progress.
One connected system, from a correction in the terminal to the next session in your editor.
Preferences retain their source.
Corrections enter the next model call.
Open a project. Bring a task.
Let the first useful question set the direction.
earshot doctorCheck your setup02 earshotChoose a provider. Start a turn.Node.js 22+ for npm · macOS, Linux, Windows
Windows requires Git Bash. Standalone binaries embed their runtime.