Agent Style
pchalasani/claude-code-tools
Literature-backed English technical-prose writing rules (agent-style, 21 rules).
Make a reply easier to read and act on with rich blocks inside ordinary Markdown — a choice the user picks from, a form that collects several answers, a procedure as steps with warnings in place, a…
$ npx skills add Prism-Shadow/penguin-harness --skill a2ui -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Prism-Shadow/penguin-harness a2ui --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/Prism-Shadow/penguin-harness.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/a2ui/skills/a2ui .claude/skills/a2ui && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "a2ui" agent skill from https://github.com/Prism-Shadow/penguin-harness/tree/main/plugins/a2ui/skills/a2ui into .claude/skills/a2ui/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "a2ui", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/Prism-Shadow/penguin-harness/tree/main/plugins/a2ui/skills/a2uiType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add Prism-Shadow/penguin-harness --skill a2ui -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Prism-Shadow/penguin-harness a2ui --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Prism-Shadow/penguin-harness.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/a2ui/skills/a2ui .agents/skills/a2ui && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "a2ui" agent skill from https://github.com/Prism-Shadow/penguin-harness/tree/main/plugins/a2ui/skills/a2ui into .agents/skills/a2ui/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "a2ui", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Prism-Shadow/penguin-harness --skill a2ui -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Prism-Shadow/penguin-harness a2ui --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Prism-Shadow/penguin-harness.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/a2ui/skills/a2ui .cursor/skills/a2ui && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "a2ui" agent skill from https://github.com/Prism-Shadow/penguin-harness/tree/main/plugins/a2ui/skills/a2ui into .cursor/skills/a2ui/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "a2ui", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/Prism-Shadow/penguin-harness.git --path plugins/a2ui/skills/a2ui--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add Prism-Shadow/penguin-harness --skill a2ui -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Prism-Shadow/penguin-harness a2ui --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Prism-Shadow/penguin-harness.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/a2ui/skills/a2ui .gemini/skills/a2ui && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "a2ui" agent skill from https://github.com/Prism-Shadow/penguin-harness/tree/main/plugins/a2ui/skills/a2ui into .gemini/skills/a2ui/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "a2ui", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install Prism-Shadow/penguin-harness a2uiInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add Prism-Shadow/penguin-harness --skill a2ui -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Prism-Shadow/penguin-harness.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/a2ui/skills/a2ui .github/skills/a2ui && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "a2ui" agent skill from https://github.com/Prism-Shadow/penguin-harness/tree/main/plugins/a2ui/skills/a2ui into .github/skills/a2ui/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "a2ui", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Prism-Shadow/penguin-harness --skill a2ui -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Prism-Shadow/penguin-harness a2ui --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Prism-Shadow/penguin-harness.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/a2ui/skills/a2ui .opencode/skills/a2ui && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "a2ui" agent skill from https://github.com/Prism-Shadow/penguin-harness/tree/main/plugins/a2ui/skills/a2ui into .opencode/skills/a2ui/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "a2ui", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
a2uiMake a reply easier to read and act on with rich blocks inside ordinary Markdown — a choice the user picks from, a form that collects several answers, a procedure as steps with warnings in place, a…
A2ui is an agent skill from Prism-Shadow/penguin-harness. Make a reply easier to read and act on with rich blocks inside ordinary Markdown — a choice the user picks from, a form that collects several answers, a procedure as steps with warnings in place, a callout, or a Mermaid diagram — written as fenced blocks the app renders with its own components; a pick comes back as the user's plain text. Use when a reply asks the user to decide, collects several inputs, gives a procedure, or explains a structure or flow. Includes STE-style writing rules for Chinese and English…
Its SKILL.md is about 3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files, including scripts and reference files (for example `references/components.md`).
It sits in Development, covering Brand voice and tone. It works with Mermaid. The repository describes itself as: 🐧 Unified and Stable RSI Platform. The licence is Apache-2.0.
9 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit d56d9ce. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/ (JavaScript), which the agent can run.
Shell commands in SKILL.md call:
nodeFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
A2ui loads about 3k tokens when it runs, and up to ~6k if it reads all its reference files. Until then it costs about 144 tokens; SKILL.md has 1,612 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from Prism-Shadow/penguin-harness at commit d56d9ce, republished under its Apache-2.0 licence (© Prism-Shadow). 1,612 words, ~2,952 tokens.
.claude/skills/a2ui/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.A reply is Markdown. Where a decision, a set of inputs, a procedure or a structure would read better as a component than as prose, write one as a fenced block: ```a2ui holding ONE JSON object, or ```mermaid holding a diagram. The Web App renders the block with its own components and theme; the CLI and the messaging channels show the same block as readable text; nothing is lost on a surface that cannot render it. You never write HTML, scripts or styles — you name a component from the catalog and fill its fields.
Before you send a reply that carries a block, run the checker (see "Check before you send"). It is the test suite for this skill: it rejects what would not render, warns about what would be hard to read, scores the draft and prints the questions a reviewer would ask.
This skill changes how you write replies; it needs no setup. If a message only names the skill without a task — "use a2ui", "show me the blocks" — ask what the user wants to decide, enter or understand, then answer that with the fitting block. Do not demonstrate every component at once: one block that serves the question is the demonstration.
Use a block when it saves the reader work:
recommended when you have a view.warning or caution sits on the step it applies to and is rendered above it.Do not use a block for:
Keep to one or two blocks per reply and at most two questions (choice/form). More than that is a questionnaire, not a conversation.
The full reference, every field and its limits, a valid example of each type and the common mistakes: references/components.md beside this file. Read it the first time you write a block, and whenever the checker rejects one.
| Type | Required | Optional | Limits |
|---|---|---|---|
choice | question, options[] (label) | id, options[].value / description / recommended, multiple, allowOther | question ≤ 120, label ≤ 60 (warn > 40), 2–7 options (warn > 5), labels unique, at most one recommended |
form | fields[] (id, label, kind) | id, title, submitLabel, per field options (single/multiple only), placeholder, min/max/step/unit (number only), required | 1–6 fields (warn > 4), field ids unique ^[a-z][a-z0-9_]{0,31}$ |
steps | steps[] (text) | title, per step warning, caution, note, code, lang | 1–15 steps (warn > 10), text ≤ 200, code ≤ 2000 |
callout | tone (note/tip/caution/warning), text | title | text ≤ 400 |
mermaid | a supported header on the first line | — | no %%{init}%%, no frontmatter config, no click/href/javascript:; warn above 30 nodes or edges |
The fence is ```a2ui (or ```a2ui json); one JSON object per fence; strict JSON (double quotes, no comments, no trailing commas). An unknown type or a missing required field is an error; an unknown field is ignored with a warning.
value (default: its label), several picks joined with 、 or ", "; for a form, one line per field, label: answer. The user can edit that text before sending, or ignore the block and type anything. Read it as you would read any user message; never expect a marker.allowOther: true adds an "Other…" control that just focuses the composer. Use it when your options may not cover the answer.Apply these to the prose of every reply, zh and en. They are what makes model output readable; the checker enforces the measurable ones as warnings.
warning/caution, never after the harm.For any reply that carries an a2ui or mermaid block (not for plain prose), run the checker on the whole draft and fix what it finds. The paper this follows found that deterministic validation plus up to three rounds of error-feedback repair is what makes generated UI reliable; this is that loop.
The checker is scripts/check.mjs in this skill's directory — the directory you read this SKILL.md from, <app_data_dir>/agents/<agent_id>/agent_state/skills/a2ui/. It is self-contained and runs with the Node already on the machine.
Write the complete draft reply to a temporary file outside the Workspace, for example /tmp/a2ui-draft.md (%TEMP%\a2ui-draft.md on Windows). Alternatively feed it on stdin with a quoted heredoc so no file is written.
Run it:
node <skill dir>/scripts/check.mjs /tmp/a2ui-draft.md --rubric
# or, with no file:
node <skill dir>/scripts/check.mjs --rubric <<'EOF'
...the draft...
EOFOptions: --lang zh|en|auto (prose rules; auto picks zh when Chinese dominates), --json for the machine-readable report. Exit code 0 means no errors, 1 means at least one error, 2 means the checker could not run.
Read the report. Errors are blocks that would not render or would mislead (invalid JSON, unknown type, missing field, duplicate label, two recommended options, an unbalanced mermaid line, a forbidden directive): fix every one. Warnings are reading cost (too many options, a question that is not last, an ungrounded block, a long sentence, passive voice, a vague word): fix the ones that change how the reader experiences the reply. Then answer the rubric questions honestly — they catch what no rule can.
Re-run. At most three rounds. Send when the report shows 0 errors and a total of 70 or more (L1 is 100 or 0; L2 loses 15 per block warning; prose loses 5 per prose warning; total = 0 on any error, else the mean of L2 and prose).
If a block still has errors after the third round, do not send it: replace it with prose that says the same thing (a numbered list for a choice, a question list for a form). Never send a block the checker rejects.
The check is yours, not the user's: do not paste the report or mention the checker in the reply. Send the checked text exactly as checked, fences included.
The checker prints these with --rubric; they are the L2/L3 judgement no rule can make.
A decision, English. The sentence before the block grounds it; the block is the last thing in the reply:
I found two ways to store the sessions. Both work with the current schema; they differ in what you run.
Which store do you want?
```a2ui
{
"type": "choice",
"question": "Which store should the sessions use?",
"options": [
{ "label": "SQLite", "description": "One file, no server; fine below 10 GB.", "recommended": true },
{ "label": "PostgreSQL", "description": "A server to run; needed when several machines share the data." }
],
"allowOther": true
}
```The user clicks SQLite; your next message from them reads SQLite. If they type "SQLite, but keep a nightly dump", read that.
A procedure, Chinese. The warning sits on the step it protects:
下面是把数据目录迁到新磁盘的步骤。
```a2ui
{
"type": "steps",
"title": "迁移数据目录",
"steps": [
{ "text": "停止服务。", "code": "penguin stop", "lang": "sh" },
{
"warning": "复制完成并核对大小之前,不要删除旧目录。",
"text": "把旧目录完整复制到新磁盘。",
"code": "cp -a ~/.penguin/data /mnt/disk2/penguin-data",
"lang": "sh"
},
{ "text": "在配置里把数据目录指向新路径,然后启动服务。", "note": "首次启动会重建索引,需要约 1 分钟。" }
]
}
```A flow, English. Three or more parts with arrows between them is a diagram; two would be a sentence:
The request passes through three stages before the model sees it.
```mermaid
flowchart LR
A[User message] --> B[Context engine]
B --> C[Model request]
C --> D{Tool call?}
D -- yes --> E[Run tool] --> B
D -- no --> F[Reply]
```No block. The user asked what port the dev server uses: answer "The dev server listens on 7369." A callout, a choice or a diagram here would be noise.
© Prism-Shadow, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 2 other files (scripts, references) in plugins/a2ui/skills/a2ui of Prism-Shadow/penguin-harness.
Open the folder on GitHubat commit d56d9ce
A2ui next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| A2ui this skillPrism-Shadow/penguin-harness | 2.5k | — | ~3k | Automated safety check: Pass | Apache-2.0 | |
| Agent Stylepchalasani/claude-code-tools | 2k | — | ~1.4k | Automated safety check: Pass | MIT | |
| Smallest-Visual DiagramsYeachan-Heo/oh-my-claudecode | 40k | — | ~885 | Automated safety check: Pass | MIT | |
| Writing Guidelinesrohitg00/pro-workflow | 2.9k | — | ~593 | Automated safety check: Pass | None | |
| Writing Styleumputun/cc-thingz | 484 | — | ~1.3k | Automated safety check: Pass | MIT | |
| Writing Stylemarin-community/marin | 3.9k | — | ~549 | Automated safety check: Pass | Apache-2.0 |
pchalasani/claude-code-tools
Literature-backed English technical-prose writing rules (agent-style, 21 rules).
Yeachan-Heo/oh-my-claudecode
Picks the smallest visual that carries structure when prose alone would not: pseudocode, call tree, component or file tree, Mermaid or diff, and skips it when prose is enough.
rohitg00/pro-workflow
Apply clear-writing standards to any prose the agent produces - READMEs, docs, UI copy, error messages, commit and PR text, release notes.
umputun/cc-thingz
A skill your agent uses for technical communication - GitHub/GitLab tickets, PR/MR descriptions, issue comments, code review comments, commit messages.
marin-community/marin
Apply Marin house style when producing or revising commit, pull-request, issue, comment, documentation, report, or blog prose.
tobihagemann/turbo
Shared writing style rules for GitHub-facing output (PR comments, PR descriptions, PR titles, issues, design proposals).
Prism-Shadow/penguin-harness
A skill your agent uses when developing PenguinHarness itself — changing packages/{core,server,web,cli,desktop,landing,docs,skills}, the built-in model catalog, the installers or the release…
Prism-Shadow/penguin-harness
Create and edit Bento presentations — self-contained .bento.html decks whose document is JSON.
Prism-Shadow/penguin-harness
A skill your agent uses when standing PenguinHarness up to try a change by hand — launching the Web App, the desktop shell, the landing page, the docs site or the component gallery to click through…
Prism-Shadow/penguin-harness
A skill your agent uses when changing the PenguinHarness Web App (packages/web) or the shared UI package — adding or restyling any UI, picking a status colour, adding an icon, laying out a row or a…
Prism-Shadow/penguin-harness
Drive the PenguinHarness agent browser — the desktop app's built-in browser or the user's own Chrome — from the shell with penguin browser: open pages, read them as simplified HTML or text, act with…
Prism-Shadow/penguin-harness
A skill your agent uses whenever the user wants to build an agent application — their own program with an embedded agent, such as an AI app, an agentic app or a RAG app.
Works with
Categories
Make a reply easier to read and act on with rich blocks inside ordinary Markdown — a choice the user picks from, a form that collects several answers, a procedure as steps with warnings in place, a…. A2ui is an agent skill from Prism-Shadow/penguin-harness. Make a reply easier to read and act on with rich blocks inside ordinary Markdown — a choice the user picks from, a form that collects several answers, a procedure as steps with warnings in place, a callout, or a Mermaid diagram — written as fenced blocks the app renders with its own components; a pick comes back as the user's plain text.
A2ui fits situations like: A reply asks the user to decide; collects several inputs; gives a procedure; explains a structure.
Run `npx skills add Prism-Shadow/penguin-harness --skill a2ui -a claude-code`. Or copy the skill folder (plugins/a2ui/skills/a2ui in Prism-Shadow/penguin-harness) into .claude/skills/a2ui in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Prism-Shadow/penguin-harness --skill a2ui -a codex`. Or copy the skill folder (plugins/a2ui/skills/a2ui in Prism-Shadow/penguin-harness) into .agents/skills/a2ui in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Prism-Shadow/penguin-harness --skill a2ui -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/a2ui, .gemini/skills/a2ui, .github/skills/a2ui and .opencode/skills/a2ui in your project.
Going by SKILL.md and its folder, A2ui needs JavaScript for the scripts in its folder and the command-line tools its instructions call (node). Our summary lists: Node.js.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
A2ui is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 3.1k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with A2ui: Agent Style (pchalasani/claude-code-tools, 2k stars), Smallest-Visual Diagrams (Yeachan-Heo/oh-my-claudecode, 40k stars), Writing Guidelines (rohitg00/pro-workflow, 2.9k stars) and Writing Style (umputun/cc-thingz, 484 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Prism-Shadow (a GitHub organization) maintains it in Prism-Shadow/penguin-harness, which has 2,455 GitHub stars. The repository holds 31 skills in this directory. The repository was last updated on October 7, 2026.
Source: Prism-Shadow/penguin-harness on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.