Kibana I18n
elastic/kibana
Add i18n to Kibana React components and server code using @kbn/i18n and @kbn/i18n-react.
CRITICAL: Use for json-ui component rendering and development.
$ npx skills add actionbook/actionbook --skill json-ui -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install actionbook/actionbook json-ui --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/actionbook/actionbook.git skills-src && mkdir -p .claude/skills && cp -r skills-src/playground/json-ui-skill .claude/skills/json-ui && 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 "json-ui" agent skill from https://github.com/actionbook/actionbook/tree/main/playground/json-ui-skill into .claude/skills/json-ui/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "json-ui", 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/actionbook/actionbook/tree/main/playground/json-ui-skillType 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 actionbook/actionbook --skill json-ui -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install actionbook/actionbook json-ui --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/actionbook/actionbook.git skills-src && mkdir -p .agents/skills && cp -r skills-src/playground/json-ui-skill .agents/skills/json-ui && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "json-ui" agent skill from https://github.com/actionbook/actionbook/tree/main/playground/json-ui-skill into .agents/skills/json-ui/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "json-ui", 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 actionbook/actionbook --skill json-ui -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install actionbook/actionbook json-ui --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/actionbook/actionbook.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/playground/json-ui-skill .cursor/skills/json-ui && 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 "json-ui" agent skill from https://github.com/actionbook/actionbook/tree/main/playground/json-ui-skill into .cursor/skills/json-ui/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "json-ui", 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/actionbook/actionbook.git --path playground/json-ui-skill--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 actionbook/actionbook --skill json-ui -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install actionbook/actionbook json-ui --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/actionbook/actionbook.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/playground/json-ui-skill .gemini/skills/json-ui && 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 "json-ui" agent skill from https://github.com/actionbook/actionbook/tree/main/playground/json-ui-skill into .gemini/skills/json-ui/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "json-ui", 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 actionbook/actionbook json-uiInstalls 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 actionbook/actionbook --skill json-ui -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/actionbook/actionbook.git skills-src && mkdir -p .github/skills && cp -r skills-src/playground/json-ui-skill .github/skills/json-ui && 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 "json-ui" agent skill from https://github.com/actionbook/actionbook/tree/main/playground/json-ui-skill into .github/skills/json-ui/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "json-ui", 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 actionbook/actionbook --skill json-ui -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install actionbook/actionbook json-ui --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/actionbook/actionbook.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/playground/json-ui-skill .opencode/skills/json-ui && 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 "json-ui" agent skill from https://github.com/actionbook/actionbook/tree/main/playground/json-ui-skill into .opencode/skills/json-ui/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "json-ui", 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.
json-uiCRITICAL: Use for json-ui component rendering and development.
JSON UI is an agent skill from actionbook/actionbook. CRITICAL: Use for json-ui component rendering and development. Triggers on: json-ui, json render, component catalog, report render, HTML report, I18nString, i18n, bilingual, language switch, dual language, PaperHeader, AuthorList, Abstract, MetricsGrid, Section, Highlight, Zod schema, catalog.ts, cli.ts, components/index.tsx, "how to add a component", "how to render JSON", JSON 渲染, 组件目录, 报告渲染, 多语言, 中英文切换
Its SKILL.md is about 2.7k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Frontend & Design, covering React components, Internationalization and Translation. It works with Zod and React. The repository describes itself as: Let your AI agent get the sources behind logins and paywalls. The licence is Apache-2.0.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 0e31254. 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.
Shell commands in SKILL.md call:
pnpmnodeFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use pnpm, which can reach the network depending on how they are called.
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.
JSON UI loads about 2.7k tokens when it runs. Until then it costs about 104 tokens; SKILL.md has 792 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); files beside SKILL.md are not scanned.
The full file from actionbook/actionbook at commit 0e31254, republished under its Apache-2.0 licence (© actionbook). 792 words, ~2,739 tokens.
.claude/skills/json-ui/SKILL.md (or your agent's skills folder).Version: 1.0.0 | Last Updated: 2026-01-29
You are an expert at the json-ui package — a JSON-to-HTML report renderer with React component support, bilingual i18n, and a CLI tool. Help users by:
| Task | File | Pattern |
|---|---|---|
| Define component schema | src/catalog.ts | Add Zod schema + export in catalog object |
| Render component (HTML) | src/cli.ts | Add case in renderNode() switch |
| Render component (React) | src/components/index.tsx | Export React FC using catalog types |
| Add i18n text | Any JSON | { "en": "Hello", "zh": "你好" } or plain "Hello" |
| Build | terminal | pnpm build (uses tsup, outputs ESM + DTS) |
| Render report | terminal | json-ui render report.json [-o out.html] [--no-open] |
Refer to local source files for detailed documentation:
packages/json-ui/src/catalog.ts - All Zod schemas and type definitionspackages/json-ui/src/cli.ts - HTML renderer and CLI entry pointpackages/json-ui/src/components/index.tsx - React component implementationsBefore answering questions, Claude MUST:
Reports are trees of nodes:
{
"type": "Report",
"props": { "title": "My Report", "theme": "auto" },
"children": [
{
"type": "Section",
"props": { "title": "Overview", "icon": "bulb" },
"children": [
{ "type": "Abstract", "props": { "text": "..." } }
]
}
]
}| Layer | File | Output | Use Case |
|---|---|---|---|
| Zod Schemas | catalog.ts | Type definitions | Validation, type safety |
| HTML Renderer | cli.ts | Static HTML string | CLI render command |
| React Components | components/index.tsx | React elements | Embedded usage |
JSON file → CLI parse → renderNode() recursion → HTML string → file write → browser open| Component | Key Props | Description |
|---|---|---|
Report | title?, theme | Root wrapper, 800px max-width |
Section | title, icon?, collapsible? | Collapsible section with header |
Grid | cols, gap | CSS grid layout |
Card | variant, padding, shadow | Card container |
| Component | Key Props | Description |
|---|---|---|
PaperHeader | title, arxivId, date, categories? | Paper title + metadata |
AuthorList | authors, layout?, maxVisible? | Author names + affiliations |
Abstract | text, highlights?, maxLength? | Abstract with keyword highlighting |
TagList | tags, variant | Tag/category pills |
| Component | Key Props | Description |
|---|---|---|
ContributionList | items, numbered? | Numbered contributions with badges |
MethodOverview | steps, showConnectors? | Step-by-step method pipeline |
Highlight | text, type, source? | Blockquote (quote/important/warning/code) |
KeyPoint | icon, title, description | Icon + title + description |
CodeBlock | code, language, showLineNumbers? | Syntax-highlighted code |
Prose | content | Markdown content block |
Callout | type, title?, content | Info/tip/warning/important/note box |
| Component | Key Props | Description |
|---|---|---|
Image | src, alt?, caption?, width? | Single image |
Figure | images, caption?, label? | Multi-image figure |
Formula | latex, block?, label? | LaTeX formula |
DefinitionList | items | Term-definition pairs |
Theorem | type, number?, title?, content | Theorem/lemma/proposition |
Algorithm | title, steps, caption? | Algorithm pseudocode |
ResultsTable | columns, rows, highlights? | Results with best-cell highlighting |
| Component | Key Props | Description |
|---|---|---|
Metric | label, value, trend?, icon? | Single metric card |
MetricsGrid | metrics, cols? | Grid of metric cards |
Table | columns, rows, striped?, caption? | Data table |
| Component | Key Props | Description |
|---|---|---|
LinkButton | href, label, icon?, external? | Styled link button |
LinkGroup | links, layout? | Group of link buttons |
| Component | Key Props | Description |
|---|---|---|
BrandHeader | badge?, poweredBy?, showBadge? | AI-generated badge header |
BrandFooter | timestamp, attribution?, disclaimer? | Footer with attribution |
The I18nString type accepts both plain strings and bilingual objects:
// catalog.ts
export const I18nString = z.union([
z.string(),
z.object({ en: z.string(), zh: z.string() }),
]);// Plain string (backward compatible)
{ "title": "Hello World" }
// Bilingual object
{ "title": { "en": "Hello World", "zh": "你好世界" } }For HTML output, i18n strings render as dual spans:
// renderI18n() outputs:
<span class="i18n-en">Hello</span><span class="i18n-zh">你好</span>
// CSS controls visibility:
html[lang="en"] .i18n-zh { display: none; }
html[lang="zh"] .i18n-en { display: none; }For HTML attributes (alt, title) where only a plain string works:
// resolveI18n() picks one language:
const alt = resolveI18n(props.alt, 'en'); // returns plain string// Use <I18nText> component for JSX:
<I18nText value={props.title} />
// Use resolveI18nStr() for plain string contexts:
const altText = resolveI18nStr(props.alt, 'en');<html lang="en|zh"> attributelocalStorage.getItem('json-ui-lang')catalog.ts:export const MyWidgetSchema = z.object({
label: I18nString, // Use I18nString for user-visible text
count: z.number(), // Use z.string()/z.number() for data
variant: VariantType.default('default'),
});
// Add to catalog object:
export const catalog = {
// ...existing...
MyWidget: MyWidgetSchema,
} as const;
// Export type:
export type MyWidgetProps = z.infer<typeof MyWidgetSchema>;cli.ts renderNode() switch:case 'MyWidget': {
const { label, count, variant } = props;
return `<div class="my-widget ${variant}">
<span>${renderI18n(label)}</span>
<strong>${escapeHtml(String(count))}</strong>
</div>`;
}components/index.tsx:export const MyWidget: React.FC<MyWidgetProps> = ({ label, count, variant = 'default' }) => (
<div className={`my-widget ${variant}`}>
<span><I18nText value={label} /></span>
<strong>{count}</strong>
</div>
);For text that needs processing (e.g., Abstract highlights):
// HTML (cli.ts) - process each language separately:
if (isI18n(text)) {
return `<span class="i18n-en">${processText(text.en)}</span>
<span class="i18n-zh">${processText(text.zh)}</span>`;
} else {
return processText(String(text));
}
// React (components/index.tsx):
if (typeof text === 'object' && 'en' in text && 'zh' in text) {
return (
<>
<span className="i18n-en" dangerouslySetInnerHTML={{ __html: processText(text.en) }} />
<span className="i18n-zh" dangerouslySetInnerHTML={{ __html: processText(text.zh) }} />
</>
);
}| Error | Cause | Solution |
|---|---|---|
Type 'I18nStringType' is not assignable to 'ReactNode' | Passing i18n object directly to JSX | Wrap with <I18nText value={...} /> |
Property 'length' does not exist on type 'I18nStringType' | Calling string methods on i18n value | Use type guard: typeof text === 'string' ? text : text.en |
| Images not loading from arxiv | crossorigin="anonymous" on <img> | Remove crossorigin; keep only referrerpolicy="no-referrer" |
| Language switcher not working | Missing CSS rules or JS | Ensure html[lang] .i18n-* CSS rules and toggle JS are in template |
| Build fails with type errors | Schema changed but components not updated | Update all three files: catalog, cli, components |
Do NOT use crossorigin="anonymous" on <img> tags.
Sites like arxiv.org do not send CORS headers. Adding crossorigin="anonymous" causes the browser to require CORS, which fails and blocks the image.
<!-- WRONG - breaks images from arxiv and similar sites -->
<img src="..." referrerpolicy="no-referrer" crossorigin="anonymous" />
<!-- CORRECT -->
<img src="..." referrerpolicy="no-referrer" />When writing Chinese translations for ML/AI papers:
| Wrong | Correct | Reason |
|---|---|---|
| 评论器 | 价值函数(critic) | Standard ML term |
| 运行估计 | 滑动估计 | Running estimate = 滑动估计 |
| 重加权因子 | 加权系数 | More natural Chinese |
| 不断演化的 | 动态更新的 | Clearer meaning |
| 简单修复 | 改动小 | Academic tone |
# Build (ESM + DTS via tsup)
cd packages/json-ui && pnpm build
# Render report to HTML
node dist/cli.js render example-report-rich.json
# With options
node dist/cli.js render report.json -o output.html --no-openI18nString for user-visible text properties in schemas{en, zh} forms in rendererscrossorigin="anonymous" on img tagsreferrerpolicy="no-referrer" on img tags for privacypnpm build after any schema or component changes© actionbook, 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
Just SKILL.md in playground/json-ui-skill of actionbook/actionbook.
Open the folder on GitHubat commit 0e31254
JSON UI 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 |
|---|---|---|---|---|---|---|
| JSON UI this skillactionbook/actionbook | 1.6k | — | ~2.7k | Automated safety check: Pass | Apache-2.0 | |
| Kibana I18nelastic/kibana | 21k | — | ~2.5k | Automated safety check: Pass | Custom licence | |
| Taro UI Guidejd-opensource/taro-ui | 4.7k | — | ~1.3k | Automated safety check: Pass | MIT | |
| Frontend I18nlangflow-ai/langflow | 156k | — | ~1k | Automated safety check: Pass | MIT | |
| Readme I18nY80/bmm | 344 | 2 repos | ~1.9k | Automated safety check: Pass | MIT | |
| Frontend DevelopmentOpenHands/OpenHands | 90k | — | ~324 | Automated safety check: Pass | MIT |
elastic/kibana
Add i18n to Kibana React components and server code using @kbn/i18n and @kbn/i18n-react.
jd-opensource/taro-ui
Guides installing, configuring, styling and using taro-ui (At* components) in Taro apps for WeChat, Alipay, H5 and React Native.
langflow-ai/langflow
Add, change, or review user-facing text in the Langflow frontend using the i18n system (i18next / react-i18next).
Y80/bmm
A skill your agent uses when the user wants to translate a repository README, make a repo multilingual, localize docs, add a language switcher, internationalize the README, or update localized…
OpenHands/OpenHands
This skill should be used when the user asks to "add UI copy", "add a translation", "optimize the frontend bundle", "change onboarding", "change conversation UI", "add a query key", "change MSW…
B0und/WikiSpeedrun
Implement internationalization with Lingui in React and JavaScript applications.
actionbook/actionbook
Extract structured data from websites and produce an executable Playwright script plus extracted data.
actionbook/actionbook
Activate when the user needs to interact with any website — browser automation, web scraping, screenshots, form filling, UI testing, monitoring, or building AI agents.
actionbook/actionbook
Run browser-based web tests against websites using Actionbook CLI.
actionbook/actionbook
Browser action engine. An agent skill from actionbook/actionbook.
actionbook/actionbook
View, search, and download academic papers from arXiv. An agent skill from actionbook/actionbook.
actionbook/actionbook
Deep research and analysis tool. An agent skill from actionbook/actionbook.
Categories
CRITICAL: Use for json-ui component rendering and development. JSON UI is an agent skill from actionbook/actionbook. CRITICAL: Use for json-ui component rendering and development.
JSON UI fits situations like: json-ui component rendering and development; component catalog; language switch; components/index.tsx.
Run `npx skills add actionbook/actionbook --skill json-ui -a claude-code`. Or copy the skill folder (playground/json-ui-skill in actionbook/actionbook) into .claude/skills/json-ui in your project. Claude Code loads it when a task matches its description.
Run `npx skills add actionbook/actionbook --skill json-ui -a codex`. Or copy the skill folder (playground/json-ui-skill in actionbook/actionbook) into .agents/skills/json-ui 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 actionbook/actionbook --skill json-ui -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/json-ui, .gemini/skills/json-ui, .github/skills/json-ui and .opencode/skills/json-ui in your project.
Going by SKILL.md and its folder, JSON UI needs the command-line tools its instructions call (pnpm and node).
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. Review the folder before installing.
JSON UI 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 2.7k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with JSON UI: Kibana I18n (elastic/kibana, 21k stars), Taro UI Guide (jd-opensource/taro-ui, 4.7k stars), Frontend I18n (langflow-ai/langflow, 156k stars) and Readme I18n (Y80/bmm, 344 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
actionbook (a GitHub organization) maintains it in actionbook/actionbook, which has 1,611 GitHub stars. The repository holds 13 skills in this directory. The repository was last updated on September 8, 2026.
Source: actionbook/actionbook on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.