MCP Server Builder
anthropics/skills
Guides the design and implementation of Model Context Protocol servers in TypeScript or Python, from tool naming and error messages to evaluation.
Where allocations hide in a Limoni frame, how to find them, how to compare benchmarks honestly, and the release and CI checks that catch what one machine cannot.
$ npx skills add thebanri/limoni --skill limoni-performance -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install thebanri/limoni limoni-performance --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/thebanri/limoni.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/limoni-performance .claude/skills/limoni-performance && 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 "limoni-performance" agent skill from https://github.com/thebanri/limoni/tree/main/.claude/skills/limoni-performance into .claude/skills/limoni-performance/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "limoni-performance", 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/thebanri/limoni/tree/main/.claude/skills/limoni-performanceType 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 thebanri/limoni --skill limoni-performance -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install thebanri/limoni limoni-performance --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/thebanri/limoni.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/limoni-performance .agents/skills/limoni-performance && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "limoni-performance" agent skill from https://github.com/thebanri/limoni/tree/main/.claude/skills/limoni-performance into .agents/skills/limoni-performance/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "limoni-performance", 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 thebanri/limoni --skill limoni-performance -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install thebanri/limoni limoni-performance --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/thebanri/limoni.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/limoni-performance .cursor/skills/limoni-performance && 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 "limoni-performance" agent skill from https://github.com/thebanri/limoni/tree/main/.claude/skills/limoni-performance into .cursor/skills/limoni-performance/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "limoni-performance", 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/thebanri/limoni.git --path .claude/skills/limoni-performance--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 thebanri/limoni --skill limoni-performance -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install thebanri/limoni limoni-performance --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/thebanri/limoni.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/limoni-performance .gemini/skills/limoni-performance && 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 "limoni-performance" agent skill from https://github.com/thebanri/limoni/tree/main/.claude/skills/limoni-performance into .gemini/skills/limoni-performance/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "limoni-performance", 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 thebanri/limoni limoni-performanceInstalls 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 thebanri/limoni --skill limoni-performance -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/thebanri/limoni.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/limoni-performance .github/skills/limoni-performance && 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 "limoni-performance" agent skill from https://github.com/thebanri/limoni/tree/main/.claude/skills/limoni-performance into .github/skills/limoni-performance/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "limoni-performance", 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 thebanri/limoni --skill limoni-performance -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install thebanri/limoni limoni-performance --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/thebanri/limoni.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/limoni-performance .opencode/skills/limoni-performance && 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 "limoni-performance" agent skill from https://github.com/thebanri/limoni/tree/main/.claude/skills/limoni-performance into .opencode/skills/limoni-performance/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "limoni-performance", 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.
limoni-performanceWhere allocations hide in a Limoni frame, how to find them, how to compare benchmarks honestly, and the release and CI checks that catch what one machine cannot.
Limoni Performance is an agent skill from thebanri/limoni. Where allocations hide in a Limoni frame, how to find them, how to compare benchmarks honestly, and the release and CI checks that catch what one machine cannot. Load before touching a Draw path, a benchmark, an allocation test, or before cutting a release.
Its SKILL.md is about 1.4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It works with Model Context Protocol. The repository describes itself as: Terminal UI engine for Go that tests can click and AI agents can drive (MCP). Zero-allocation rendering, immediate mode + Elm architecture, 3D, images, charts, accessibility… The licence is Apache-2.0.
5 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 025c5d5. 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:
gogitghFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git and gh, 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.
Limoni Performance loads about 1.4k tokens when it runs. Until then it costs about 69 tokens; SKILL.md has 667 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 thebanri/limoni at commit 025c5d5, republished under its Apache-2.0 licence (© thebanri). 667 words, ~1,359 tokens.
.claude/skills/limoni-performance/SKILL.md (or your agent's skills folder).The headline claim is a number — zero heap allocations per frame — so the rule is simple: measure the program people run, on more than one operating system, and distrust a number you like.
Every one of these was found in this repository, each after the widget
benchmarks said 0 B/op:
| Hiding place | What it looked like | Fix |
|---|---|---|
A closure built in Draw | ctx.RegisterClick(area, func(){...}) per clickable widget per frame | cell.ClickAction{Focus: id, Toggle: &b} / RegisterScroll: data, copied into a slice the frame reuses |
| The frame wrapping handlers | RegisterClick wrapped each func() in a func(ev) | store the handler as it is |
| A theme closure | ctx.ThemeStyle = func(role)... per widget per frame | build once on the frame |
| A captured local escaping | visibleCount captured by a mouse closure escaped even when no closure was registered | copy it inside the if that registers |
| String building | prefix + label, icon + " ", fmt.Sprintf in a draw | write the parts separately with SetStringWithin |
sync.Pool | every GC empties it, so the next frame allocated a scratch and two maps | keep scratch on the widget's state |
os.Getenv on Windows | graphics.DetectProtocol() per frame: ~12 env reads, 21 allocations on Windows only | detect once, keep it in CapabilityProfile |
| Interface boxing by the caller | RenderWidget(widgets.Checkbox{...}) copies the struct to the heap | hold widgets by pointer |
| A struct growing past 128 bytes | one bool added to the end of cell.Context → 144 B/op in every widget with a fallback click closure | keep Context ≤ 128 bytes; put new fields in an existing padding hole |
The 128-byte cliff. A closure captures a variable by value only while it
is small; above 128 bytes the compiler captures by reference, which moves the
variable to the heap. cell.Context is passed to every Draw and captured by
the fallback click closures, so one extra field at the end of it turned every
widget from 0 B/op to 144 B/op — while the code around it was unchanged.
go build -gcflags=-m says which it is: leaking param: ctx is free,
moved to heap: ctx is an allocation per call. TestContextStaysUnder128Bytes
guards the size; new fields go in the padding after Style.
// Deterministic: force a GC each iteration, or a sync.Pool refill looks flaky.
if a := testing.AllocsPerRun(50, func() { draw(); runtime.GC() }); a != 0 { ... }go test ./pkg -run '^$' -bench X -benchmem -memprofile mem.out -memprofilerate 1 -o pkg.test
go tool pprof -sample_index=alloc_objects -top -lines pkg.test mem.out # names the lineAllocsPerRun returns an average: a reading of 1 means every iteration
allocated, not one stray. Treat it as a fact about the program, not as flakiness.
Benchmarks that only call Draw cannot see registration. BenchmarkInteractiveFrame
(in benchmarks/) draws through a real Terminal with a theme; keep new
interactive work covered by it, and CI gates every widget benchmark.
git worktree add --detach /tmp/base <base-commit>
(cd /tmp/base && go test ./core/buffer -run '^$' -bench X -count=5)
go test ./core/buffer -run '^$' -bench X -count=5 # same machine, same sitting
git worktree remove /tmp/basecell.IsCluster(c) && !opts.ClusterWidths costs nothing;
the reverse cost 5% on BenchmarkDiff_FullChanges.pkill -f <pattern> matches the shell
running it and kills your own session.Windows is the runner that catches what Linux hides: os.Getenv allocating, and
AF_UNIX resetting a connection closed with unread data. Cross-compiling
(GOOS=windows go vet ./...) proves it builds, nothing more. Push and read the
job.
go build ./... && go vet ./... && go test ./..., -race on the CLAUDE.md
list, the two benchmark gates, GOOS=js GOARCH=wasm build.gorelease -base=<previous tag> without -version: naming a version
that does not exist yet makes the Go proxy cache a "not found" for it, and
go install pkg@version then fails for ~18 minutes.origin/main: turn ## [Unreleased] into the version with
today's date, add the compare link, commit release: vX.Y.Z, push, tag, push
the tag.gh release create with notes assembled from that CHANGELOG section.go install github.com/thebanri/limoni/cmd/zest@vX.Y.Z
in an empty directory. The proxy's @latest list lags the tag by a few
minutes; the version itself is usually available at once.© thebanri, 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 .claude/skills/limoni-performance of thebanri/limoni.
Open the folder on GitHubat commit 025c5d5
Limoni Performance 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 |
|---|---|---|---|---|---|---|
| Limoni Performance this skillthebanri/limoni | 152 | — | ~1.4k | Automated safety check: Pass | Apache-2.0 | |
| MCP Server Builderanthropics/skills | 180k | 63 repos | ~2.3k | Automated safety check: Pass | Apache-2.0 | |
| MCP Server BuildershareAI-lab/learn-claude-code | 78k | 5 repos | ~1.2k | Automated safety check: Pass | MIT | |
| MCP Integration for Pluginsanthropics/claude-plugins-official | 38k | 11 repos | ~3.1k | Automated safety check: Pass | Apache-2.0 | |
| Figma use_figma Plugin API Ruleswarpdotdev/warp | 65k | 4 repos | ~4.4k | Automated safety check: Pass | AGPL-3.0 | |
| Stitch to Remotion Walkthrough Videosgoogle-labs-code/stitch-skills | 8.4k | 6 repos | ~3.2k | Automated safety check: Notes | Apache-2.0 |
anthropics/skills
Guides the design and implementation of Model Context Protocol servers in TypeScript or Python, from tool naming and error messages to evaluation.
shareAI-lab/learn-claude-code
Walks through building MCP servers in Python or TypeScript that expose tools, resources and prompts to Claude, with templates, registration and testing.
anthropics/claude-plugins-official
Explains how to bundle Model Context Protocol servers in a Claude Code plugin, covering config files, stdio, SSE, HTTP and WebSocket server types, and authentication.
warpdotdev/warp
Required groundwork before any use_figma call: the rules and reference files for running JavaScript in a Figma file through the Plugin API without common failures.
google-labs-code/stitch-skills
Builds walkthrough videos from Stitch design projects using Remotion, with transitions, zoom effects and text overlays on each screen.
coollabsio/coolify
A skill your agent uses for Laravel MCP development. An agent skill from coollabsio/coolify.
thebanri/limoni
How Limoni exposes applications to AI agents and tests — the semantic tree, the automation socket, cmd/limoni-mcp, and the uitest package.
thebanri/limoni
How Limoni measures and stores text — UAX. An agent skill from thebanri/limoni.
thebanri/limoni
zest, the log viewer built on Limoni — how its store, filtering and LogView fit together, how it is verified (in-process, in kitty, over MCP, in the browser), and what it deliberately does not do.
Works with
Where allocations hide in a Limoni frame, how to find them, how to compare benchmarks honestly, and the release and CI checks that catch what one machine cannot. Limoni Performance is an agent skill from thebanri/limoni. Where allocations hide in a Limoni frame, how to find them, how to compare benchmarks honestly, and the release and CI checks that catch what one machine cannot.
Run `npx skills add thebanri/limoni --skill limoni-performance -a claude-code`. Or copy the skill folder (.claude/skills/limoni-performance in thebanri/limoni) into .claude/skills/limoni-performance in your project. Claude Code loads it when a task matches its description.
Run `npx skills add thebanri/limoni --skill limoni-performance -a codex`. Or copy the skill folder (.claude/skills/limoni-performance in thebanri/limoni) into .agents/skills/limoni-performance 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 thebanri/limoni --skill limoni-performance -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/limoni-performance, .gemini/skills/limoni-performance, .github/skills/limoni-performance and .opencode/skills/limoni-performance in your project.
Going by SKILL.md and its folder, Limoni Performance needs the command-line tools its instructions call (go, git and gh).
SKILL.md contains no URLs. Its commands use git and gh, which can reach the network depending on how they are called. 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.
Limoni Performance 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 1.4k tokens (SKILL.md is roughly 5.4k 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 Limoni Performance: MCP Server Builder (anthropics/skills, 180k stars), MCP Server Builder (shareAI-lab/learn-claude-code, 78k stars), MCP Integration for Plugins (anthropics/claude-plugins-official, 38k stars) and Figma use_figma Plugin API Rules (warpdotdev/warp, 65k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
thebanri (a GitHub user) maintains it in thebanri/limoni, which has 152 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on October 5, 2026.
Source: thebanri/limoni on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.