Grillme for DSH
A Socratic deep-interview and adversarial plan-review skill, packaged as a DSH
bundle and portable to Codex and Claude Code.
中文说明
Grillme does not answer the user's question for them. It asks one sharp question
at a time, follows the contradiction or hidden assumption that surfaces, and
keeps going until the idea or plan is concrete enough to defend.
What it does
- One question per call. The question tool receives exactly one item, so an
easy question cannot crowd out the hard one.
- Two modes. Explore for a fuzzy idea or decision, using surface → deep →
insight waves. Stress-test for an existing plan, design, architecture, or
code change, walking a decision tree branch by branch.
- A 19-lens analysis pool. Strategic, systemic, psychological, and
devil's-advocate lenses, each with a concrete question move.
- Evidence before questions. Reads code, tests, and docs instead of asking
what it can verify, and cites paths and lines.
- Assumption tracking. Every checkpoint separates verified facts from
assumptions.
- Risks become questions. A risk that does not change the next question is
just decoration.
- Coverage check. Always asks "Is there anything I missed?" before the final
summary, and repeats if the answer is yes.
- Decision-ready output. Facts, decisions, assumptions, risks, open
questions, and one concrete next step.
- Deterministic handoff. On request, the
grillme_handoff tool writes a
timestamped grillme-plan-*.md with the original objective, numbered
decisions, still-open questions, and a handoff rule for the implementing
agent. Filename, format, and path are stable. It refuses paths outside the
workspace and does not overwrite by default; use overwrite: true when you
mean to replace an existing explicit filename.
- Read-only during the interview. The skill explores the repository for
facts but does not implement or mutate anything until shared understanding is
confirmed; the handoff is the only write.
- Multilingual. Matches the user's language; trigger phrases are recognized
in English, Chinese, and Russian.
How this maps to the original Grillme app
The upstream grillme package is a local-first browser workspace. This bundle
keeps the same product contract but uses DSH's existing surfaces instead of
starting a second server:
| Original Grillme | This DSH bundle |
|---|
| Loopback browser Q&A workspace | The current DSH Web session |
| Provider and model picker | DSH's model selector |
| Read-only repository inspection | The skill's read-only rule plus DSH read/grep/glob |
| One structured decision question | ask_user_question, with exactly one item per call |
| Persisted Q&A thread | The DSH session log |
| "Write plan" / handoff action | The grillme_handoff tool |
| Plan and approval-required defaults | DSH plan mode and permission modes |
grillme-plan-YYYY-MM-DDTHH-MM.md | Same filename convention and Markdown shape |
The plugin does not open a server, does not bundle a provider, and does not need
network access. It is local-first in the same sense: the workspace, the session,
and the handoff all stay on this machine.
Use it in DSH
The bundle installs a runtime skill named grillme:
/grillme our checkout migration plan
You can also say any of:
grill me on this design
盘问我这个方案 / 把需求问清楚 / 挑战我的方案
допроси меня / прожарь / интервью
The model can also load the skill automatically when a request is vague or a
plan needs pressure-testing. DSH exposes it through the normal skill tool and
the /grillme user invocation.
Install in DSH
From this directory:
plugin_manager install_bundle
target: <absolute path to this directory>
Or, with the DSH CLI:
cd path\to\dsh-grillme
dsh plugin --profile desktop add link:.
The bundle patch mounts dsh-grillme, whose host entry registers the skill in
the global skill layer. No build step and no runtime dependencies are needed.
Remove it with:
dsh plugin --profile desktop remove dsh-grillme
Use it in Codex
The package includes a Codex plugin manifest at .codex-plugin/plugin.json and
the portable skill at skills/grillme/SKILL.md. Point Codex at this package (or
copy the package into a Codex plugin directory) according to your Codex
installation's plugin instructions. The skill itself uses the standard
SKILL.md shape and auto-discovers from the skills/ directory.
Inside Codex, use the request_user_input tool for the question loop, or ask in
plain text when the tool is unavailable. The portable skill falls back to a
normal file write for the handoff when the DSH-only grillme_handoff tool is not
present.
Use it in Claude Code
The package includes .claude-plugin/plugin.json and a commands/grillme.md
slash command. The skill uses AskUserQuestion for the question loop.
Structure
dsh-grillme/
├── package.json # DSH bundle metadata and exports
├── cordis.patch.yml # mounts the host plugin
├── lib/index.js # registers the runtime skill and handoff tool
├── skills/grillme/SKILL.md # canonical, portable instructions
├── commands/grillme.md # Claude Code slash command
├── .codex-plugin/plugin.json # Codex plugin manifest
├── .claude-plugin/plugin.json # Claude Code plugin manifest
├── .claude-plugin/marketplace.json
├── locale/{en,zh,ru}.json # DSH display metadata
├── icon.svg # original artwork
├── README.md
├── README.zh.md
├── NOTICE
└── LICENSE
Design notes
The skill owns the interview protocol. The host plugin adds only the two things a
portable skill cannot do for itself: register the instruction body into the
global skill layer, and expose a deterministic handoff writer. There is no second
question UI; DSH's ask_user_question already owns the interaction, the state,
and the failure handling.
The runtime registration is scoped through ctx.effect, so disabling the bundle
withdraws the skill instead of leaving a stale catalog entry. The handoff tool is
registered only when tools, fs, and workingDirectory are mounted; the skill
still works without them. The runtime skill participates in DSH's normal skill
precedence: a project-level grillme skill in .dsh/skills or .agents/skills
outranks it, while a user-level skill in ~/.dsh/skills is outranked by the
bundle. Use a different name for a user-level skill you want to win.
The handoff writer resolves the Session's working directory and sandbox policy
before writing. It rejects any target that does not resolve inside that
workspace, refuses to overwrite an explicit existing filename unless
overwrite: true, and gives a default timestamped name a numeric suffix when it
already exists. The default filename is UTC-stamped, matching upstream's
grillme-plan-YYYY-MM-DDTHH-MM.md convention.
Credits
Grillme is an independent adaptation of three MIT-licensed ideas:
- Jekudy/grillme-skill: Socratic deep
interview, questioning waves, assumption tracking, lens pool, coverage check,
and final picture.
- Matt Pocock's grill-me: one-question
decision-tree interviews, recommended answers, codebase evidence, and the
shared-understanding stopping rule.
- idanlo/grillme: local-first Q&A
workspace, read-only repository investigation, one-decision-at-a-time
protocol, and the timestamped
grillme-plan-*.md handoff shape.
The interview model and wording here are rewritten for DSH and for Codex/Claude
portability. See NOTICE for attribution details.
License
MIT. See LICENSE.