Agent skill

User Docs

by letehaha in letehaha/moneymatter

Write or update the end-user documentation at docs.moneymatter.app (packages/docs, Astro Starlight) and capture its light/dark screenshots from the local dev app with a throwaway test user.

AGPL-3.0Auto-check: notesFrontend & Design

Install User Docs

skills CLI
$ npx skills add letehaha/moneymatter --skill user-docs -a claude-code

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

GitHub CLI
$ gh skill install letehaha/moneymatter user-docs --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/letehaha/moneymatter.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/user-docs .claude/skills/user-docs && 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
user-docs
GitHub stars
160
Token cost
~2.3k tokens
SKILL.md length
848 words
Files
1
Skills in repo
10
Repo updated
First seen
Licence
AGPL-3.0

At a glance

Write or update the end-user documentation at docs.moneymatter.app (packages/docs, Astro Starlight) and capture its light/dark screenshots from the local dev app with a throwaway test user.

  • Works in 4 steps: Find what to change → Write the article → Capture screenshots → …
  • A feature is added
  • SKILL.md covers Hard rules, 1. Find what to change, 2. Write the article and 3. Capture screenshots, plus 1 more section
  • Calls npm; needs RESEND_API_KEY

What it does

User Docs is an agent skill from letehaha/moneymatter. Write or update the end-user documentation at docs.moneymatter.app (packages/docs, Astro Starlight) and capture its light/dark screenshots from the local dev app with a throwaway test user. Use when a feature is added or its UI/behaviour changes and the docs or screenshots need to follow, when asked to "update the docs", "add a docs page", "retake screenshots", or when npm run screenshots:missing lists gaps.

Its SKILL.md is about 2.3k 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 Frontend & Design, covering Static sites and blogs. It works with npm and Astro. The repository describes itself as: A personal budget tracking application. Track your balances and transactions with bank connections or manual entry, categorize and analyze expenses and income, and many more. The licence is AGPL-3.0.

When your agent uses it

  • A feature is added
  • Its UI/behaviour changes and the docs
  • Screenshots need to follow
  • Asked to update the docs

Example prompts

  • “update the docs”
  • “add a docs page”
  • “retake screenshots”
  • “/user-docs”

Requirements

  • Node.js
  • Docker
  • A credential in RESEND_API_KEY

Workflow steps

4 steps, taken from the step headings in SKILL.md.

  1. Find what to change
  2. Write the article
  3. Capture screenshots
  4. Finish

What it can do on your machine

Read from SKILL.md and the folder at commit de5319f. 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:

    • npm

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

  • Network

    No URLs in SKILL.md. Its commands use npm, which can reach the network depending on how they are called.

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

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • RESEND_API_KEY

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

Context cost

User Docs loads about 2.3k tokens when it runs. Until then it costs about 106 tokens; SKILL.md has 848 words of instructions outside code blocks.

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

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: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NoteMentions a .env fileSKILL.md:40
    d are running (ports come from the root `.env.development.local`: `PORT`, `APPLICATION_PORT`), root `npm install` done (

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 letehaha/moneymatter at commit de5319f, republished under its AGPL-3.0 licence (© letehaha). 848 words, ~2,311 tokens.

Download SKILL.mdSave it as .claude/skills/user-docs/SKILL.md (or your agent's skills folder).
name
user-docs
description
Write or update the end-user documentation at docs.moneymatter.app (packages/docs, Astro Starlight) and capture its light/dark screenshots from the local dev app with a throwaway test user. Use when a feature is added or its UI/behaviour changes and the docs or screenshots need to follow, when asked to "update the docs", "add a docs page", "retake screenshots", or when `npm run screenshots:missing` lists gaps.

User docs & screenshots

The docs site is packages/docs — a standalone npm project (not a root workspace). Articles are src/content/docs/<section>/*.mdx; screenshots are public/screenshots/<section>/<name>.png plus <name>.dark.png.

Hard rules

  • Never use the mcp__moneymatter__* tools for docs work. They act on the owner's real production account.
  • Never sign in as the owner or reuse their session. Only the throwaway test user (docs-test@example.com), created by the seed script.
  • No direct database access. The local DB also holds the owner's data. Create data through the API as the test user; reach unreachable states by mocking responses in the browser (see mocks.mjs), never by editing rows.
  • Taking screenshots of the running app is the explicit purpose of this skill, so browser automation is allowed here — but only with the capture toolkit below, not for general "visual verification".
  • No git commits.

1. Find what to change

  • A feature changed: search the articles for its UI labels and route, e.g. grep -rn "Plan & billing\|/settings/plan-billing" packages/docs/src/content/docs. Every <Screenshot src=…> on those pages is a retake candidate.
  • New feature: pick the section (sidebar groups autogenerate from directories, ordered by sidebar.order in frontmatter), or add a directory and a sidebar group in astro.config.mjs.
  • npm run screenshots:missing (in packages/docs) lists every referenced screenshot that has no file, with its alt and hint.

2. Write the article

  • Match the existing articles: second person, short paragraphs, UI labels in bold exactly as the English UI shows them, numbered procedures inside <Steps>.
  • Plus-only features: sidebar: { badge: { text: 'Plus', variant: 'tip' } } in frontmatter and <Badge text="Plus" variant="tip" /> inline.
  • Screenshot tag — alt is what the image actually shows; hint tells a human how to recapture it:
    mdx
    <Screenshot
      src="/screenshots/settings/change-password.png"
      alt="The Password tab with the current, new and confirm password fields filled in, the strength meter, and the password requirements box."
      hint="Open /settings/security/password… Crop to the tab content."
    />
  • Fact-check every claim against the code, not memory: labels from packages/frontend/src/i18n/locales/chunks/en/** (read via the i18n-editor agent — locale files are hook-blocked), behaviour from the component, limits and rules from the backend service. Drift found before: a button documented as "Select period" actually shows the chosen range ("Current month") unless the provider can't load history; a popover documented as listing per-account statuses only does so while a sync runs.

3. Capture screenshots

Prerequisites: the dev frontend and backend are running (ports come from the root .env.development.local: PORT, APPLICATION_PORT), root npm install done (Playwright resolves from the root node_modules).

bash
cd packages/docs
npm run screenshots:seed

The seed is idempotent. It signs up or signs in the test user, sets USD as base currency, connects SimpleFIN's public demo (Savings + Checking with real-looking synced transactions), creates the manual Everyday Checking account with three expenses, attaches a fake receipt JPG and invoice PDF to "Office chair", adds a passkey through a virtual authenticator, dismisses Quick Start, adds the Net Worth widget and saves the session to scripts/capture/.state.json. DOCS_USER_EMAIL=… npm run screenshots:seed seeds a separate user.

Then write a small per-shot script in your scratch/temp directory (not in the repo) importing the toolkit by absolute path:

js
import { APP, bothThemes, clipAround, innermost, open, shot } from '<repo>/packages/docs/scripts/capture/helper.mjs';
import { ENTITLEMENTS, mockEntitlements } from '<repo>/packages/docs/scripts/capture/mocks.mjs';

const { browser, page } = await open({ height: 1300 });
await page.goto(APP + '/settings/security/password');
await page.getByPlaceholder('Enter new password').fill('Correct-Horse-42!');
const card = innermost({ page, has: ['Security Settings', page.getByText('Password requirements')] });
await bothThemes({
  page,
  capture: ({ dark }) => shot({ page, target: card, src: '/screenshots/settings/change-password.png', dark }),
});
await browser.close();

Conventions:

  • Always both themes via bothThemes; it emulates the OS color scheme, which the app follows.
  • Element crops pass target (30px padding so shadows and rounded corners show). Several elements (trigger + popover, header + strip) → clip: await clipAround({ locators: [...] }). Full window only when the hint says so.
  • Default viewport 1440×1000 at 2× scale. If shot says the target is taller than the viewport, open({ height: 1300 }).
  • Open every image you wrote with the Read tool before moving on: check the crop edges (no half-cut cards, no sidebar or header slivers), stray toasts, broken logos, and that it matches the alt.
Show full SKILL.md (288 more words)Show less
Reaching specific states
StateHow
First run (/welcome, empty dashboard with Quick Start)Use a fresh DOCS_USER_EMAIL; sign up with open({ fresh: true }) and capture before running the seed (the seed confirms the currency and dismisses Quick Start).
Bank connection, synced transactions, bank-synced edit dialogSeeded SimpleFIN demo.
Link a manual account to a bankSeeded Everyday Checking + the demo's unconnected account. Open the dialog, never submit it.
Another active sessionSecond chromium.launch() context with an iPhone Safari userAgent that signs in, then capture the sessions tab from the main context.
Active subscription, trial ended / read-onlymockEntitlements({ page, entitlements: ENTITLEMENTS.activePlusYearly() }) or ENTITLEMENTS.trialEnded(); for the "See plans" toast add mockPlanRequiredOnSave({ page }) and save an edit.
Enable Banking consent expiring/expiredmockEnableBankingConsent({ page, connectionId, daysLeft }) on the seeded SimpleFIN connection.
Anything else unreachableFind the response the component reads (its store or useQuery), rewrite just that response with page.route → route.fetch() → route.fulfill({ response, json }). Add it to mocks.mjs if it will be reused.
Gotchas
  • Sign-up always lands on "Check your email", but with RESEND_API_KEY empty the account can sign in immediately.
  • Never wait for networkidle: the app keeps an SSE stream open. Use locator.waitFor() plus short fixed waits.
  • getByText matches the sidebar first (account names, "SimpleFIN"); scope with innermost, .last(), or a nearby unique text.
  • getByText does not see <textarea>/<input> values — target the field element.
  • Select triggers can lose their combobox role once open; take bounding boxes before clicking.
  • Headless Chrome's default user agent gets bank/brand logos blocked; open() already sets a normal one.
  • Background toasts (e.g. "AI provider rate limit reached") can land in a frame — close them or retake.

4. Finish

bash
cd packages/docs
npm run screenshots:optimize   # palette PNG, rewrites in place; the Docker build runs it too
npm run screenshots:missing    # should be 0, or only what you deliberately left
npm run build                  # validates MDX and every internal link

Report which pages changed, which screenshots were (re)taken, any doc statements corrected against the code, and anything you mocked.

© letehaha, AGPL-3.0. 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 .claude/skills/user-docs of letehaha/moneymatter.

Open the folder on GitHubat commit de5319f

Compare with similar skills

User Docs 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.

User Docs compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
User Docs this skillletehaha/moneymatter160—~2.3kAutomated safety check: NotesAGPL-3.0
Tabler Astro Dev Servertabler/tabler42k—~1.2kAutomated safety check: PassMIT
Create Docsvictorgarciaesgi/nuxt-typed-router4132 repos~2.8kAutomated safety check: PassMIT
Tabler Astro Component Scriptstabler/tabler42k—~2.1kAutomated safety check: PassMIT
Kill AI Slopyetone/kill-ai-slop1.3k—~1.4kAutomated safety check: PassApache-2.0
Motion Dev Animations199-biotechnologies/motion-dev-animations-skill1051 repos~2.8kAutomated safety check: NotesMIT

Similar skills

  • Starts the right Tabler dev server, keeps it from clashing with builds and verifies changes in the browser before a page or component is handed back.

    42k GitHub stars~1.2k tokensUpdated today
    Frontend & DesignAuto-check passed
  • Create Docs

    victorgarciaesgi/nuxt-typed-router

    Create complete documentation sites for projects. An agent skill from victorgarciaesgi/nuxt-typed-router.

    413 GitHub starsUsed in 2 repos~2.8k tokens
    Frontend & DesignAuto-check passed
  • Rules for adding or fixing client-side scripts in Tabler's Astro components so the copied preview HTML stays readable, self-contained and runs in the right order.

    42k GitHub stars~2.1k tokensUpdated today
    Frontend & DesignAuto-check passed
  • Kill AI Slop

    yetone/kill-ai-slop

    Find and remove AI slop — the generic, machine-default visual and copy tics of vibe-coded products — from a web project.

    1.3k GitHub stars~1.4k tokensUpdated 22 days ago
    Frontend & DesignAuto-check passed
  • Motion Dev Animations

    199-biotechnologies/motion-dev-animations-skill

    Creates 120fps GPU-accelerated animations with Motion.dev (Framer Motion successor) for React, Next.js, Svelte, and Astro projects.

    105 GitHub starsUsed in 1 repo~2.8k tokens
    Frontend & DesignAuto-check: notes
  • Astro

    devantler-tech/ksail

    Skill for building with the Astro web framework. An agent skill from devantler-tech/ksail.

    165 GitHub starsUsed in 3 repos~1.1k tokens
    Frontend & DesignAuto-check passed

More from letehaha/moneymatter

All 10 skills in this repo
  • Spec Planner

    letehaha/moneymatter

    Deep-dive specification planner. An agent skill from letehaha/moneymatter.

    160 GitHub stars~1.8k tokensUpdated today
    Auto-check: notes
  • Add MCP Tool

    letehaha/moneymatter

    Add a new tool to the MoneyMatter MCP server. An agent skill from letehaha/moneymatter.

    160 GitHub stars~1.9k tokensUpdated today
    Auto-check: notes
  • Find Slop

    letehaha/moneymatter

    Hunt "AI slop" in this codebase — duplication, reinvented wheels, over-engineering, defensive cruft, dead code, comment slop, performance antipatterns.

    160 GitHub stars~3k tokensUpdated today
    Auto-check passed
  • Frontend Rules

    letehaha/moneymatter

    Frontend conventions and component usage rules. An agent skill from letehaha/moneymatter.

    160 GitHub stars~3.8k tokensUpdated today
    Auto-check passed
  • I18n Before Release

    letehaha/moneymatter

    Occasional i18n catch-up: strip unused en keys, then fill any uk translations that slipped through via i18n-editor subagents.

    160 GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • E2E Test Creator

    letehaha/moneymatter

    Creates backend e2e tests for new or existing endpoints. An agent skill from letehaha/moneymatter.

    160 GitHub stars~2.4k tokensUpdated today
    Auto-check: warnings

Works with

Questions about User Docs

What does User Docs do?

Write or update the end-user documentation at docs.moneymatter.app (packages/docs, Astro Starlight) and capture its light/dark screenshots from the local dev app with a throwaway test user. User Docs is an agent skill from letehaha/moneymatter.app (packages/docs, Astro Starlight) and capture its light/dark screenshots from the local dev app with a throwaway test user.

When should I use User Docs?

User Docs fits situations like: A feature is added; its UI/behaviour changes and the docs; screenshots need to follow; asked to update the docs.

How do I install User Docs in Claude Code?

Run `npx skills add letehaha/moneymatter --skill user-docs -a claude-code`. Or copy the skill folder (.claude/skills/user-docs in letehaha/moneymatter) into .claude/skills/user-docs in your project. Claude Code loads it when a task matches its description.

How do I install User Docs in Codex?

Run `npx skills add letehaha/moneymatter --skill user-docs -a codex`. Or copy the skill folder (.claude/skills/user-docs in letehaha/moneymatter) into .agents/skills/user-docs in your project. Codex loads it when a task matches its description.

Can I use User Docs 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 letehaha/moneymatter --skill user-docs -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/user-docs, .gemini/skills/user-docs, .github/skills/user-docs and .opencode/skills/user-docs in your project.

What does User Docs need to run?

Going by SKILL.md and its folder, User Docs needs the command-line tools its instructions call (npm) and credentials named RESEND_API_KEY. Our summary lists: Node.js; Docker; A credential in RESEND_API_KEY.

Does User Docs access the network?

SKILL.md contains no URLs. Its commands use npm, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is User Docs safe to install?

Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does User Docs use?

User Docs is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does User Docs use?

About 2.3k tokens (SKILL.md is roughly 9.2k 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 User Docs?

Skills that share tags, products or a category with User Docs: Tabler Astro Dev Server (tabler/tabler, 42k stars), Create Docs (victorgarciaesgi/nuxt-typed-router, 413 stars), Tabler Astro Component Scripts (tabler/tabler, 42k stars) and Kill AI Slop (yetone/kill-ai-slop, 1.3k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains User Docs?

letehaha (a GitHub user) maintains it in letehaha/moneymatter, which has 160 GitHub stars. The repository holds 10 skills in this directory. The repository was last updated on October 7, 2026.

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