Agent skill

Beancount Importer Author

by bex-co in bex-co/beancount-io

Write or repair a reusable Beangulp importer from a sample bank export, with reviewed golden files and a passing test harness.

MITAuto-check passedBusiness, Finance & HR

Install Beancount Importer Author

skills CLI
$ npx skills add bex-co/beancount-io --skill beancount-importer-author -a claude-code

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

GitHub CLI
$ gh skill install bex-co/beancount-io beancount-importer-author --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/bex-co/beancount-io.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/.claude/skills/beancount-importer-author .claude/skills/beancount-importer-author && 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
beancount-importer-author
GitHub stars
297
Token cost
~2k tokens
SKILL.md length
975 words
Files
12 (incl. references)
Skills in repo
27
Repo updated
First seen
Licence
MIT

At a glance

Write or repair a reusable Beangulp importer from a sample bank export, with reviewed golden files and a passing test harness.

  • Works in 5 steps: Intake → Draft → Test — the non-negotiable loop → …
  • A source needs a tested Python importer
  • SKILL.md covers Scope — what this skill does…, Prefer bea for the wired…, Workflow and What NOT to do
  • Runs Python scripts from its folder; calls python and pip

What it does

Beancount Importer Author is an agent skill from bex-co/beancount-io. Write or repair a reusable Beangulp importer from a sample bank export, with reviewed golden files and a passing test harness. Use when a source needs a tested Python importer or its format changed. Wire the confirmed runner through bea ingest; keep generate/test in the authoring project. Skip one-off imports, reconciliation, finance-app migration and ledger writes.

Its SKILL.md is about 2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 14 other files, including reference files (for example `evals/evals.json`, `evals/files/eval3_importer.py` and `evals/files/eval6_import.py`).

It sits in Business, Finance & HR, covering Accounting and bookkeeping and Test generation. It works with Python. The repository describes itself as: 💰 Double-entry bookkeeping made easy — plain-text accounting for humans and AI agents. Polished iOS & Android app built with React Native + Expo. The licence is MIT.

When your agent uses it

  • A source needs a tested Python importer
  • Its format changed

Example prompts

  • “/beancount-importer-author”

Requirements

  • Python 3

Workflow steps

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

  1. Intake
  2. Draft
  3. Test — the non-negotiable loop
  4. Wire
  5. Repair (drift path)

What it can do on your machine

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

    Ships script files (Python), which the agent can run.

    Shell commands in SKILL.md call:

    • python
    • pip

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

  • Network

    No URLs in SKILL.md. Its commands use pip, 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 no API keys, tokens, secrets or passwords.

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

Context cost

Beancount Importer Author loads about 2k tokens when it runs, and up to ~3.6k if it reads all its reference files. Until then it costs about 99 tokens; SKILL.md has 975 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~99
When it runs · the whole SKILL.md, loaded when a task matches
~2k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~3.6k

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 passed

The automated check found no risky patterns in SKILL.md.

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 bex-co/beancount-io at commit 0227141, republished under its MIT licence (© bex-co). 975 words, ~1,959 tokens.

Download SKILL.mdSave it as .claude/skills/beancount-importer-author/SKILL.md (or your agent's skills folder). This skill also uses 11 other files; get the full folder from GitHub.
name
beancount-importer-author
description
Write or repair a reusable Beangulp importer from a sample bank export, with reviewed golden files and a passing test harness. Use when a source needs a tested Python importer or its format changed. Wire the confirmed runner through bea ingest; keep generate/test in the authoring project. Skip one-off imports, reconciliation, finance-app migration and ledger writes.

beancount-importer-author

Produce a tested beangulp importer from a sample export file — or repair one the bank's format drift broke — and never hand over anything whose harness isn't green.

This skill exists because importers are the most-complained-about chore in beancount: every bank's export is different, formats drift, and a subtly wrong importer silently corrupts data for months. beangulp ships a golden-file test harness that makes correctness checkable — the skill's job is to drive that loop: draft → generate golden → eyeball → test → iterate. The deterministic artifact then does the weekly work for free; the agent is only needed again when the format changes.

Scope — what this skill does and does not touch

Does: author one importer per run (Python file), with golden-file tests, from a sample export; repair an existing importer against a new sample; wire the importer into the user's import.py (confirm-gated).

Does not: import transactions into the ledger (that's running the importer, or beancount-import); categorize (beangulp extraction posts the source leg; categorization stays with smart_importer or beancount-import — don't hardcode guessed counter-accounts); scrape banks; edit the ledger.

Prefer bea for the wired importer

Read beancount-init's references/bea-cli.md before running ledger commands: it defines explicit root/destination paths, JSON batches, checks, and safe retries. Without bea, use beancount-init's references/compatibility.md.

Read references/beangulp-api.md before writing any code. Prefer enabling Beangulp in the managed engine when bea is installed:

bash
bea engine enable beangulp   # once; needs system libmagic
bea engine status

Do not pip install beangulp into the agent/frontend process or into bea's frontend environment. Authoring still needs a project that can import beangulp for the golden harness — use a local uv/venv in the ledger repo (developer path). bea ingest exposes identify/extract/archive, not generate/test, so it does not replace the golden harness. Match the authoring Beangulp version to the managed engine and verify the wired runner through bea ingest. Verify the installed API before trusting it or this reference: python -c "import beangulp, inspect; help(beangulp.Importer)" inside that project venv — beangulp's API has sharp edges and versions differ.

Workflow

Five phases: Intake → Draft → Test → Wire → (or) Repair.

1. Intake

Need three things:

  1. A sample export file — no importer gets written without one; ask for a real (redacted is fine) sample.
  2. The target account — which ledger account this source feeds (account()'s return). If a ;; beancount-import config block exists for this source (the graduation path), read it as the spec — schema defined in beancount-import's SKILL.md Discover section: it already holds the confirmed column mapping, sign convention, date format, and account — do not re-ask what the user already confirmed there.
  3. Where importers live — existing import.py / importers/ layout in the user's ledger repo; match its conventions. None yet? Propose importers/<source>.py + a minimal import.py.

Inspect the sample's header + rows. Anything the config block doesn't already answer and the data can't prove (sign convention, MDY/DMY): ask, never guess — a guessed sign becomes a silently wrong importer.

2. Draft
  • CSV sources → beangulp.importers.csvbase.Importer (declarative column mapping — less code, fewer bugs). Raw beangulp.Importer subclass only when csvbase can't express it (OFX, multi-table files, weird encodings).
  • identify() must be narrow: match the header signature and/or filename pattern, not just .csv — over-matching importers claim other sources' files, a classic footgun.
  • Extraction posts the source-account leg only (plus balance directives if the file carries balances). No invented counter-accounts.
  • Attach import-id metadata to every extracted transaction, per beancount-import's references/dedup.md grammar: the row's native ID when the format has one (OFX FITID), else csv:sha256: recomputed deterministically per row with that reference's exact normalization — never read from config, never random. This keeps the graduated importer's output dedup-compatible with history the beancount-import skill already wrote.
  • Include if __name__ == '__main__': from beangulp.testing import main; main(Importer(...)) so the importer file is its own test CLI.
Show full SKILL.md (376 more words)Show less
3. Test — the non-negotiable loop
bash
mkdir -p importers/tests/<source> && cp <sample> importers/tests/<source>/
python importers/<source>.py generate importers/tests/<source>   # writes golden .beancount next to sample
# eyeball the golden file WITH THE USER — dates, signs, payees, amounts against the sample
python importers/<source>.py test importers/tests/<source>       # must be green

The golden-file eyeball is the human gate: generated goldens encode whatever the importer does, right or wrong — confirm a few rows against the raw sample before blessing them. Iterate draft ↔ test until green. A red harness is never handed over as done — if it can't be made green, say exactly what's unresolved.

After wiring, run bea --file "$ledger" ingest identify --config "$runner" SAMPLE and bea --file "$ledger" ingest extract --config "$runner" SAMPLE, where runner is the actual file just wired (import.py in this skill's default layout). Do not point at a nonexistent ingest.py. Extraction usually has only the source posting, so its raw output alone is not a balanced ledger. bea ingest uses native output and rejects --json. Inspect identification and extracted entries: an unclaimed file can be skipped with exit status 0. For an end-to-end check, categorize and validate a complete scratch ledger through bea --file "$scratch_ledger" check; leave the user's ledger alone.

4. Wire

Show the diff to import.py (adding the importer to the list) and any new files; write only on explicit yes. Suggest committing the importer + tests together so drift-repairs have a baseline.

5. Repair (drift path)

When an existing importer fails on a new file:

  1. Reproduce: run identify/extract on the new sample, capture the exact failure (or the silent mis-extraction — diff extract output against a few hand-read rows).
  2. Diagnose the drift: renamed headers, new columns, date-format change, sign flip.
  3. Patch minimally — don't rewrite a working importer to fix a header rename.
  4. Add the new sample to the test corpus, regenerate its golden (eyeball it), keep the old samples' goldens passing too — drift repair must not break historical re-imports.
  5. Green harness on old + new samples, then show the patch for confirmation.

What NOT to do

  • Don't write an importer without a sample file, and don't hand over a red or untested one.
  • Don't guess signs/dates/columns — config block first, provable data second, ask third.
  • Don't over-match in identify().
  • Don't hardcode counter-account categorization into the importer.
  • Don't bless golden files without eyeballing rows against the raw sample with the user.
  • Don't rewrite on a drift-repair when a minimal patch does, and don't let old goldens go red.
  • Don't wire into import.py without explicit confirmation.

© bex-co, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 11 other files (references) in skills/.claude/skills/beancount-importer-author of bex-co/beancount-io.

  • SKILL.md
  • evals/evals.json
  • evals/files/eval1_sample.csv
  • evals/files/eval2_ledger.beancount
  • evals/files/eval3_importer.py
  • evals/files/eval3_new_sample.csv
  • evals/files/eval3_old_sample.csv
  • evals/files/eval3_old_sample.csv.beancount
  • evals/files/eval4_sample.csv
  • evals/files/eval5_sample.csv
  • evals/files/eval6_import.py
  • references/beangulp-api.md

Open the folder on GitHubat commit 0227141

Compare with similar skills

Beancount Importer Author 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.

Beancount Importer Author compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Beancount Importer Author this skillbex-co/beancount-io297—~2kAutomated safety check: PassMIT
Travel Expense ReimbursementFoxtailsss-Andy/Anna-Agent147—~812Automated safety check: PassMIT
SQL Server Table Reconciliationgithub/awesome-copilot40k1 repos~1.4kAutomated safety check: PassMIT
Bio Copy Number Cnvkit AnalysisGPTomics/bioSkills1.2k2 repos~4.1kAutomated safety check: PassMIT
Bio Proteomics Data ImportGPTomics/bioSkills1.2k1 repos~4.5kAutomated safety check: PassMIT
Financial Data EntrySerein-81/financial_rag148—~1.5kAutomated safety check: NotesNone

Similar skills

  • Travel Expense Reimbursement

    Foxtailsss-Andy/Anna-Agent

    Create, validate, submit, and verify employee travel and expense reimbursements through Anna Cowork and MCP.

    147 GitHub stars~812 tokensUpdated 2 days ago
    Business, Finance & HRAuto-check passed
  • SQL Server Table Reconciliation

    github/awesome-copilot

    Official

    A skill your agent uses when: comparing SQL Server tables across instances, data migration validation, ETL verification, row mismatch detection, schema drift, reconciliation report, production vs…

    40k GitHub starsUsed in 1 repo~1.4k tokens
    Business, Finance & HRAuto-check passed
  • Detect somatic and germline copy number variants from targeted, exome, and whole-genome sequencing with CNVkit, a read-depth caller that combines on-target and off-target (antitarget) coverage.

    1.2k GitHub starsUsed in 2 repos~4.1k tokens
    Business, Finance & HRAuto-check passed
  • Bio Proteomics Data Import

    GPTomics/bioSkills

    Loads mass-spectrometry data into Python/R and strips the search engine's bookkeeping before any number is trusted -- removes decoys (REV/Reverse), contaminants (CON/Potential contaminant)…

    1.2k GitHub starsUsed in 1 repo~4.5k tokens
    Business, Finance & HRAuto-check passed
  • Financial Data Entry

    Serein-81/financial_rag

    Guides entry of a single financial record by collecting fiscal-year figures, validating them with a script and confirming before submitting to the financial-data API.

    148 GitHub stars~1.5k tokensUpdated 4 mo ago
    Business, Finance & HRAuto-check: notes
  • Looks up Chinese company registration data in the CICPA industry knowledge base, from a quick search to a full 61-dimension export, subsidiary discovery and Excel output.

    133 GitHub stars~2.8k tokensUpdated 1 mo ago
    Business, Finance & HRAuto-check passed

More from bex-co/beancount-io

All 27 skills in this repo
  • Beancount Close

    bex-co/beancount-io

    Close an accounting period in a Beancount ledger by reconciling each active account through beancount-reconcile, checking assertions and recurring gaps, reviewing flags, then proposing a commit with…

    297 GitHub stars~1.4k tokensUpdated today
    Auto-check passed
  • Beancount Import

    bex-co/beancount-io

    Import a bank or card CSV, OFX/QFX, or QIF export into an existing Beancount ledger.

    297 GitHub stars~3k tokensUpdated today
    Auto-check passed
  • Beancount Init

    bex-co/beancount-io

    Scaffold a new Beancount ledger with bea init and validation, with optional Fava browser setup when requested.

    297 GitHub stars~1.2k tokensUpdated today
    Auto-check: notes
  • Beancount Options

    bex-co/beancount-io

    Record a described options trade or lifecycle event as validated Beancount transactions through bea, after review and confirmation.

    297 GitHub stars~3.7k tokensUpdated today
    Auto-check passed
  • Beancount Reconcile

    bex-co/beancount-io

    Reconcile one Beancount account against a CSV statement or pasted PDF text.

    297 GitHub stars~4.1k tokensUpdated today
    Auto-check passed
  • Mobile Release

    bex-co/beancount-io

    Summarize mobile changes since the previous release, bump the Beancount mobile version, prepare localized release notes and listings, and release to the Apple App Store and Google Play.

    297 GitHub stars~3.5k tokensUpdated today
    Auto-check passed

Works with

Questions about Beancount Importer Author

What does Beancount Importer Author do?

Write or repair a reusable Beangulp importer from a sample bank export, with reviewed golden files and a passing test harness. Beancount Importer Author is an agent skill from bex-co/beancount-io. Write or repair a reusable Beangulp importer from a sample bank export, with reviewed golden files and a passing test harness.

When should I use Beancount Importer Author?

Beancount Importer Author fits situations like: A source needs a tested Python importer; its format changed.

How do I install Beancount Importer Author in Claude Code?

Run `npx skills add bex-co/beancount-io --skill beancount-importer-author -a claude-code`. Or copy the skill folder (skills/.claude/skills/beancount-importer-author in bex-co/beancount-io) into .claude/skills/beancount-importer-author in your project. Claude Code loads it when a task matches its description.

How do I install Beancount Importer Author in Codex?

Run `npx skills add bex-co/beancount-io --skill beancount-importer-author -a codex`. Or copy the skill folder (skills/.claude/skills/beancount-importer-author in bex-co/beancount-io) into .agents/skills/beancount-importer-author in your project. Codex loads it when a task matches its description.

Can I use Beancount Importer Author 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 bex-co/beancount-io --skill beancount-importer-author -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/beancount-importer-author, .gemini/skills/beancount-importer-author, .github/skills/beancount-importer-author and .opencode/skills/beancount-importer-author in your project.

What does Beancount Importer Author need to run?

Going by SKILL.md and its folder, Beancount Importer Author needs Python for the scripts in its folder and the command-line tools its instructions call (python and pip). Our summary lists: Python 3.

Does Beancount Importer Author access the network?

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

Is Beancount Importer Author safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Beancount Importer Author use?

Beancount Importer Author is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Beancount Importer Author use?

About 2k tokens (SKILL.md is roughly 7.8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.6k tokens, read only when the agent opens those files.

What are the alternatives to Beancount Importer Author?

Skills that share tags, products or a category with Beancount Importer Author: Travel Expense Reimbursement (Foxtailsss-Andy/Anna-Agent, 147 stars), SQL Server Table Reconciliation (github/awesome-copilot, 40k stars), Bio Copy Number Cnvkit Analysis (GPTomics/bioSkills, 1.2k stars) and Bio Proteomics Data Import (GPTomics/bioSkills, 1.2k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Beancount Importer Author?

bex-co (a GitHub organization) maintains it in bex-co/beancount-io, which has 297 GitHub stars. The repository holds 27 skills in this directory. The repository was last updated on October 11, 2026.

Source: bex-co/beancount-io on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.