skills/visual-proposal/SKILL.md
This skill should be used when the user asks to "make a visual proposal", "write this up so I can share it", "present these options visually", "diagram the trade-offs", "turn this plan into something reviewable", or requests a shareable design pitch, architecture proposal, RFC, options comparison, or visual roadmap for work that has not been built. It produces one self-contained, theme-aware HTML page led by grounded diagrams. Use visual-review instead for completed code changes; do not use this skill for internal task tracking.
npx skillsauth add b-open-io/prompts visual-proposalInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
A visual proposal is the forward-looking sibling of a visual recap. A recap describes a change that was just made; a proposal describes a design, an options space, or a plan that has NOT been built yet, so a reviewer — often someone with no prior context, sometimes a friend or an external maintainer — can understand it, weigh it, and decide. The deliverable is a single self-contained, theme-aware HTML page, published as an Artifact when the Artifact tool is available (default-private; the user shares it), otherwise written locally and opened in the browser.
When the optional artifact-design skill is installed, load it before writing
the page for additional craft guidance. Do not block when it is unavailable;
apply the self-contained, theme, layout, and accessibility requirements in this
skill directly. This skill governs the content and stance of a proposal.
The single most common failure is editorializing: stamping options "Recommended" / "Reject" and collapsing a live decision into a foregone conclusion. A proposal's job is to arm the reviewer with facts, not to hand them a verdict. When the page presents alternatives:
Stop after writing "the one to reject" or "best option" and replace the verdict with the underlying evidence. Leave the decision to the reviewer.
A proposal earns its "visual" name by making the reader see the idea. Wherever a relationship, a structure, or a difference is clearer drawn than written, draw it. Reach for diagrams (SVG or Canvas, never external images) for:
Prose then does what prose is good at: intent, nuance, the "why." The test: if a section is three paragraphs comparing structures, it probably wants to be a diagram plus one caption.
When a proposal's core is a key decision between competing options (or a series of them), a panel of advocates is the default treatment, not an add-on — do it automatically, without being asked. The strongest neutrality comes not from one author trying to be even-handed, but from giving each option a genuine advocate from the real bОpen roster, each shown with their avatar, name, and role. Skip the panel only for a page with no real decision (a pure explainer, status update, or single-approach pitch), or when the user explicitly asks for a plain writeup. Otherwise: dispatch one real roster agent per option (see "Casting the panel" below), each assigned to steelman a different option:
Run the advocates concurrently because they are independent. Ground every advocate's claims in the same evidence used by the host; an advocate that invents facts is worse than no advocate.
The advocates and judges are real named agents from the bОpen roster, not invented personas — that credibility is the whole point. Two steps:
Pick the agents. Agent(bopen-tools:front-desk) returns the team and who
fits what, or read the agents/*.md files (each has a display_name and a
role). Match each option to an agent whose real expertise leans that way (a
code-auditor for correctness, an optimizer for efficiency, a standards/interop
agent, a domain specialist). Advocates and judges must be distinct agents.
Embed their avatars with the bundled script. The Artifact CSP blocks
external <img src>, so avatars must be inlined as data URIs — this skill's
scripts/embed-avatars.sh automates it (fetch → downscale → emit a
window.AV map). Slug = display_name lowercased with non-alphanumerics → -
("Uno Satoj" → uno-satoj):
bash scripts/embed-avatars.sh uno-satoj torque maxim
Paste the printed <script> block into the page and give each panelist an
<img data-a="uno-satoj">; the block wires every src on load. Show the
avatar + name + one-line role on each card. If the script warns a slug has
no avatar, use that agent's initials in a colored circle — never ship a
faceless panel.
The advocates above argue among the presented options. Often the most valuable viewpoint disputes the framing itself — the whole option space rests on an assumption worth questioning ("this doesn't need to be a collection at all — mint a fungible token"; "don't build this, buy it"; "the real fork is upstream of these three"). Give such a voice a card too, on equal footing. But then make one call, and make it honestly:
The tell is buildability: a different axis can still be a real option. When it is, verify its feasibility with the same grounding rigor as every other option (read the actual code/spec — see the grounding rule) before letting an advocate champion it, so the fourth card is as evidence-backed as the first three.
For a real decision, run all four stages by default — advocacy, cross-examination, a judging bench, AND the CEO's final call. This is the shape that makes a proposal decision-useful rather than a bare list, and it is what this skill is for. Do NOT treat the bench or the CEO as an opt-in the user must request; running advocates but no judges is the most common way this skill under-delivers.
Skip the bench only when there is genuinely no decision to resolve (a pure explainer or status page), or the user explicitly asks for options-only with no assessment. Fix the judging lenses and evaluation rubric before showing judges the advocacy record. Present every judge's verdict, including dissent; never collapse a tally into objective truth. This stays within Rule 1 because the author adds no verdict of their own — the split, attributed bench does, and the human reviewer still makes the final call.
After every advocate and every judge has weighed in, Chief — the CEO
(Agent(bopen-tools:ceo)) — comes in and makes the final call. He is the last
stage, never run until the rest is complete. He is like one more judge, but a
decisive one: he weighs the whole thing holistically for the business and the
user, not the tech alone — the true cost of technical debt (priced as
interest), scope creep, reversibility, and whether the change actually serves the
user. Give him the FULL record: the problem, the options, the confirmed facts,
every advocate's case and rebuttal, and every judge's verdict and flip-condition.
Unlike the neutral judges, the CEO does decide — that is his role, and it does not break Rule 1 because it is an attributed agent's recommendation from the business's vantage, not the author editorializing, and the human still overrides. Present his call as a distinct final section with his avatar, name, and role: his decision stated plainly, one or two sentences of business/user reasoning, and the single thing that would change his mind. The reviewer's Agree / Agree-with-caveats / Disagree control on this call is the required CEO selector in the interactive choices (below).
Show the agents — avatar, name, role. When advocates or judges appear, give each a real identity: their avatar, name, and one-line role on the card that carries their argument or verdict. It makes the page feel authored by the panel rather than narrated about them, and it lets the reviewer track a voice across the page. For a fact that several agents independently verified (e.g. all advocates confirmed it against the code), attribute it visually — cluster those agents' avatars on that fact's card (straddling its top edge reads as a group sign-off) instead of writing "everyone agreed." An avatar cluster conveys consensus and who-verified at a glance.
The whole point is a page that's easy to follow. Text written by a panel of
agents drifts into AI tics (setup-and-dismiss, tricolons, hedged filler) that
make it a slog. So: ask every dispatched agent — each advocate, each judge,
and the CEO — to run Skill(bopen-tools:humanize) on its returned prose before
it hands it back. Then, when you assemble the page, you (the host) run
Skill(bopen-tools:humanize) over the final copy — the theses, verdicts,
captions, and the CEO's decision — so the whole thing reads in one clear human
voice. Crisp, skimmable, no throat-clearing.
Every claim, number, code shape, and diagram must trace to real research, real code, or a real spec — never invented. If a fact is unverified, label it (e.g. "unverified — needs a live check") rather than presenting it as settled. A proposal that fudges its facts wastes the reviewer's trust and their time. Pull the substance from the session's actual findings (files read, code cited, specs quoted); if the substance isn't there yet, gather it before authoring.
Adapt to the subject — not every section always applies — but the usual spine:
<img>.<a target="_blank" rel="noreferrer"> so the reviewer clicks straight through
to the real thing. The CSP blocks embedding external resources, not <a>
navigation, so outbound links open fine. Don't leave a repo/file path as
dead text when it could be a link.prefers-color-scheme plus a
data-theme toggle that overrides both ways. SVG paint via CSS classes or
style, never fill="var(--x)" presentation attributes — var() does not
resolve there and the diagram renders black.prefers-reduced-motion; give focus a visible state; no horizontal
body scroll (wide diagrams/tables get their own overflow-x: auto).Write the page to the scratchpad dir, then call the Artifact tool with its path,
a one-line description, a stable subject favicon, and a version label.
Redeploy the SAME file path to keep the URL stable across revisions; only mint a
new URL for a genuinely different proposal. Remind the user it's private until
they share it from the page's share menu.
Proposals get revised as decisions settle. When the user changes an option's
framing, flattens a decision, or adds facts, edit the same file and republish to
the same URL with a bumped label. Keep the neutral stance unless the user asks
for a recommendation.
When the user reframes the decision itself — not just picks a winner, but changes which options are in play or the principle that separates them — re-run the advocacy, don't just rewrite prose. Re-brief the advocates on the new decision points and let them re-propose (with fresh cross-examination), then re-fire the judging bench on the new points of contention. A reframe can turn a split verdict into a unanimous one (or the reverse); a proposal that only edits its conclusion text after a reframe is stale under the hood. Ground the re-run with the same rigor as the first: verify the new facts against real code or spec before an advocate argues them. Mark the prior round as superseded rather than deleting it — the progression (round 1 → reframe → round 2) is itself useful to the reviewer.
tools
This skill should be used when a Claude Code session needs to keep working after Anthropic usage runs out, or when the user asks to run the Claude Code harness on GPT-5.6 Sol. Trigger phrases include "my Anthropic usage ran out", "I'm out of Claude usage", "usage limit reached, what now", "keep working on another model", "run Claude Code on GPT-5.6 Sol", "use GPT-5.6 Sol as the model", "set up claudex", "claudex isn't working", "route the harness through CLIProxyAPI", or "bill against my ChatGPT/Codex subscription". It stands up a local proxy so the Claude Code CLI runs on OpenAI's Codex backend as an escape hatch, and diagnoses that setup when it drifts. macOS + Homebrew.
testing
This skill should be used when the user asks to "open Visual Wayfinder", "answer a Wayfinder ticket visually", "turn this decision into a configurator", "show Wayfinder choices as a dashboard", "prototype the Wayfinder questionnaire", or wants interactive choice cards, tradeoff controls, rankings, ranges, toggles, and consequence previews for one active Wayfinder decision. It wraps the Wayfinder skill and JSON Render; it never replaces the tracker or resolves more than the active decision.
tools
This skill should be used when the user asks to "add plugin settings", "make a plugin configurable", "store per-project plugin configuration", "use settings.local.json", "create a plugin state file", "expose skill settings in Agent Master", or "add a skill interface". Distinguishes official Claude Code settings from project-owned configuration and documents bOpen Agent Master skill interface discovery.
content-media
This skill should be used when the user asks for "game UI", "app-to-game UI", "video game HUD", "controller navigation", "D-pad navigation", "TV app", "ten-foot interface", "game UI key bindings", "controller-first menu", "console-style menu", "TV remote focus", or "directional navigation".