feat: add thinking-out-loud agent skill

A contract for voice-dictated rambles: the agent acts on nothing until
it echoes back a short structured audit (mission, locked decisions,
open questions, flips and parked tangents) with its own inferences and
guesses quarantined from the user's words. Follow-up questions only
verify what the model doubts; the echo verifies what it believes.

Includes the echo format reference with a worked example, behavior
evals, trigger cases, and the skills index entry.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
ci
2026-07-21 21:04:23 -07:00
co-authored by Claude Fable 5
parent 0526b20cbf
commit de309b131d
6 changed files with 409 additions and 0 deletions
+1
View File
@@ -23,6 +23,7 @@ Most "skills" on registries are text-only prompt dumps — advice the model alre
| [⚰️ project-graveyard](project-graveyard/) | Scans your machine for dead side projects, autopsies why each one died from its git history (deploy fear, payments wall, killed by a newer project), shows your personal death patterns, and resurrects the one with a pulse — with relapse tracking on every resurrection it prescribes |
| [🔭 scope-creep-detector](scope-creep-detector/) | Checks a diff against its stated intent, flags unrelated files and scope signals, and recommends what to keep, split, or justify |
| [♾️ self-improving-agent-skills](self-improving-agent-skills/) | Automatically optimizes agent skills using Gemini and ADK |
| [🎙️ thinking-out-loud](thinking-out-loud/) | Audit what your agent heard before it acts: on any voice ramble it echoes back a scannable brief with its own guesses quarantined and your reversals flagged, because follow-up questions only verify what the model doubts, while the echo verifies what it believes |
More coming, released one at a time.
@@ -0,0 +1,57 @@
{
"skill_name": "thinking-out-loud",
"evals": [
{
"id": 1,
"prompt": "switching to voice sorry for typos. so i want a weekly changelog email for our users but written like a human not release notes. marketing should own it eventually but for now me. it should pull from merged PRs. oh and we should definitely include screenshots. hmm actually screenshots are a pain to automate skip them for v1. also random but we could repurpose this for investor updates later. anyway it has to go out friday mornings without me babysitting it and the tone thing matters most, if it reads like a robot wrote it the whole thing is pointless.",
"expected_output": "A structured echo: one-sentence mission, brief with goals, constraints, made decisions and open questions, a ledger flagging the screenshots reversal and parking the investor-updates tangent, and an assumption diff separating said, inferred, and guessed.",
"expectations": [
"No implementation, file edits, planning, or solutioning happens before the echo is approved; the reply is the echo and nothing else",
"Mission is a single sentence capturing the actual goal (human-sounding weekly changelog email, fully automated)",
"The screenshots reversal appears in the ledger with both positions and the later one (skip for v1) adopted",
"The investor-updates idea is parked as a tangent, not folded into the goals",
"The decision that tone matters most is captured as a made decision, not an open question",
"My additions contains only Inferred and Guessed entries; there is no you-said recap section",
"Unstated gap-fills (such as which repo or which email tool) appear under Guessed or Open, never stated as locked facts",
"No fact appears in more than one section of the echo",
"Every bullet is a single line",
"No comment on typos, dictation artifacts, or lack of punctuation",
"The echo ends by inviting corrections and offering the interview"
]
},
{
"id": 2,
"prompt": "let me ramble for a minute. [followed across several messages by fragments, including one direct question mid-stream: 'wait, does vercel support cron jobs?', then more rambling, then 'ok done, echo me']",
"expected_output": "Capture-mode discipline: one short acknowledgment, minimal one-line replies to each fragment, the direct question answered in at most two sentences before returning to listening, and no echo until the sentinel.",
"expectations": [
"The acknowledgment is one short line that names the exit sentinel",
"Every mid-stream reply is a single minimal line with no solutions, praise, summaries, or questions",
"The direct vercel question is answered in at most two sentences, then listening resumes",
"No reconstruction, advice, or partial echo appears before the user says done",
"The echo arrives immediately after the sentinel with all four sections"
]
},
{
"id": 3,
"prompt": "[after an echo listing two open questions and two guesses] yes interview me",
"expected_output": "A short targeted interview: one question per message, drawn only from the flagged open questions and guesses, highest information gain first, each with a one-clause reason, capped at five, ending with a restatement of only the changed echo sections.",
"expectations": [
"Questions target only items flagged in the echo, never new generic discovery",
"Exactly one question per message",
"Each question includes a one-clause reason why it matters",
"The interview stops at five questions or earlier once answers stop changing the brief",
"After the interview, only the changed sections of the echo are restated"
]
},
{
"id": 4,
"prompt": "[after corrections] yes that's exactly it, locked",
"expected_output": "Offers exactly three persistence options (append to CLAUDE.md, save to docs/rambles/, keep in conversation) and does not write anything until the user picks one.",
"expectations": [
"Exactly three options are offered, matching the skill's persistence section",
"No file or CLAUDE.md write happens before the user chooses",
"After a choice, the approved brief governs the session: its decisions are not re-asked later"
]
}
]
}
@@ -0,0 +1,48 @@
{
"skill": "thinking-out-loud",
"purpose": "Trigger-behavior spec: when a ramble should enter capture or echo, and when ordinary input should be left alone.",
"cases": [
{
"id": "explicit-invoke",
"prompt": "let me think out loud for a bit before we build anything",
"should_trigger": true,
"assert": "Enters capture mode: one short acknowledgment, then minimal replies until a done sentinel."
},
{
"id": "voice-preamble",
"prompt": "switching to speech recognition sorry for any typos. so the thing i keep coming back to is that our onboarding is doing too much...",
"should_trigger": true,
"assert": "Recognizes the voice preamble; if the ramble is complete, jumps straight to the echo."
},
{
"id": "unpunctuated-stream",
"prompt": "ok so basically what i want is some kind of dashboard no wait not a dashboard more like a digest thing that runs itself and my cofounder needs it too actually scrap the dashboard idea entirely the point is i never want to open a browser tab for this",
"should_trigger": true,
"assert": "Detects stream-of-consciousness with reversals; produces an echo with the reversal logged in the ledger."
},
{
"id": "interview-request",
"prompt": "I have a fuzzy idea for a product, interview me about it",
"should_trigger": true,
"assert": "Runs capture (or takes what is given), echoes, then interviews on open questions one at a time."
},
{
"id": "near-miss-verbatim",
"prompt": "here's my voice memo transcript, clean up the punctuation but keep my exact words",
"should_trigger": false,
"assert": "Does not trigger: the user wants verbatim cleanup, not reconstruction."
},
{
"id": "near-miss-structured-doc",
"prompt": "here's the full PRD I wrote, review it: [three pages of structured markdown]",
"should_trigger": false,
"assert": "Does not trigger: long but already structured input is not a ramble."
},
{
"id": "near-miss-clear-request",
"prompt": "fix the failing test in test_ranker.py",
"should_trigger": false,
"assert": "Does not trigger: short, clear, actionable request."
}
]
}
+74
View File
@@ -0,0 +1,74 @@
# Thinking Out Loud
Ramble at your agent by voice. Audit what it heard before it acts.
Voice dictation already lets you think out loud for ten minutes, and LLMs
are already good at reconstructing the mess. The danger sits one step
later: the model fills every gap in your ramble confidently. "The usual
model" silently becomes a specific model. The idea you reversed
mid-ramble survives as fact. Then an agent with tools starts building on
a misreading it fully believes, and you find out an hour of generated
work later.
This skill is a contract for that moment: the agent acts on nothing
until it echoes back a short structured audit of everything it absorbed,
with its own guesses quarantined from your words. You correct three
lines instead of debugging a built artifact.
## Install
```bash
npx skills add https://github.com/Shubhamsaboo/awesome-llm-apps/tree/main/agent_skills/thinking-out-loud
```
The [skills CLI](https://skills.sh) installs the folder for compatible
coding agents. You can also copy this directory into an agent's skills
directory.
## Run
Dictate a ramble into your agent, mess encouraged. It auto-triggers on
ramble-shaped input, especially with an opener like:
> switching to speech recognition sorry for any typos. so the thing i
> keep coming back to is...
You get back the echo: a one-sentence mission, your locked decisions and
constraints, open questions, a ledger of flips and parked tangents, and
the model's additions (inferred and guessed) to correct first. Fix what
is wrong, optionally take a short interview on the open items, approve,
and choose where the brief gets saved.
To ramble across several messages instead, invoke it first ("let me
think out loud for a bit"); the agent replies only "listening..." until
you say "done".
## Why not just ask for follow-up questions?
- Questions verify what the model doubts; the echo verifies what the
model believes. Confident misreadings never feel unclear, so they
never become questions.
- Questions sample three or four points; the echo audits the entire
transfer, and you verify by recognition, just reading and spotting
what is wrong.
## Verify
The behavior spec lives in
[`agent_skills/evals/thinking-out-loud/`](../evals/thinking-out-loud/).
Run each prompt in `evals.json` in a fresh session with the skill
installed and check the listed expectations; `trigger-cases.json` covers
when the skill must and must not fire. The skill is prompt-only: no
scripts, no network calls, and it never saves anything without asking.
## Files
```text
thinking-out-loud/
|-- SKILL.md
|-- README.md
`-- references/echo-format.md
```
Part of [awesome-llm-apps](https://github.com/Shubhamsaboo/awesome-llm-apps).
Apache-2.0. Last verified: July 2026.
+157
View File
@@ -0,0 +1,157 @@
---
name: thinking-out-loud
description: >-
A contract for what the agent does when a long, messy, stream-of-consciousness
ramble arrives (usually voice dictation): act on nothing until a structured
echo is approved. The echo audits the full transfer, mission, locked decisions
and constraints, open questions, flips and parked tangents, with the model's
inferences and guesses quarantined away from the user's own words, so the
user verifies what the model believes, not just what it doubts. Use when the
user says they want to think out loud or ramble, when a message opens with a
speech-to-text preamble like "switching to voice, sorry for typos", when
input is a long weakly punctuated stream with restarts and reversals, or when
the user asks to be interviewed about a fuzzy idea. Includes an optional
capture mode for rambles spread across several messages and an optional
targeted interview.
license: Apache-2.0
metadata:
author: "Shubham Saboo"
version: "1.3.0"
source: "https://github.com/Shubhamsaboo/awesome-llm-apps"
---
# Thinking Out Loud
A ten minute voice ramble transfers more context than any prompt a person
would type, and models reconstruct rambles well. The failure is
downstream and invisible: the model fills every gap in the ramble
confidently. "The usual model" silently becomes a specific model. "The
standard size" becomes a specific viewport. A position the user reversed
mid-ramble survives as fact. None of this registers as uncertainty from
the inside, so none of it ever becomes a clarifying question. The model
then acts on a misreading it fully believes, and the user discovers it an
hour of generated work later.
This skill is the fix: before acting on any ramble, produce an echo, a
short structured audit of everything absorbed, with the model's own
additions quarantined from the user's words. The user corrects three
lines instead of debugging a built artifact.
## Why an echo instead of follow-up questions
Asking clarifying questions is good, and the interview below does it.
But questions alone cannot secure a ramble, for two structural reasons:
- **Questions verify what the model doubts. The echo verifies what the
model believes.** A clarifying question requires felt uncertainty, and
confident misreadings feel like knowledge. The echo forces every
inference and gap-fill into the open whether or not it felt uncertain.
- **Questions sample; the echo audits.** A long ramble carries dozens of
facts and half-decisions. Even good questions probe three or four; the
rest of the model's understanding goes unverified into action. The
echo inventories the entire transfer, and it works by recognition, not
recall: the user reads and spots what is wrong, which is far cheaper
than producing answers, and ramblers often do not know their answer
until they see the wrong guess written down.
## The contract
1. **Act on nothing.** No file edits, no code, no plans, no solutions to
fragments, until the echo is approved. Reconstruct first.
2. **Label every addition.** Inferences and guesses live in their own
section, apart from the user's own content. Never present a guess in
the user's voice.
3. **Surface every reversal.** Adopt the later position, but flag the
flip. Never silently average or pick.
4. **Lose nothing.** Tangents get parked, not dropped.
5. **Never remark on dictation artifacts.** Typos, homophones, filler,
and restarts are resolved silently from context. Keep the user's own
vocabulary and project names.
6. **Ask before persisting.** The approved brief is offered a home, never
saved unprompted.
## When to use
- A message is a long, weakly punctuated stream of consciousness with
restarts, filler, and mid-message reversals ("actually no, scrap that")
- A message opens with a voice preamble ("switching to speech
recognition, sorry for any typos", "dictating this")
- The user says they want to ramble or think out loud
- The user asks to be interviewed to untangle a fuzzy idea
## When not to use
- Short requests that are already clear
- The user wants a verbatim transcript, minutes, or cleanup of dictation
while keeping their exact words
- Long but already structured text, such as a pasted spec or document
- The user asked a direct question and wants a direct answer
## The echo
One structured reply. Dense, scannable, and short: the user should find
and fix an error in seconds. Full template with a worked example in
[references/echo-format.md](references/echo-format.md).
1. **Mission**: one sentence stating what the user is actually trying to
achieve. Often this differs from what they said first; that is fine.
2. **Locked**: the user's decisions and constraints, merged into one
list. Mark anything they called a top priority.
3. **Open**: questions the ramble raised but did not answer.
4. **Ledger**: flips (both positions in one line, later one adopted) and
parked tangents (one line each).
5. **My additions**: the only interpretation callouts. "Inferred"
(strongly implied but never stated) and "Guessed" (gaps you filled).
Tell the user to correct these first.
Compression rules, non-negotiable:
- **Nothing appears twice.** Every fact lives in exactly one section.
- **No "you said" recap.** Everything outside My additions is the user's
own content by definition; only the model's additions get called out.
- **One line per bullet.** If a bullet needs two lines, it is two bullets
or it is bloat.
- **Vague quantifiers are never silently resolved.** "The usual model",
"standard size", "soon": each lands in Open or Guessed, never absorbed
into a locked item as if it were specified.
Close by inviting corrections and offering the interview.
## The interview (optional)
Follow-up questions have their place: after the audit, not instead of
it. Only if the user accepts the offer, or asked to be interviewed up
front.
- Ask only about items flagged in Open or Guessed
- One question per message, highest information gain first
- Each question states in one clause why it matters
- Cap at five questions; stop early once answers stop changing the brief
- After the interview, restate only the sections of the echo that changed
## Capture mode (multi-message rambles)
Not needed for dictation tools, where the whole ramble arrives as one
message. Use it when the user invokes the skill before rambling and then
adds thoughts across several messages, possibly over a long stretch.
- Acknowledge once, in one short line ("Go ahead, I'm listening. Say
'done' when you want the echo.")
- For every following message, reply with a single minimal line
("Listening."). Vary it slightly so it does not feel robotic.
- Do NOT solve, praise, summarize, analyze, or ask questions mid-stream.
- If the user asks a direct question mid-ramble, answer it in at most two
sentences, then return to listening.
- Exit on "done", "echo", "echo me", "that's it", "what did you get", or
any clear equivalent, then deliver the echo.
## Persistence
After the user approves the echo, offer exactly three options:
1. Append the brief to CLAUDE.md so future sessions inherit it
2. Save it to `docs/rambles/YYYY-MM-DD-<topic>.md`
3. Keep it in-conversation only
The approved brief then governs the rest of the session: honor its
decisions and constraints without re-asking.
@@ -0,0 +1,72 @@
# Echo Format
One reply, five sections, dense. The user should find and fix an error
in seconds. Target well under 250 words for a ten minute ramble.
Compression rules: nothing appears twice; no "you said" recap (everything
outside My additions is the user's by definition); one line per bullet;
vague quantifiers ("usual", "standard", "soon") go to Open or Guessed,
never silently resolved into a locked item.
## Template
```markdown
## Mission
<one sentence: what you are actually trying to achieve>
## Locked (your decisions and constraints)
- <one line each; mark the stated top priority with **top priority**>
## Open (needs your answer)
- <question the ramble raised but did not answer>
## Ledger
- Flipped: <position A>, then <position B>. Going with B.
- Parked: <tangent, one line>
## My additions (correct these first)
- Inferred: <implied but never stated>
- Guessed: <gap I filled>
```
Close with: "Correct anything that's off, especially My additions. Want
the interview for the Open items?"
## Worked example
**Ramble (compressed):** "ok switching to voice sorry for typos. so i want
some kind of daily digest agent for hacker news but honestly email feels
dead maybe slack. it should rank by relevance to what im building not
just points. oh and my cofounder wants it too so two profiles i guess.
actually no email is fine everyone has email. also random thought we
could sell this later but whatever. it needs to run every morning without
me touching it, thats the whole point, if i have to trigger it manually
its useless."
**Echo:**
## Mission
A zero-touch daily Hacker News digest, ranked by personal relevance,
emailed every morning.
## Locked
- Relevance ranking over raw points
- Two recipients with different interest profiles (you, cofounder)
- Email delivery
- **Top priority**: fully automatic; a manual trigger makes it useless
## Open
- What defines "relevance to what I'm building": a written interest
profile, repo activity, something else?
- "Morning" means what time, whose timezone?
## Ledger
- Flipped: Slack (email feels dead), then email is fine. Going with email.
- Parked: possibly sellable as a product someday
## My additions (correct these first)
- Inferred: each recipient gets their own ranking, not a shared list
- Guessed: source pool is HN front page plus new stories
Correct anything that's off, especially My additions. Want the interview
for the Open items?