Skip to content
claudemods

Claudinho Claude Code mod: live football scores in Claude Code

Live football scores above the Claude Code prompt, with goal toasts, a goal celebration and a match pane.

Permissions

  • Reads filesCan read files and list directories on your machine ($.fs.read / list / stat / exists).
  • Runs commandsCan run shell programs on your machine ($.process.run / spawn). Check the source for exactly which ones.
  • Reads your promptsCan see what you type and the conversation transcript (prompt.* / session.append / session.messages).
  • Changes the UIDraws into the Claude Code interface: bands, panes, status text, toasts (ui.render / $.ui.*).
  • Adds commands/toolsRegisters new slash commands or tools that you or Claude can invoke ($.command.register / $.tool.register).
tested with
v2.1.303
last tested
requires
Claude Code ≥ 2.1.287
surfaces
above-prompt, pane, toast

Install inside Claude Code:

/plugin install claudinho --marketplace arturogarrido/claudinho
All install options ↓

What does this mod do?

Claudinho is a community mod by Arturo Garrido (arturogarrido) that puts live football scores in Claude Code. For the competition you follow, it shows either the live score (⚽ ARS 2–1 CHE 50', the score in bold) or the countdown to the next match (⚽ ARS vs LEE in 7h13m) in a band above the prompt. Typing /claudinho prints the same line on demand, followed by the data provider's name and a non-affiliation sentence.

On top of the band, the author's README describes four more things:

  • Toasts that say what happened: a goal and its scorer, a goal against, a corrected score, penalties, and full time with the result. By default only your pinned team's match raises a toast.
  • A goal celebration: Anthropic's Claude mascot as text art and GOAL! for about three seconds in the band, when your team scores, and once more when it wins or draws.
  • A match pane: /claudinho match opens a pane with the match, its goals and cards.
  • Score context for the model: while a match is live, each prompt you send carries the current score, so Claude knows it.

The plugin does not fetch football data. It runs the claudinho command-line tool you install separately, which reads ESPN and keeps a local cache. The band, toasts and pane are drawn from that tool's JSON answers. The plugin's own text is available in English, Spanish, Portuguese and French.

Install

Use any of the methods in the install block; they install straight from the author's own marketplace. Before the band shows anything, install the CLI it reads (Node.js 20 or later) and pick a competition, as the README describes: npm i -g @claudinho/cli, then claudinho follow premier-league --team Arsenal. The plugin needs @claudinho/cli 0.12.0 or later for everything on the README; an older 0.11.2 CLI gives a reduced version.

$ install claudinho

Requires Claude Code ≥ 2.1.287

Installs from the author's own marketplace: arturogarrido/claudinho

  1. 1.One line, inside Claude Code

    /plugin install claudinho --marketplace arturogarrido/claudinho

    Paste into a running session (v2.1.275+). Claude Code asks to add the marketplace first.

  2. 2.From your shell

    claude plugin marketplace add arturogarrido/claudinho
    claude plugin install claudinho@claudinho

    Then run /reload-plugins in any session that is already open.

  3. 3.Try it without installing

    git clone https://github.com/arturogarrido/claudinho
    claude --plugin-dir ./claudinho/packages/plugin

    Loads the mod for one session only. Nothing is added to your settings.

How it works

The plugin is one hooks module, hooks/register.tsx. Every 15 seconds while a terminal or desktop window is attached (every five minutes on an idle line), it runs the CLI with an argument list and no shell, reads the first line of the JSON it prints, and draws the result. From register.tsx:

result = await $.process.run(['claudinho', 'ambient', '--json', '--columns', String(columns), ...langArgs(lang)], {
  timeoutMs: RUN_TIMEOUT_MS,
  stdin: '',
  ...(env ? { env } : {}),
})

RUN_TIMEOUT_MS is 2 seconds. A missing binary, a timeout or an answer that is not the expected object shows nothing and never blocks a turn. The toasts come from comparing two successive readings of the same match. /claudinho match runs claudinho match <id> --json once and re-reads it every two minutes while the match is in play, or when the band sees the score change. The celebration is held while Claude is working and plays when the turn ends, if it is within a minute of the goal.

Customize it

Four options appear in /config, and changing one reloads the plugin:

  • toasts: pinned (default), all or off.
  • celebrate: on (default) or off.
  • context: on (default) or off. Off sends nothing with your prompts.
  • language: auto (default), en, es, pt or fr. Under auto, CLAUDINHO_LANG and then LANG decide.

Which team is pinned and which competition you follow are set with the CLI (claudinho follow <alias> --team <name>), not in the plugin.

Permissions & safety

We read every file the plugin can execute before running it: .claude-plugin/plugin.json, hooks/hooks.json, hooks/register.tsx (2,191 lines) and the type declarations, and searched the test files for process, network, file and eval calls (none). There is no package.json in the plugin directory, no install script, no bundled or minified code and no binary. We found no hidden or zero-width characters. Here is what we found:

  • Runs a program: $.process.run starts only claudinho (ambient --json, and match <id> --json), as an argument array with an empty stdin, a 2 second limit (5 seconds for the pane). It is found through the PATH, which the plugin extends with the usual global-bin folders (nvm, Volta, pnpm, Bun, npm-global, ~/.local/bin, Homebrew, /usr/local/bin). It runs whichever claudinho it finds first, so it is only as safe as the CLI you installed. We did not audit the CLI.
  • Network: none in the plugin. The CLI contacts ESPN, and Polymarket for a World Cup match signal in the pane, according to the author's PRIVACY.md. We did not verify what the CLI sends.
  • Reads on your machine: the environment variables OS, PATH, HOME, CLAUDINHO_LANG and LANG, and a listing of ~/.nvm/versions/node (the first 256 entries) with an existence check for bin/claudinho. It reads no file contents and writes no file. It writes no environment variables.
  • Adds text to prompts: the prompt.submit hook appends the CLI's live-score note (view.context) to the prompt context when a live match was read less than 30 seconds ago. It does not read, change or store your prompt, and it is not a gate. It is on by default; set context to off to stop it. The note is whatever the CLI prints, so its wording is the CLI's, not the plugin's.
  • Gating hooks: claude plugin validate lists ui.close{id=match} and prompt.submit as hooks without .catch. Both pass the event on with next(e) and neither blocks or rewrites a tool call.
  • Daemons, telemetry, obfuscation: no daemon, no analytics, no eval or remote code. Timers live only while Claude Code runs.
  • Outside its store: nothing in the plugin. Separately, the README says claudinho init plugin (a CLI command you run yourself) removes Claudinho's own statusline and prompt hook from ~/.claude/settings.json so the score is not shown twice. It keeps other settings. We did not read that code.
  • Anthropic's mascot: the celebration draws Anthropic's Claude mascot. The README says it is removed if Anthropic asks.
  • License: MIT, LICENSE file present, which allows redistribution.

claude plugin validate reported no errors and no warnings. The author's 791 tests across 12 files passed on Claude Code 2.1.303.

Reads files
Can read files and list directories on your machine ($.fs.read / list / stat / exists).
Runs commands
Can run shell programs on your machine ($.process.run / spawn). Check the source for exactly which ones.
Reads your prompts
Can see what you type and the conversation transcript (prompt.* / session.append / session.messages).
Changes the UI
Draws into the Claude Code interface: bands, panes, status text, toasts (ui.render / $.ui.*).
Adds commands/tools
Registers new slash commands or tools that you or Claude can invoke ($.command.register / $.tool.register).

Compatibility & troubleshooting

Checked with Claude Code 2.1.303 on macOS (validate and tests only; we did not run it against live data). If the band is empty:

  • claudinho --version works in a terminal and is 0.12.0 or later.
  • You picked a competition: with none, the band says ⚽ claudinho follow, or nothing.
  • The CLI is installed in a folder the plugin looks in. A CLI installed anywhere else leaves the band empty and /claudinho answers The CLI gave no answer.
  • A terminal or the desktop app's Code tab is attached. With claude -p or the SDK the band does not run.
  • For toasts, you pinned a team with claudinho follow <alias> --team <name>, or set toasts to all.

Toasts are best effort: the author notes a goal the plugin could not confirm is said late, and full time is only said from a current reading.

The band only has something to show around a match: a countdown before kickoff and the score while the match is live.

FAQ

Do I need to install anything besides the plugin?
Yes. The plugin draws nothing by itself. It runs the claudinho command from the npm package @claudinho/cli (Node.js 20 or later), and that CLI owns the football data. Without the CLI on your PATH the band stays empty and /claudinho answers "The CLI gave no answer."
Does the plugin send my prompts or files anywhere?
Not in the code we read. The plugin makes no network request. It runs the CLI with arguments that come from the CLI's own answers, the band width and the language, never from your prompts. The CLI's requests go to ESPN, and the author says they carry football parameters only. We did not audit the CLI.
Does it add text to my prompts?
Yes, by default. While a match is live, the prompt.submit hook attaches the CLI's short live-score note to each prompt you send, so Claude can read it. Set the context option to off in /config to send nothing.
How do I turn off the toasts or the goal celebration?
Open /config. The toasts option takes pinned (the default), all or off, and celebrate takes on or off. The default pinned shows toasts only for the team you pinned with claudinho follow, so with no pinned team nothing toasts.
Does it work in headless mode or in the desktop app?
The band, toasts and pane draw in the terminal and the desktop app's Code tab. With claude -p or the SDK the band runs nothing, but /claudinho still answers when you type it.
Done Toast running in Claude CodeFeatured

Done Toast

A "Done in 2m 14s" toast and a short chime when a long Claude turn finishes, plus an optional desktop notification.

  • toast
  • Runs commands
  • Changes the UI
  • Plays sound

tested with v2.1.310

Context Meter running in Claude CodeFeatured

Context Meter

Context-window fill, 5-hour and 7-day plan usage and session cost in the status line, plus a warning near the limit.

  • status
  • toast
  • Changes the UI

tested with v2.1.310

More in Toasts & notifications, Status line & prompt bar.