ModsCode / Claude Code Mods / Ranking / status-band
status-band
One tidy band above the prompt: usage limits and spend, context weather, what the last turn did, and your open tasks, each on its own labelled row, with Compact now and Handoff buttons always there.
What it does
- Draws a pane, a band above the prompt, toasts
- Adds /mods, /band
- Watches tool calls and can refuse them
- Hooks prompt.submit, session.start, turn.complete, turn.start
- Keeps its own state between turns
Good points
- No network calls
- Written in TypeScript
- Has a desktop-specific branch
- Handles errors
Code to start from
A starter ModsCode writes from the drawing it read, and the mod's own lines that draw, where there are any.
Starter (register.tsx)
import type { Register } from 'claude-code'
// Drawn like status-band by finalpantasy (pane, band, toast), as ModsCode read it from the mod's code:
// https://modscode.com/claude-mods/mods/finalpantasy-status-band/
// Written by ModsCode from that reading, not copied from the mod: use it as you like.
// Each value below stands for one the mod works out at run time; put in your own.
export const register: Register = on => {
// the pane: open it with $.ui.open({ id: 'my-pane', title: "Mods" })
on('ui.render', { component: 'Pane', requestId: 'my-pane' }, async ($, e) => {
const { Box, Text, Button } = $.ui.resolve(e)
const compactLabel = '…'
const handoffLabel = '…'
const days = '…'
const label = '…'
const label2 = '…'
const label3 = '…'
const name = '…'
const pending = '…'
const error = '…'
const description = '…'
const name2 = '…'
const description2 = '…'
const name3 = '…'
const description3 = '…'
return (
<Box flexDirection="column" gap={1}>
<Box flexDirection="column">
<Text bold>
This chat
</Text>
<Box flexDirection="row" gap={1}>
<Button label={`${compactLabel}`} plain />
<Button label={`${handoffLabel}`} plain />
</Box>
<Text dimColor>
{`Week pace: learned from ${days} days of your activity, recent weeks counting most.`}
</Text>
</Box>
<Box flexDirection="column">
<Text bold>
Band rows
</Text>
<Text dimColor>
Change right away.
</Text>
<Box flexDirection="row" gap={1}>
<Button label="Turn on" plain />
<Text color="#1D9E75" bold>
{"on "}
</Text>
<Text>
{label}
</Text>
</Box>
<Box flexDirection="row" gap={1}>
<Button label="Turn on" plain />
<Text color="#1D9E75" bold>
{"on "}
</Text>
<Text>
{label2}
</Text>
</Box>
<Box flexDirection="row" gap={1}>
<Button label="Turn on" plain />
<Text color="#1D9E75" bold>
{"on "}
</Text>
<Text>
{label3}
</Text>
</Box>
</Box>
<Box flexDirection="column">
<Text bold>
Mods
</Text>
<Text dimColor>
Switches apply from your next session.
</Text>
<Text dimColor>
Reading your mods…
</Text>
<Text dimColor>
No mods found.
</Text>
<Box flexDirection="column">
<Box flexDirection="row" gap={1}>
<Button label="Turn off" plain />
<Text color="#1D9E75" bold>
{"on "}
</Text>
<Text bold>
{name}
</Text>
<Text color="#378ADD">
{`(${pending} next session)`}
</Text>
<Text color="#E24B4A">
{`could not switch: ${error}`}
</Text>
</Box>
<Box marginLeft={5}>
<Text dimColor wrap="wrap">
{description}
</Text>
</Box>
</Box>
<Box flexDirection="column">
<Box flexDirection="row" gap={1}>
<Button label="Turn off" plain />
<Text color="#1D9E75" bold>
{"on "}
</Text>
<Text bold>
{name2}
</Text>
<Text color="#378ADD">
{`(${pending} next session)`}
</Text>
<Text color="#E24B4A">
{`could not switch: ${error}`}
</Text>
</Box>
<Box marginLeft={5}>
<Text dimColor wrap="wrap">
{description2}
</Text>
</Box>
</Box>
<Box flexDirection="column">
<Box flexDirection="row" gap={1}>
<Button label="Turn off" plain />
<Text color="#1D9E75" bold>
{"on "}
</Text>
<Text bold>
{name3}
</Text>
<Text color="#378ADD">
{`(${pending} next session)`}
</Text>
<Text color="#E24B4A">
{`could not switch: ${error}`}
</Text>
</Box>
<Box marginLeft={5}>
<Text dimColor wrap="wrap">
{description3}
</Text>
</Box>
</Box>
</Box>
</Box>
)
})
// the band above the prompt; what else goes there is drawn under it
on('ui.render', { component: 'AbovePrompt' }, async ($, e, next) => {
const { Box, Text } = $.ui.resolve(e)
return (
<Box flexDirection="column">
<Box flexDirection="row">
<Box flexDirection="column" flexGrow={1} flexShrink={1}>
<Box flexDirection="column" paddingX={1} />
</Box>
<Box flexShrink={0} marginLeft={1} alignSelf="flex-start">
<Text dimColor>
▾
</Text>
</Box>
</Box>
{await next(e)}
</Box>
)
})
on('session.start', async ($, e, next) => {
await $.ui.toast(`Claude is working. The chat compacts as soon as this turn ends.`)
await $.ui.toast(`Compacting: /compact is running in this chat.`)
return next(e)
})
}
The mod's own code
Shown under the mod's licence (MIT); its text is below. Keep the notice if you copy these lines.
status-band/hooks/register.tsx lines 350–414 · Pane
on('ui.render', { component: 'Pane', requestId: MODS_PANE }, async ($, e) => {
const { Box, Text, Button } = $.ui.resolve(e)
const off = await read($, rowsOff)
const list = await read($, mods)
const toggleRow = async (key: string) => {
const next = off.includes(key) ? off.filter(k => k !== key) : [...off, key]
await update($, rowsOff, () => next)
await $.store.set('rowsOff', next)
}
const toggleMod = async (m: ModInfo) => {
const turnOn = !m.isOn
const error = await switchMod($, m.id, turnOn)
await update($, mods, ms =>
(ms ?? []).map((x): ModInfo => (x.id !== m.id ? x : error ? { ...x, pending: 'failed', error } : { ...x, isOn: turnOn, pending: turnOn ? 'on' : 'off' })))
}
const state = (isOn: boolean) => <Text color={isOn ? GREEN : MUTED} bold>{isOn ? 'on ' : 'off'}</Text>
const cState = await read($, compactState)
const hState = await read($, handoffState)
const learned = await profileOf($, await $.clock.now())
return (
<Box flexDirection="column" gap={1}>
<Box flexDirection="column">
<Text bold>This chat</Text>
<Box flexDirection="row" gap={1}>
<Button key="p-compact" label={compactLabel(cState)} plain onPress={() => void compactNow($)} />
<Button key="p-handoff" label={handoffLabel(hState)} plain onPress={() => void handoffNow($)} />
</Box>
<Text dimColor>{learned.days > 0 ? `Week pace: learned from ${learned.days} days of your activity, recent weeks counting most.` : 'Week pace: midnight to 8am counted as quiet until it has 3 days of your activity.'}</Text>
</Box>
<Box flexDirection="column">
<Text bold>Band rows</Text>
<Text dimColor>Change right away.</Text>
{ROWS.map(r => (
<Box key={`row-${r.key}`} flexDirection="row" gap={1}>
<Button key={`r-${r.key}`} label={off.includes(r.key) ? 'Turn on' : 'Turn off'} plain onPress={() => void toggleRow(r.key)} />
{state(!off.includes(r.key))}
<Text>{r.label}</Text>
</Box>
))}
</Box>
<Box flexDirection="column">
<Text bold>Mods</Text>
<Text dimColor>Switches apply from your next session.</Text>
{list === null ? <Text dimColor>Reading your mods…</Text> : null}
{list?.length === 0 ? <Text dimColor>No mods found.</Text> : null}
{(list ?? []).map(m => (
<Box key={`mod-${m.id}`} flexDirection="column">
<Box flexDirection="row" gap={1}>
<Button key={`m-${m.id}`} label={m.isOn ? 'Turn off' : 'Turn on'} plain onPress={() => void toggleMod(m)} />
{state(m.isOn)}
<Text bold>{m.name}</Text>
{m.pending === 'on' || m.pending === 'off' ? <Text color={BLUE}>{`(${m.pending} next session)`}</Text> : null}
{m.pending === 'failed' ? <Text color={RED}>{`could not switch: ${m.error ?? ''}`}</Text> : null}
</Box>
{m.description ? (
<Box marginLeft={5}>
<Text dimColor wrap="wrap">{m.description}</Text>
</Box>
) : null}
</Box>
))}
</Box>
</Box>
)
})status-band/hooks/register.tsx lines 422–581 · Band
on('ui.render', { component: 'AbovePrompt' }, async ($, e, next) => {
if (e.props.hasSurvey || (await read($, isHidden)) || (await read($, modsHidden))) return next(e)
const ui = $.ui.resolve(e)
const { Box, Text } = ui
const Svg = e.surface === 'desktop' && 'Svg' in ui ? ui.Svg : null
const Button = 'Button' in ui ? ui.Button : null
const now = await $.clock.now()
const u = await read($, usage)
const rs = await read($, readings)
const t = await read($, lastTurn)
const todo = taskSummary(await read($, tasks))
const off = await read($, rowsOff)
const isOn = (key: string) => !off.includes(key)
const row = (key: string, label: string, ...cells: RenderChildren[]) => (
<Box key={key} flexDirection="row" gap={1} alignItems="center">
<Box width={LABEL_W} flexShrink={0}>
<Text dimColor>{label}</Text>
</Box>
{cells}
</Box>
)
// Every row's bar is the same size; a row with no bar keeps the space, so the text lines up.
const bar = (key: string, source: string | null, alt: string) =>
Svg ? <Svg key={key} source={source ?? blankSvg()} alt={alt} width={BAR_W} height={BAR_H} /> : null
const dot = (k: string) => <Text key={k} color={MUTED}>{' · '}</Text>
const rows: RenderChildren[] = []
const last = rs[rs.length - 1]
const mine = await read($, ledger)
const rest = Object.values(await read($, others)).map(o => o.ledger)
const sum = totalsOf([mine, ...rest], now)
const isFull = !!last && last.percent >= CONTEXT_COMPACT
const cState = await read($, compactState)
const hState = await read($, handoffState)
// Compact now and Handoff always show; Compact now is the loud one once the context is full.
const actions = Button
? [
<Button key="compact" label={compactLabel(cState)} variant={isFull && cState === 'idle' ? 'primary' : 'secondary'} onPress={() => void compactNow($)} />,
<Button key="handoff" label={handoffLabel(hState)} variant="secondary" onPress={() => void handoffNow($)} />,
]
: null
let isActionsPlaced = false
if (Svg) {
// The desktop: three rings, four money tiles, and a line under them only when something needs you.
const ring = (key: string, source: string, alt: string, label: string, sub: string, color?: string) => (
<Box key={key} flexDirection="column" alignItems="center">
<Svg source={source} alt={alt} width={RING} height={RING} />
<Text color={color ?? MUTED} bold={color !== undefined}>{label}</Text>
{sub ? <Text color={MUTED}>{sub}</Text> : null}
</Box>
)
const rings: RenderChildren[] = []
const pace = u && u.week >= 0 ? weekPace(u.week, u.weekResets, now, await profileOf($, now)) : null
const weekLeft = u ? resetsIn(u.weekResets, now) : ''
if (isOn('week') && u && pace) {
rings.push(ring('rw', ringSvg(u.week, pace.color, [{ at: pace.elapsed, color: '#D3D1C7' }]), `weekly limit ${Math.round(u.week)}% used`,
pace.level === 'ok' ? 'week' : 'week ⚠', weekLeft ? `resets ${weekLeft}` : '', pace.level === 'ok' ? undefined : pace.color))
}
if (isOn('usage') && u && u.fiveHour >= 0) {
const five = resetsIn(u.fiveResets, now)
rings.push(ring('r5', ringSvg(u.fiveHour, levelColor(u.fiveHour)), `5-hour window ${Math.round(u.fiveHour)}% used`, '5-hour', five ? `resets ${five}` : ''))
}
if (isOn('context') && last) {
rings.push(ring('rc', ringSvg(last.percent, contextColor(last.percent), [{ at: CONTEXT_COMPACT, color: '#E24B4A' }]), `context ${last.percent}% full`,
isFull ? 'context ⚠' : 'context', `${short(last.tokens)} / ${short(last.window)}`, isFull ? RED : undefined))
}
const showSpend = isOn('spend') && !!u
const showTokens = isOn('tokens')
const tile = (key: string, label: string, usd: number, tokens: number) => (
<Box key={key} flexDirection="column" paddingX={1} backgroundColor={TILE} minWidth={TILE_W}>
<Text color={MUTED}>{label}</Text>
{showSpend ? <Text bold>{dollars(usd)}</Text> : null}
{showTokens ? <Text color={MUTED}>{`${tokensShort(tokens)} tok`}</Text> : null}
</Box>
)
const tiles = showSpend || showTokens
? [tile('t0', 'this chat', u ? u.usd : 0, mine.tokens), tile('t1', 'today', sum.today.usd, sum.today.tokens),
tile('t2', '7 days', sum.week.usd, sum.week.tokens), tile('t3', 'all time', sum.all.usd, sum.all.tokens)]
: []
if (rings.length || tiles.length) {
rows.push(
<Box key="dash" flexDirection="row" gap={2} alignItems="center" flexWrap="wrap">
{rings.length ? <Box key="rings" flexDirection="row" gap={2}>{rings}</Box> : null}
{tiles.length ? <Box key="tiles" flexDirection="row" gap={1}>{tiles}</Box> : null}
{actions}
</Box>,
)
isActionsPlaced = true
}
if (isOn('week') && pace && pace.level !== 'ok') {
rows.push(<Text key="wwarn" color={pace.color} wrap="truncate-end">{`⚠ Week: ${pace.word}${weekLeft ? ` · resets in ${weekLeft}` : ''}`}</Text>)
}
if (isOn('context') && isFull && last) {
rows.push(<Text key="cwarn" color={RED} wrap="truncate-end">{`⚠ Context ${last.percent}% full: compact to keep the next turns cheap`}</Text>)
}
} else {
// The weekly limit leads: it is the one that runs out for days.
if (isOn('week') && u && u.week >= 0) {
const pace = weekPace(u.week, u.weekResets, now, await profileOf($, now))
const week = resetsIn(u.weekResets, now)
rows.push(row('week', 'week',
bar('bw', barSvg(u.week, pace.color, [{ at: pace.elapsed, color: '#D3D1C7' }]), `weekly limit ${Math.round(u.week)}% used`),
<Text key="wk" wrap="truncate-end">
<Text color={pace.color} bold>{`${Math.round(u.week)}% used`}</Text>
<Text color={pace.level === 'ok' ? MUTED : pace.color} bold={pace.level !== 'ok'}>{` ${pace.level === 'ok' ? '' : '⚠ '}${pace.word}`}</Text>
{week ? <Text color={MUTED}>{` · resets in ${week}`}</Text> : null}
</Text>,
))
}
if (isOn('usage') && u && u.fiveHour >= 0) {
const five = resetsIn(u.fiveResets, now)
rows.push(row('usage', '5-hour',
bar('b5', barSvg(u.fiveHour, levelColor(u.fiveHour)), `5-hour window ${Math.round(u.fiveHour)}%`),
<Text key="use" wrap="truncate-end">
<Text color={levelColor(u.fiveHour)} bold>{`${Math.round(u.fiveHour)}% used`}</Text>
{five ? <Text color={MUTED}>{` resets in ${five}`}</Text> : null}
</Text>,
))
}
if (isOn('context') && last) {
const prev = rs[rs.length - 2]
const delta = prev ? last.tokens - prev.tokens : 0
const color = contextColor(last.percent)
rows.push(row('context', 'context',
bar('bc', barSvg(last.percent, color, [{ at: CONTEXT_COMPACT, color: '#E24B4A' }]), `context ${last.percent}% full`),
<Text key="ctx" wrap="truncate-end">
<Text color={color} bold>{`${last.percent}% full`}</Text>
<Text color={MUTED}>{` ${short(last.tokens)} / ${short(last.window)}`}</Text>
{delta !== 0 ? <Text color={MUTED}>{` ${delta > 0 ? '▲ +' : '▼ '}${short(Math.abs(delta))} last turn`}</Text> : null}
<Text color={isFull ? RED : MUTED} bold={isFull}>{` ${isFull ? '⚠ ' : ''}${forecast(last.percent)}`}</Text>
</Text>,
actions,
))
isActionsPlaced = true
}
if (isOn('spend') && u) {
rows.push(row('spend', 'spend', bar('bs', null, ''),
<Text key="sp" wrap="truncate-end">
<Text bold>{dollars(u.usd)}</Text><Text color={MUTED}>{' this chat'}</Text>{dot('s1')}
<Text bold>{dollars(sum.today.usd)}</Text><Text color={MUTED}>{' today'}</Text>{dot('s2')}
<Text bold>{dollars(sum.week.usd)}</Text><Text color={MUTED}>{' 7d'}</Text>{dot('s3')}
<Text bold>{dollars(sum.all.usd)}</Text><Text color={MUTED}>{' all time'}</Text>
</Text>,
))
}
if (isOn('tokens') && sum.all.tokens > 0) {
rows.push(row('tokens', 'tokens', bar('bt', null, ''),
<Text key="tk" wrap="truncate-end">
<Text bold>{tokensShort(mine.tokens)}</Text><Text color={MUTED}>{' this chat'}</Text>{dot('t1')}
<Text bold>{tokensShort(sum.today.tokens)}</Text><Text color={MUTED}>{' today'}</Text>{dot('t2')}
<Text bold>{tokensShort(sum.week.tokens)}</Text><Text color={MUTED}>{' 7d'}</Text>{dot('t3')}
<Text bold>{tokensShort(sum.all.tokens)}</Text><Text color={MUTED}>{' all time'}</Text>
</Text>,
))
}Licence text (MIT)
MIT License Copyright (c) 2026 finalpantasy Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
How to build this: Pane (panel), Deny a tool call
What its code calls
runs programswrites filesenv varsdrives Claudetool callsrememberscalls tools
What its code shows
Read from the source at commit e704d9a3c393. The first group decides whether a mod is listed; the rest is for you to weigh. A later commit is not read until the next crawl.
| Decides the listing: code you can check | |
|---|---|
| Entry read | Every module hooks/hooks.json names was read.status-band/hooks/register.tsx |
| Parses | Every file parses as TypeScript or JavaScript.3 files parsed |
| All its code is in the mod | Every import is a file of the mod or the engine's own module; no packages, no require.all its code is in the mod |
| Readable | No minified lines, no eval or new Function, no import of a computed path, no encoded blobs.no minified code, no eval, no encoded blobs |
| Calls in the open | Network and programs are reached as $.http.fetch and $.process.run in place, never passed around.every call outside goes through $ in the open |
| For you to weigh before installing | |
| Where it draws | The terminal, the desktop app, both, or nothing (hooks only: a guard or a prompt rewriter), as its code says. Shown, never a reason to leave a mod out.draws in the terminal and the desktop app, with its own branch for the desktop |
| Install line | Whether its repository's own .claude-plugin/marketplace.json lists it, so it installs from that marketplace with the lines on its page.listed in its repository's .claude-plugin/marketplace.json: installs from there |
| Programs on Windows | Whether every program it starts through $.process exists on Windows (tail, date, open, osascript, /usr/… do not).runs no program a Windows PC lacks |
| Network | Whether every fetch names its https host in the code.no network |
| Programs | Whether every program it starts is named in the code and is not a shell, an interpreter or a network tool.claude (reaches the network) |
| Reads and sends | Whether it both reads something of yours (files, environment variables, the transcript, settings) and reaches outside (the network, an MCP server, another session, telemetry).reads environment variables, files, settings.json and reaches the network |
| Keys in the source | Whether the source holds what looks like an API key or a private key.no keys in the source |
| Licence | An open licence (MIT, Apache-2.0, BSD, ISC, Unlicense, 0BSD, CC0) with its text lets ModsCode show its code; otherwise the code is linked.MIT |
| Settings hooks | Hooks declared in hooks/hooks.json or plugin.json beside the module: a command (a shell when it has no args), an HTTP request, an MCP tool or a model prompt at an event. They run outside $.no settings hooks: its function hooks alone |
| Servers it ships | MCP servers (a program, or a URL; a headersHelper is a shell command; a .mcpb bundle is unpacked at run time), LSP servers, monitors (a shell command for the whole session) and bin/ (on the PATH of the Bash tool).ships no MCP or LSP server, no monitor, no bin/ |
| Skills, commands, agents | What its Markdown declares beyond text: allowed-tools granted for the turn, hooks added when a skill is invoked, a command run before Claude reads the skill.no skills, commands, agents or workflows |
| Tools and MCP | Whether every tool it calls through $.tool.call and $.mcp.call is named in the code, and none is a shell (Bash through the tool runs a shell without $.process).command.run: /compact; command.run: /hide-mods |
| Asks of the model | Completions it runs ($.model.complete, fork, classify), subagents it spawns, prompts it submits as you, and the tools, commands and agents it adds.prompt.submit (as the person), adds command band, adds command mods |
| Events it hooks | By what a hook there can do: gates (refuse a tool call, a prompt, a setting, another plugin), shapes (what the model reads: the system prompt, tool descriptions, each request), reads (your input, the events of the settings hooks, every event with *), and the rest.gates: prompt.submit, tool.call, command.run (mods, band) · also: session.start, turn.start, turn.complete, ui.render (Pane, AbovePrompt) · timers: clock.every |
| Reads, by name | The environment variables and files it names, and whether it reads the transcript, settings.json, the prompt box or the mouse selection.env: USERPROFILE, HOME; files: a path computed at run time, …/…, …/.claude/plugins/installed_plugins.json, …/hooks/hooks.json, …/.claude-plugin/plugin.json (+1); settings.json |
| Writes, by name | The files and environment variables it names, and whether it changes settings, the prompt box, the clipboard, the conversation (a row the model reads) or another session.files: …/….json |
This is a reading of the code text, not a security review: it does not run the mod, and it cannot see what a program the mod starts does. The check before installing is yours. How mods are chosen
Install it
Check it yourself before you install it. Mods run unsandboxed, with your permissions, and ModsCode does not vouch for what this code does. Read its code (or run claude plugin validate . in its folder), weigh what it reaches, and install the commit you read.
From its marketplace
Its repository is its marketplace. Add that marketplace (in the terminal with these commands, or in the desktop app's plugin settings) and install the mod from it:
/plugin marketplace add finalpantasy/claude-mod-pack/plugin install status-band@claude-mod-pack/reload-pluginsThis installs the marketplace's latest commit, which may not be the one read here (e704d9a3c393). Compare them before you install. /reload-plugins loads it into a session that is already open.
Try the commit ModsCode read
No marketplace needed. In a terminal, clone the repository, check out the commit read, validate the mod, and load it for one session:
git clone https://github.com/finalpantasy/claude-mod-packgit -C claude-mod-pack checkout e704d9a3c39382ef38682163c14b98aad7965a09claude plugin validate claude-mod-pack/status-bandclaude --plugin-dir claude-mod-pack/status-bandThe validate line lists the events the mod hooks and what it asks Claude Code to do, without running it. The last line loads the mod for this session only and writes nothing to your settings. If the author has rewritten history, the commit may no longer exist.
Ask Claude or ChatGPT about it
With ModsCode added as a connector, Claude or ChatGPT can read this mod's code, what it reaches and how its controls are wired, and build on them. Ask it like this:
Read the ModsCode mod "finalpantasy-status-band" with its code and make me one like itAdd the ModsCode MCP to Claude or ChatGPT
Similar mods
- code-modernizationAnthropic★ 37,809
- crit-tuiTomasz Tomczyk★ 1,205
- ai-maestro-secrets23blocks-OS★ 820
- remctlFederico Viticci★ 595
- agent-radarHamza Zafar★ 228
- task-orchestrator-modJeff Picklyk★ 208
More from this repository
Badge for your README
If this is your mod, paste this into your README. It links to this page.
[](https://modscode.com/claude-mods/mods/finalpantasy-status-band/)