Vellum Assistant is a personal AI assistant that remembers information about users, learns their preferences, and takes actions across connected apps. It is intended for people who want an assistant that can manage conversations, unfinished work, and proactive notifications over time. The catalogue skills, hooks, instruction, and setting configure or extend how the assistant works.
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.
npx skills add vellum-ai/vellum-assistant --skill spreadsheet-authoringgit clone --depth 1 https://github.com/vellum-ai/vellum-assistantWrote 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.
[](https://agentmods.dev/skills/vellum-ai/vellum-assistant/spreadsheet-authoring)<a href="https://agentmods.dev/skills/vellum-ai/vellum-assistant/spreadsheet-authoring"><img src="https://agentmods.dev/badge/skills/vellum-ai/vellum-assistant/spreadsheet-authoring/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/vellum-ai/vellum-assistant/spreadsheet-authoring"><img src="https://agentmods.dev/badge/skills/vellum-ai/vellum-assistant/spreadsheet-authoring.svg" alt="Reviewed on agentmods" width="80" height="20"></a>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.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00044 | $0.01681 |
| Opus 5.5 | $0.00018 | $0.00672 |
| Sonnet 5.5 | $0.00009 | $0.00336 |
| Haiku 4.5 | $0.00004 | $0.00168 |
Grade A, and why
spreadsheet-authoring 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 22d 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.
How it starts
The opening of the file, as written. The whole thing — 171 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Spreadsheet Authoring
Write workbooks whose numbers are visible everywhere they are opened.
A formula is stored with the value it produced
An .xlsx cell holding a formula stores two things: the formula text, and the
value that formula last produced. Excel fills the value in when it saves.
openpyxl writes none, because it has no formula engine.
Anything that does not run a formula engine shows what the file stores. Chat
file previews, Quick Look, Google Drive previews, and mail previews all read
the stored value, so a workbook written by openpyxl shows =SUM(C2:C7) where
the total should be, and a summary sheet of formulas comes out blank.
So: write the computed value next to every formula. Compute it in Python, where the data already is.
Install the two packages first
Both come from PyPI and neither is there by default. Run this once at the start of the task; the import check makes it a no-op when they are already installed.
python3 -c "import xlsxwriter, openpyxl" 2>/dev/null \
|| pip install --user --quiet XlsxWriter==3.2.9 openpyxl==3.1.5 \
|| pip install --user --quiet --break-system-packages XlsxWriter==3.2.9 openpyxl==3.1.5
Use pip, not python3 -m pip. Some environments mark the system Python as
externally managed, and the second form is refused there outright. If both
attempts fail, build a virtualenv somewhere that persists
(python3 -m venv .venv), install into it, and run the scripts below with
.venv/bin/python.
Writing a new workbook
Use XlsxWriter. write_formula(row, col, formula, format, value) takes the
value as its last argument, which is the whole point.
import datetime
import xlsxwriter
rows = [
("Widget", datetime.date(2026, 1, 5), 120, 4.50),
("Gadget", datetime.date(2026, 1, 6), 80, 12.00),
("Doohickey", datetime.date(2026, 1, 7), 45, 7.25),
]
last = len(rows) + 1
book = xlsxwriter.Workbook("sales.xlsx")
bold = book.add_format({"bold": True})
money = book.add_format({"num_format": "#,##0.00"})
day = book.add_format({"num_format": "yyyy-mm-dd"})
sales = book.add_worksheet("Sales")
sales.write_row(0, 0, ["Item", "Date", "Units", "Unit price", "Total"], bold)
for index, (item, sold_on, units, price) in enumerate(rows, start=1):
sales.write_string(index, 0, item)
sales.write_datetime(index, 1, sold_on, day)
sales.write_number(index, 2, units)
sales.write_number(index, 3, price, money)
line = index + 1
sales.write_formula(index, 4, f"=C{line}*D{line}", money, units * price)
summary = book.add_worksheet("Summary")
summary.write_string(0, 0, "Revenue", bold)
summary.write_formula(
0, 1, f"=SUM(Sales!E2:E{last})", money, sum(u * p for _, _, u, p in rows)
)
summary.write_string(1, 0, "Items sold", bold)
summary.write_formula(1, 1, f"=COUNTA(Sales!A2:A{last})", None, len(rows))
book.close()
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.
- 22d ago First seen · 171 lines · 44 tokens per session scan A 8ba6c79cc846
spreadsheet-authoring is a skill published in the GitHub repository vellum-ai/vellum-assistant (1,430 stars, last pushed 3d ago), licensed MIT. It adds 44 tokens to every session and 1,681 once invoked, about $0.0002 per session on Opus 5.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-09-25.
Other skills, from other repositories
ha-data-analytics
A local-first data-analysis and reporting skill for CSV and spreadsheet files. It produces decision-ready analyses and shareable offline reports while separating facts, calculations, interpretations, and recommendations.
office-xlsx
Use when the user asks to create, inspect, verify, analyze, format, or deliver Excel .xlsx workbooks, Google Sheets-targeted spreadsheet artifacts, trackers, budgets, models, tables, dashboards, formulas, CSV/TSV-to-XLSX conversions, or spreadsheet-ready data packs.
sandbox-xlsx
Read and write Excel workbooks in a Code node or CodeAct action, with exceljs running on the host.
sandbox-csv
Parse and write CSV in a Code node or CodeAct action, with papaparse running on the host behind a generated facade.
aio-google-workspace
Interact with Google Workspace services via the gws CLI. Use when the user wants to send email, read Gmail, upload to Drive, create a Google Calendar event, read or write Google Sheets, generate a standup report, manage Google Tasks, or work with Google Docs, Slides, Chat, or Contacts.
anthropic-xlsx
Comprehensive spreadsheet creation, editing, and analysis with support for formulas, formatting, data analysis, and visualization. When Claude needs to work with spreadsheets (.xlsx, .xlsm, .csv, .tsv, etc) for: (1) Creating new spreadsheets with formulas and formatting, (2) Reading or analyzing data, (3) Modify…