Agent skill

Tbm Plugin

by Far-Se in Far-Se/tabame

Author a Tabame launcher plugin – an external Python/Node/Bun script that extends the app launcher, talking newline-delimited JSON over stdin/stdout.

MITAuto-check passedMobile

Install Tbm Plugin

skills CLI
$ npx skills add Far-Se/tabame --skill tbm-plugin -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install Far-Se/tabame tbm-plugin --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/Far-Se/tabame.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/tbm-plugin .claude/skills/tbm-plugin && rm -rf skills-src

Use ~/.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/

Facts

Skill name
tbm-plugin
GitHub stars
372
Token cost
~1.9k tokens
SKILL.md length
831 words
Files
1
Skills in repo
3
Repo updated
First seen
Licence
MIT

At a glance

Author a Tabame launcher plugin – an external Python/Node/Bun script that extends the app launcher, talking newline-delimited JSON over stdin/stdout.

  • Works in 5 steps: Clarify the shape (only if unspecified):… → Pick a runtime the user has on PATH:… → Scaffold the folder with plugin.json +… → …
  • The user wants to build
  • SKILL.md covers Authoritative references (read…, Workflow for building a plugin, plugin.json (manifest) and The protocol contract…, plus 3 more sections
  • Calls node

What it does

Tbm Plugin is an agent skill from Far-Se/tabame. Author a Tabame launcher plugin – an external Python/Node/Bun script that extends the app launcher, talking newline-delimited JSON over stdin/stdout. Use when the user wants to build, scaffold, debug, or install a Tabame launcher plugin, add a new launcher keyword backed by a script, or asks about the plugin render-frame protocol.

Its SKILL.md is about 1.9k 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 Mobile. It works with Python, Flutter and Node.js. The repository describes itself as: Tabame is an alternative to Windows Taskbar. It's Raycast and Powertoys combined. The licence is MIT.

When your agent uses it

  • The user wants to build
  • Install a Tabame launcher plugin
  • Add a new launcher keyword backed by a script
  • Asks about the plugin render-frame protocol

Example prompts

  • “/tbm-plugin”

Requirements

  • Python 3
  • Node.js

Workflow steps

5 steps, taken from the first numbered list in SKILL.md.

  1. Clarify the shape (only if unspecified): keyword, runtime, data source, what each item shows, what Enter does, what Ctrl+K actions to…
  2. Pick a runtime the user has on PATH: python, node (18+), or bun. Tabame bundles none.
  3. Scaffold the folder with plugin.json + entry script. Start from the matching template in §15 of the full spec, or copy the closest…
  4. Implement the event loop (see contract below).
  5. Install & test: drop the folder in %localappdata%\Tabame\plugins\, reopen the launcher (it rescans on every open – no restart), and type…

What it can do on your machine

Read from SKILL.md and the folder at commit d3b2b4d. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • node

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Tbm Plugin loads about 1.9k tokens when it runs. Until then it costs about 86 tokens; SKILL.md has 831 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~86
When it runs · the whole SKILL.md, loaded when a task matches
~1.9k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from Far-Se/tabame at commit d3b2b4d, republished under its MIT licence (© Far-Se). 831 words, ~1,949 tokens.

Download SKILL.mdSave it as .claude/skills/tbm-plugin/SKILL.md (or your agent's skills folder).
name
tbm-plugin
description
Author a Tabame launcher plugin – an external Python/Node/Bun script that extends the app launcher, talking newline-delimited JSON over stdin/stdout. Use when the user wants to build, scaffold, debug, or install a Tabame launcher plugin, add a new launcher keyword backed by a script, or asks about the plugin render-frame protocol.

Tabame Launcher Plugin Authoring

Tabame's launcher is extensible with plugins: standalone scripts (Python, Node.js, or Bun) that Tabame runs as a long-lived child process when the user types the plugin's keyword. Communication is newline-delimited JSON over stdin/stdout – no SDK, no dependencies.

  • Tabame → script (stdin): UI events (init, query, select, action, close).
  • Script → Tabame (stdout): render frames – JSON objects that fully describe what the launcher shows right now.

The script is the source of truth for the UI: every time you want the launcher to display something different, you print a new render frame.

Authoritative references (read these)

The complete, authoritative protocol spec lives in the repo. Read it before writing non-trivial plugins – do not invent fields or message types not documented there:

  • Full spec: skills/TABAME_PLUGIN_SKILL.md – every message type, render-frame field, item field, view type, icon name, and pattern.
  • Working examples to copy from:
    • plugins/echo/ – Python demo exercising list/grid/detail/preview + actions.
    • plugins/linear/ – Node.js plugin with an HTTP API and config.json secrets.
    • plugins/caniuse/ – Node.js plugin with fetched data and detail views.

When a detail isn't covered below, consult the full spec rather than guessing.

Workflow for building a plugin

  1. Clarify the shape (only if unspecified): keyword, runtime, data source, what each item shows, what Enter does, what Ctrl+K actions to offer, and which view (list / grid / detail / preview pane).
  2. Pick a runtime the user has on PATH: python, node (18+), or bun. Tabame bundles none.
  3. Scaffold the folder with plugin.json + entry script. Start from the matching template in §15 of the full spec, or copy the closest plugins/ plugin.
  4. Implement the event loop (see contract below).
  5. Install & test: drop the folder in %localappdata%\Tabame\plugins\<id>\, reopen the launcher (it rescans on every open – no restart), and type the keyword.

plugin.json (manifest)

json
{
  "keyword": "weather", // required – what the user types; short & unique
  "category": "Weather", // required – one canonical discovery category
  "runtime": "python", // required – "python" | "node" | "bun" (on PATH)
  "entry": "main.py", // required – script filename in the plugin folder
  "id": "weather", // optional – defaults to folder name
  "name": "Weather", // optional – shown in the discovery hint
  "description": "", // optional
  "icon": "cloud", // optional – icon name (see spec §11)
  "args": [], // optional – CLI args inserted BEFORE entry
  "enabled": true // optional – defaults to true; set false (or toggle
  //   from the Launcher Plugins manager) to hide the
  //   plugin without deleting it
}

category is mandatory in every manifest. Choose exactly one current registry value: AI Tools, Communication, Developer Tools, Entertainment, Finance, Fun & Casual, Language & Writing, Media & Design, Network Tools, Productivity, Shopping, System Tools, Utilities, Weather, or Web & Browser. Match the plugin's primary user-facing purpose and preserve the exact spelling/capitalization; do not invent variants or multiple values.

Launch is effectively <runtime> <args...> <entry>, started without a shell, with the working directory set to the plugin folder (so config.json/assets resolve relatively). Activation: the query equals the keyword or starts with keyword + " "; the keyword prefix is stripped before your script sees the text.

The protocol contract (essentials)

One JSON object per line, both directions. Flush stdout after every frame.

Messages you receive on stdin:

MessageWhenKey fields
initOnce at startupquery (initial text)
queryEvery keystroketext, rev (generation counter)
selectHighlighted item changedid, rev
actionEnter (action:"default") or a Ctrl+K pickid, action (no rev)
closeShutting down–

Minimal render frame you print to stdout:

json
{
  "type": "render",
  "rev": 1,
  "view": "list",
  "items": [
    { "id": "1", "title": "Hello", "subtitle": "world", "icon": "star" }
  ]
}

Full frame/item fields (views list/grid/detail, loading, emptyText, grid, detail.markdown, preview, item accessories/actions/preview) are documented in spec §6–§8.

Show full SKILL.md (359 more words)Show less

Non-negotiable rules (get these right)

  • stdout is render frames only. Any other stdout line is treated as a diagnostic log. Send all debug output to stderr.
  • Echo rev on frames responding to a query/select; use rev: 0 for unsolicited pushes (action results, async/background refreshes). Tabame drops frames with a stale rev, so a slow response to "rom" can't overwrite fresh results for "rome".
  • Flush stdout after every frame; one JSON object per line, no embedded newlines.
  • Every item needs a stable, unique id – it's echoed back in select/action.
  • Exit on close and on stdin EOF. After close, ~2s grace then the process is killed.
  • Read stdin line by line; never block for all input.
  • Escape exits the whole plugin (no built-in "back") – for multi-screen plugins keep your own screen state and add a "◀ Back" item or a Ctrl+K back action.
  • Slow work: emit a loading:true frame (echoing the rev) first, then the result frame.
  • Never crash on bad input – wrap handlers in try/except and render the error as a detail frame.
  • Icons must be a name from spec §11 (case-insensitive), a data:image/... URI (up to 2 MB), or a file:///https:// raster or SVG image.
  • On Windows, Tabame sets PYTHONIOENCODING=utf-8 / PYTHONUTF8=1 for Python; Node/Bun are UTF-8 already.

Doing real work

The plugin is an ordinary process: HTTP (requests/urllib, or global fetch in Node 18+/Bun), filesystem, spawning tools. Read secrets from a config.json in the plugin folder (the CWD) or env vars – see plugins/linear/config.example.json. To open a URL or copy to the clipboard on Windows, shell out via cmd /c start/cmd /c clip (recipes in spec §12). Markdown links in detail render but are not clickable – expose URLs as item actions and open them yourself.

Deliverables

When registering a new plugin in resources/plugins.json, include addedDate with the current local calendar day in YYYY-MM-DD format. Running node add-plugin.js <PluginFolder> (or node add-plugin.js missing) adds it automatically. Preserve the original date on updates; leave existing undated entries unchanged. The plugin manager uses a fallback date for those entries.

When done, hand the user both plugin.json and the script, the exact install path (%localappdata%\Tabame\plugins\<id>\), and the reminder to reopen the launcher to load it.

© Far-Se, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .agents/skills/tbm-plugin of Far-Se/tabame.

Open the folder on GitHubat commit d3b2b4d

Compare with similar skills

Tbm Plugin 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.

Tbm Plugin compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Tbm Plugin this skillFar-Se/tabame372—~1.9kAutomated safety check: PassMIT
Glasses AppbrilliantlabsAR/brilliant_sdk115—~1.2kAutomated safety check: PassBSD-3-Clause
Vicoa CLIvicoa-ai/vicoa499—~5.8kAutomated safety check: PassAGPL-3.0
Flutter UI Probelibnativeapi/nativeapi162—~988Automated safety check: PassMIT
Implement Flet Extensionflet-dev/flet17k—~2.1kAutomated safety check: PassApache-2.0
Test Flet Apps Devflet-dev/flet17k—~1.3kAutomated safety check: PassApache-2.0

Similar skills

  • Glasses App

    brilliantlabsAR/brilliant_sdk

    Build an app for Brilliant Labs smart glasses (Halo or Frame) with this SDK, in Python, Flutter or WebBluetooth/TypeScript.

    115 GitHub stars~1.2k tokensUpdated 3 days ago
    MobileAuto-check passed
  • Vicoa CLI

    vicoa-ai/vicoa

    Operate Vicoa from the terminal with the vicoa CLI — list and inspect agent sessions (and their transcripts) across machines, start/resume/stop sessions, manage the task backlog with projects and…

    499 GitHub stars~5.8k tokensUpdated yesterday
    MobileAuto-check passed
  • Flutter UI Probe

    libnativeapi/nativeapi

    Find where widgets are on screen in a running debug Flutter desktop app (macOS, Windows, Linux) by reading its render tree through the VM service — no hard-coded coordinates, no screenshots, works…

    162 GitHub stars~988 tokensUpdated yesterday
    MobileAuto-check passed
  • Implement a new Flet extension/control that wraps a third-party Flutter package end-to-end, including dependency selection, version pinning, compatibility checks, Python/Flutter integration, docs…

    17k GitHub stars~2.1k tokensUpdated today
    MobileAuto-check passed
  • Test Flet Apps Dev

    flet-dev/flet

    A skill your agent uses when testing or debugging Flet apps in maintainer/contributor development mode with local Python package sources and the local Flutter client, including web, desktop…

    17k GitHub stars~1.3k tokensUpdated today
    MobileAuto-check passed
  • Select and run the smallest sufficient validation set for Grix changes before push, review handoff, or completion.

    153 GitHub stars~831 tokensUpdated yesterday
    MobileAuto-check passed

More from Far-Se/tabame

  • Tm Launcher Design

    Far-Se/tabame

    Create or revise Tabame's Flutter launcher designs: frames, search bars, result rows, palettes, typography, and action dialogs.

    372 GitHub stars~3.1k tokensUpdated 2 days ago
    Auto-check passed
  • Tm Quick Action

    Far-Se/tabame

    Build or revise Tabame quick menu top-bar buttons in lib/widgets/itzy/quickmenu/button.dart.

    372 GitHub stars~4.3k tokensUpdated 2 days ago
    Auto-check passed

Categories

Questions about Tbm Plugin

What does Tbm Plugin do?

Author a Tabame launcher plugin – an external Python/Node/Bun script that extends the app launcher, talking newline-delimited JSON over stdin/stdout. Tbm Plugin is an agent skill from Far-Se/tabame. Author a Tabame launcher plugin – an external Python/Node/Bun script that extends the app launcher, talking newline-delimited JSON over stdin/stdout.

When should I use Tbm Plugin?

Tbm Plugin fits situations like: the user wants to build; install a Tabame launcher plugin; add a new launcher keyword backed by a script; asks about the plugin render-frame protocol.

How do I install Tbm Plugin in Claude Code?

Run `npx skills add Far-Se/tabame --skill tbm-plugin -a claude-code`. Or copy the skill folder (.agents/skills/tbm-plugin in Far-Se/tabame) into .claude/skills/tbm-plugin in your project. Claude Code loads it when a task matches its description.

How do I install Tbm Plugin in Codex?

Run `npx skills add Far-Se/tabame --skill tbm-plugin -a codex`. Or copy the skill folder (.agents/skills/tbm-plugin in Far-Se/tabame) into .agents/skills/tbm-plugin in your project. Codex loads it when a task matches its description.

Can I use Tbm Plugin in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Far-Se/tabame --skill tbm-plugin -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/tbm-plugin, .gemini/skills/tbm-plugin, .github/skills/tbm-plugin and .opencode/skills/tbm-plugin in your project.

What does Tbm Plugin need to run?

Going by SKILL.md and its folder, Tbm Plugin needs the command-line tools its instructions call (node). Our summary lists: Python 3; Node.js.

Does Tbm Plugin access the network?

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.

Is Tbm Plugin safe to install?

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.

What licence does Tbm Plugin use?

Tbm Plugin is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Tbm Plugin use?

About 1.9k tokens (SKILL.md is roughly 7.8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Tbm Plugin?

Skills that share tags, products or a category with Tbm Plugin: Glasses App (brilliantlabsAR/brilliant_sdk, 115 stars), Vicoa CLI (vicoa-ai/vicoa, 499 stars), Flutter UI Probe (libnativeapi/nativeapi, 162 stars) and Implement Flet Extension (flet-dev/flet, 17k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Tbm Plugin?

Far-Se (a GitHub user) maintains it in Far-Se/tabame, which has 372 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on October 7, 2026.

Source: Far-Se/tabame on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.