agentleFS
Slava-codeSlava-code/slava-stack/.claude/skills/finance/SKILL.md

finance

Skill0 starsChanged 29 days agoMITView on GitHub

Log a transaction into finances/ledger.csv from a verbal note, a receipt image or a bank statement; dedups, confirms, commits. Use when the user says: log this expense, record this payment, here's a receipt, here's my statement, we spent X on Y, we got paid X.

21 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use gift-evaluator, Podcast Generate and 10 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • dav-niu474Skill

    gift-evaluator

    The PRIMARY tool for Spring Festival gift analysis and social interaction generation. Use this skill when users upload photos of gifts (alcohol, tea, supplements, etc.) to inquire about their value, authenticity, or how to respond socially. Integrates visual perception, market valuation, and HTML card generation.

    Also in 5 projects that use this

  • dav-niu474Skill

    Podcast Generate

    Generate podcast episodes from user-provided content or by searching the web for specified topics. If user uploads a text file/article, creates a dual-host dialogue podcast (or single-host upon request). If no content is provided, searches the web for information about the user-specified topic and generates a podcast. Duration scales with content size (3-20 minutes, ~240 chars/min). Uses z-ai-web-dev-sdk for LLM script generation and TTS audio synthesis. Outputs both a podcast script (Markdown) and a complete audio file (WAV).

    Also in 5 projects that use this

  • huang-x-hSkill

    Video Generation

    Implement AI-powered video generation capabilities using the z-ai-web-dev-sdk. Use this skill when the user needs to generate videos from text prompts or images, create video content programmatically, or build applications that produce video outputs. Supports asynchronous task management with status polling and result retrieval.

    Also in 5 projects that use this

  • +9 more from dav-niu474

The file

We split this skill into the rules it gives an agent

1 rule. 0 are common, 0 are distinctive, and 1 is very specific to this project.

  • 0

    Common

    Most of the 10 edited versions we read keep these.

  • 0

    Distinctive

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Acquire runs/.lock: If present, abort ("another agent is writing, retry later").

    line 14

“Common” is measured: kept by at least 6 in 10 of the 10 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

/finance

Ingests transactions into finances/ledger.csv. One in-session skill — no deferral. Finances want completeness now, and every write is confirmed with the user.

Read first (T2): finances/README.md — the schema, controlled category vocab, merchant→category map, dedup rules, and redaction rules. This skill enforces that contract; it does not restate it.

Procedure

  1. Acquire runs/.lock. If present, abort ("another agent is writing, retry later").
  2. Read finances/README.md for the column schema, category vocab, merchant map, and dedup/redaction rules.
  3. Detect input mode:
    • Verbal — free text from the user.
    • Receipt — an image path / attachment.
    • Statement — a local file path the user points you at (PDF/CSV/image). NEVER ingest a raw statement from any committed location; if the user put one there, move/copy it out first and ensure the raw is not committed.
  4. Parse → normalized records (columns per the README schema):
    • Verbal: extract date (default today), amount, direction (infer; ask if ambiguous), counterparty, account (ask if unknown), note. No ext_id. status: pending. Set owner from the account→owner map; if the account isn't mapped, ask whose it is and append the mapping.
    • Receipt: vision-read merchant, date, total, currency, the card last-4, and any invoice/order number (ext_id). Copy the original image to finances/receipts/<id>-<slug>.<ext>; set source: receipt:<filename>. Set status: pending — a receipt is our capture, not statement-confirmed; rule 4 flips it to cleared when the bank line lands. Set owner from the account→owner map (card last-4 → owner); if unmapped, ask and append the mapping. (If the image exposes a full card number, do NOT store it — keep the row only, note redaction.)
    • Statement: parse all rows. For a large statement, dispatch a subagent to parse → return structured rows (keeps main context clean). Redact in memory: strip full account/routing/card numbers (keep last-4), drop addresses/other PII. Write the redacted snapshot to finances/statements/<YYYY-MM>-<account-nick>.csv. Capture each row's bank reference as ext_id; set source: statement:<snapshot-filename>. owner = the statement account's owner (per the map — a snapshot is single-account).
  5. Categorize each record via the merchant→category map in the README. If the counterparty is unknown, propose a category and ask; record the new mapping in the README's merchant-map table.
  6. Dedup + reconcile each record against finances/ledger.csv per the README rules:
    • (account, ext_id) already in ledger → skip (report "already recorded, ref X"). Scope by account — bank refs are only unique within an account.
    • ext_id differs but fields look identical → separate transaction → keep.
    • no ext_id + fingerprint (date, amount, counterparty, account) matches → suspected duplicate: show the existing row and ask same-or-separate. If separate, prompt for a distinguishing note.
    • statement row matches an existing pending entry by (amount, counterparty, date ±2d) → enrich that row (attach ext_id, status: cleared) instead of appending.
    • For statements, also flag in-ledger-but-not-in-statement rows for the period back to the user.
  7. CONFIRM EVERYTHING. Present the proposed change as a table — new rows, enrichments, skipped duplicates, and any flags. Get explicit user OK before writing. (Current policy: confirm even single clean entries.)
  8. Assign id = <date>-<NN>, NN = next sequential index for that date already in the ledger.
  9. Write: append new rows / edit enriched rows in finances/ledger.csv. Store receipt images and the redacted statement snapshot. Update the README merchant-map table if new mappings were learned.
  10. Regenerate + lint: python3 scripts/rebuild-indexes.py finances/ then python3 scripts/kb-lint.py finances/README.md.
  11. Commit + push. Prefix finance: — e.g. finance: log 2026-05-30 Example SaaS $40 (saas) or finance: reconcile statement 2026-05 (+3 new, 5 confirmed). Push immediately.
  12. Release the lock.

Notes

  • Never store full account/routing/card numbers anywhere (ledger, statements, notes) — last-4 or nickname only.
  • Never commit a raw bank statement. Redact in memory; write only the snapshot CSV.
  • amount is always positive; direction carries the sign. transfer rows are net-zero and excluded from spend/income totals.
  • One logical commit per ingest event (one verbal entry, one receipt, or one statement reconciliation).

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.