xlsx

xlsx is a skill for Claude Code, Codex from spinabot/brigade. It costs 79 tokens per session (1,472 once invoked), scanned A, original, MIT.

A tool for building and editing Excel workbooks, including multi-sheet tables and simple financial models. It supports live formulas, number and date formatting, styling, dropdowns, named ranges, frozen panes, merged cells, and conditional formatting.

In plain words
What is it for?
Use it to create or update .xlsx files, build financial models, format data, add validation and formulas, and make targeted changes to existing workbooks.
Why use it?
It keeps calculations as formulas and values as real numbers, so the workbook can recalculate, sort, and update when inputs change. It also provides separate approaches for creating a workbook, editing an existing one, and checking formula results.

Skill for Claude CodeCodex

About the project

Brigade is an ecosystem for running crews of AI agents as a personal intelligence system, with local handling of credentials and support for exposing agent crews to the internet for testing. It is for people who want to organize and operate multiple AI agents using their own API keys or existing Claude, ChatGPT, Copilot, Claude Code, or Codex access. The catalogue skills provide workflows for using Brigade and its agent ecosystem.

spinabot/brigade · 3,391 stars · on GitHub

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add skills/spinabot/brigade/xlsx
Any agent
npx skills add spinabot/brigade --skill xlsx
Clone the repo
git clone --depth 1 https://github.com/spinabot/brigade

Made for: Claude Code, Codex.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for xlsx

README.md
[![agentmods](https://agentmods.dev/badge/skills/spinabot/brigade/xlsx.svg)](https://agentmods.dev/skills/spinabot/brigade/xlsx)
Your own site
<a href="https://agentmods.dev/skills/spinabot/brigade/xlsx"><img src="https://agentmods.dev/badge/skills/spinabot/brigade/xlsx.svg" alt="Measured on agentmods" height="20"></a>
Per session 79 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 1,472 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.00079 $0.01472
Opus 5 $0.00039 $0.00736
Sonnet 5 $0.00016 $0.00294
Haiku 4.5 $0.00008 $0.00147

Measured 5d ago against content hash 80dce4733f9b, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

xlsx scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 5d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

skills/xlsx/SKILL.md · 95 lines

How it starts

The opening of the file, as written. The whole thing — 95 lines — stays where its author put it; the contents beside it link to each section on GitHub.

xlsx — professional spreadsheets & models

Need Path
Simple table / multi-sheet dump (headers + rows, optional per-column number format) Path 1 — make_document tool
Live formulas, cell styling, conditional formatting, dropdowns, named ranges, freeze panes, merged cells, dates Path 2 — script the exceljs library via brigade exec-node
Surgical edits to an existing workbook Path 3 — edit_document tool
Guarantee no formula errors / get computed values Path 4 — recalc-verify loop (optional soffice)

The two non-negotiable rules (they separate a real model from a hack):

  1. Formulas, never hardcoded results. Write the Excel formula string (=B5*(1+$B$6)), never compute the number in code and paste a literal — so the sheet stays live when inputs change. This applies to every total, percentage, ratio, and growth.
  2. Numbers are numbers. Store 1200000, format for display ($#,##0) — never the string "$1.2M", or it won't sum or sort.

Path 1 — quick table (make_document tool)

make_document(format="xlsx", content={ sheets:[{ name, header, rows, numberFormats }] })

Cells may be string | number | {formula, numFmt}. Fine for a straight data table. For styling, validation, charts, or a model → Path 2.

Path 2 — full power: script the exceljs library

Brigade bundles exceljs. write a gen.cjs, then run brigade exec-node gen.cjs:

// gen.cjs — illustrative
const ExcelJS = require("exceljs");
const wb = new ExcelJS.Workbook();
const ws = wb.addWorksheet("Model", { views: [{ state: "frozen", ySplit: 1 }] });   // freeze header row

ws.columns = [
  { header: "Item", key: "item", width: 28 },
  { header: "FY24 ($)", key: "v", width: 16, style: { numFmt: "$#,##0" } },
];
ws.getRow(1).font = { bold: true };
ws.getRow(1).fill = { type: "pattern", pattern: "solid", fgColor: { argb: "FFD9E2F3" } };

// Assumptions block — blue font marks hardcoded INPUTS (banker convention)
ws.getCell("E1").value = "Growth"; ws.getCell("E2").value = 0.18;
ws.getCell("E2").numFmt = "0.0%"; ws.getCell("E2").font = { color: { argb: "FF0000FF" } };
wb.definedNames.add("Model!$E$2", "growth");                                        // named range

ws.addRow({ item: "Revenue", v: 1200000 });
ws.addRow({ item: "Next year", v: { formula: "B2*(1+growth)" } });                  // FORMULA, references the named input
ws.getCell("B3").font = { color: { argb: "FF000000" } };                            // black = formula

// dropdown + conditional formatting
ws.getCell("A6").dataValidation = { type: "list", allowBlank: false, formulae: ['"Low,Med,High"'] };
ws.addConditionalFormatting({ ref: "B2:B3", rules: [
  { type: "cellIs", operator: "lessThan", formulae: ["0"], style: { font: { color: { argb: "FFFF0000" } } } } ]});

wb.xlsx.writeFile(process.argv[2] || "out.xlsx").then(() => console.log("wrote"));

Read the full file on GitHub · 95 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 5d ago First seen · 95 lines · 79 tokens per session scan A 80dce4733f9b

Subscribe to this mod's changes

xlsx is a skill published in the GitHub repository spinabot/brigade (3,391 stars, last pushed 2d ago), licensed MIT. It adds 79 tokens to every session and 1,472 once invoked, about $0.0004 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.