Receipts To Expenses
skrun-dev/skrun
Read a batch of receipt images directly via vision, classify each into expense categories, optionally reconcile against a bank statement CSV, and produce a multi-sheet Excel workbook + a PDF summary.
Reconcile one Beancount account against a CSV statement or pasted PDF text.
$ npx skills add bex-co/beancount-io --skill beancount-reconcile -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install bex-co/beancount-io beancount-reconcile --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ 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-reconcile .claude/skills/beancount-reconcile && rm -rf skills-srcUse ~/.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/
Install the "beancount-reconcile" agent skill from https://github.com/bex-co/beancount-io/tree/main/skills/.claude/skills/beancount-reconcile into .claude/skills/beancount-reconcile/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "beancount-reconcile", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/bex-co/beancount-io/tree/main/skills/.claude/skills/beancount-reconcileType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add bex-co/beancount-io --skill beancount-reconcile -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install bex-co/beancount-io beancount-reconcile --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/bex-co/beancount-io.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/.claude/skills/beancount-reconcile .agents/skills/beancount-reconcile && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "beancount-reconcile" agent skill from https://github.com/bex-co/beancount-io/tree/main/skills/.claude/skills/beancount-reconcile into .agents/skills/beancount-reconcile/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "beancount-reconcile", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add bex-co/beancount-io --skill beancount-reconcile -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install bex-co/beancount-io beancount-reconcile --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/bex-co/beancount-io.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/.claude/skills/beancount-reconcile .cursor/skills/beancount-reconcile && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "beancount-reconcile" agent skill from https://github.com/bex-co/beancount-io/tree/main/skills/.claude/skills/beancount-reconcile into .cursor/skills/beancount-reconcile/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "beancount-reconcile", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/bex-co/beancount-io.git --path skills/.claude/skills/beancount-reconcile--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add bex-co/beancount-io --skill beancount-reconcile -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install bex-co/beancount-io beancount-reconcile --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/bex-co/beancount-io.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/.claude/skills/beancount-reconcile .gemini/skills/beancount-reconcile && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "beancount-reconcile" agent skill from https://github.com/bex-co/beancount-io/tree/main/skills/.claude/skills/beancount-reconcile into .gemini/skills/beancount-reconcile/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "beancount-reconcile", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install bex-co/beancount-io beancount-reconcileInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add bex-co/beancount-io --skill beancount-reconcile -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/bex-co/beancount-io.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/.claude/skills/beancount-reconcile .github/skills/beancount-reconcile && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "beancount-reconcile" agent skill from https://github.com/bex-co/beancount-io/tree/main/skills/.claude/skills/beancount-reconcile into .github/skills/beancount-reconcile/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "beancount-reconcile", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add bex-co/beancount-io --skill beancount-reconcile -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install bex-co/beancount-io beancount-reconcile --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/bex-co/beancount-io.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/.claude/skills/beancount-reconcile .opencode/skills/beancount-reconcile && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "beancount-reconcile" agent skill from https://github.com/bex-co/beancount-io/tree/main/skills/.claude/skills/beancount-reconcile into .opencode/skills/beancount-reconcile/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "beancount-reconcile", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
beancount-reconcileReconcile one Beancount account against a CSV statement or pasted PDF text.
Beancount Reconcile is an agent skill from bex-co/beancount-io. Reconcile one Beancount account against a CSV statement or pasted PDF text. Report missing entries, duplicates, amount mismatches and date drift; confirm missing-entry writes and a passing period-end balance assertion through bea. Use for checking whether an account matches its statement. Skip bulk imports, analytics, multi-account close orchestration, and edits to existing entries.
Its SKILL.md is about 4.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 25 other files, including reference files (for example `evals/evals.json`).
It sits in Documents & Office, covering Accounting and bookkeeping and CSV and tabular files. 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.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 2e520db. It shows what the files ask for, not the result of running them.
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.
No scripts in the folder and no shell commands in SKILL.md (its code samples are bash).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Beancount Reconcile loads about 4.1k tokens when it runs, and up to ~7k if it reads all its reference files. Until then it costs about 101 tokens; SKILL.md has 1,949 words of instructions outside code blocks.
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.
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.
The full file from bex-co/beancount-io at commit 2e520db, republished under its MIT licence (© bex-co). 1,949 words, ~4,089 tokens.
.claude/skills/beancount-reconcile/SKILL.md (or your agent's skills folder). This skill also uses 23 other files; get the full folder from GitHub.Reconcile one account against one statement period: find every discrepancy between the ledger and the statement, and — only after the user confirms — append the missing transactions and a period-end balance assertion that proves the account ties out.
This skill exists because reconciliation is the deterministic trust check for a ledger, and doing it by hand is tedious and error-prone: statement sign conventions differ from ledger conventions, pending-vs-settled timing shifts dates, and the only real proof of correctness is a balance assertion that beancount itself verifies. The skill normalizes the statement, diffs it against the ledger, classifies each discrepancy, and lands a balance assertion whose success (via the root-ledger check) is the reconciliation's definition of done.
beaRead 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.
Use bea for approved account opens, missing-transaction batches and balance
assertions. The skill retains normalization, discrepancy classification and
the tie-out. An explicit opening adjustment may use add balance --pad-from
only on a first reconcile with no prior assertion and an accepted opening gap.
Does: compare one account to one statement; append missing transactions and one period-end balance assertion; report everything else it finds.
Does not: edit or delete existing entries. Duplicates, suspect entries (in the ledger but not on the statement), and amount mismatches are reported for the user to fix by hand — this skill only appends. It never touches option, plugin, or include directives, and never reconciles more than one account per run.
Read references/statement-formats.md before parsing any statement and references/matching.md before classifying discrepancies. Both encode edge cases that are easy to get wrong.
Five phases, in order: Discover → Normalize → Match → Propose → Verify.
Learn the ledger and the reconciliation target before reading the statement.
Find beancount files in the working directory:
fd -e beancount -e bean . | head -20
# fallback: find . -maxdepth 4 \( -name '*.beancount' -o -name '*.bean' \)The "main" file is the one with option/plugin/include directives at the top, or the largest with open directives.
Then establish, in order:
Assets:Bank:Checking, Liabilities:CreditCard:Amex). If the user named an account or a bank, map it to the open account. If ambiguous, ask — do not guess which account a statement belongs to.Assets or a Liabilities account? This determines the statement sign convention (see Normalize). Read it from the account name.;; beancount-reconcile config. If present, it records the statement's date format and sign convention per account so re-runs don't re-detect. Re-read it rather than re-detecting.balance assertion for the target account. Its date and amount are the trusted starting point; you only need to reconcile forward from there.Report the target account, its type, and the prior balance assertion (if any) to the user before continuing, so a misdetection is caught early.
Persist the contract as a config block on the main file — but only as part of the confirmed append (show it in the Propose phase; never write it before the explicit yes):
;; beancount-reconcile config
;; date_format: MDY
;; Assets:Bank:Checking sign: asset ; +deposits, -withdrawals
;; Liabilities:CreditCard:Amex sign: liability ; -charges, +payments
;; append_target: ./ledger.beancountTurn the statement into normalized lines. Read references/statement-formats.md first. In brief:
= +, money out = −.= − (you owe more), a payment = + (you owe less).If the statement's ending balance or period bounds can't be found, ask for them. They are required — the balance assertion depends on them.
Diff the normalized statement lines against the ledger's postings to the target account within the period. Read references/matching.md first for the full algorithm and tolerances. The classes:
| Class | Meaning | Action |
|---|---|---|
| matched | statement line ↔ ledger posting agree | none |
| missing-in-ledger | on the statement, not in the ledger | propose a new transaction (Propose phase) |
| missing-on-statement | in the ledger, not on the statement (a suspect) | report for manual review |
| duplicate | same real transaction recorded twice in the ledger | report for manual review |
| amount-mismatch | matched payee/date but amounts differ | report for manual review |
| date-drift | same transaction, dates differ (pending vs settled) | treat as matched; note the drift |
Matching order: exact (date + amount) first, then a windowed pass (amount equal within ±N days, description similar), then a near-miss pass over the leftovers (similar description + date window with different amounts → amount-mismatch; one line matching two+ postings → duplicate). Anything unmatched on either side falls into one of the classes above. When a match is ambiguous, ask rather than force it.
Show the user the reconciliation, then ask before writing. Never write before an explicit yes — this is the user's financial source of truth.
Present, in this exact order:
open directives — only if a proposed entry needs an account that doesn't exist yet.import-id per beancount-import's references/dedup.md and preserve pending/uncertain ! flags in the JSON batch. The target-account posting is the statement amount (in ledger sign); the other leg is categorized from the ledger's own payee history (see below). Format the entry, don't just describe it.statement ending − projected ledger, signed) come from that output, not from prose arithmetic.balance assertion at the statement's ending balance, dated the day after the statement's last day (see "Balance-assertion date" below).balance directive would break the user's bea check on every future run. Instead show the signed residual and tie it to the unresolved items: the residual equals the net of the reported suspects/mismatches/duplicates, or is unexplained when there are none. Never invent a fee, pad, or adjustment to absorb it. Tell the user to resolve those (by hand — this skill won't edit existing entries) and re-run. Offer, only if they explicitly ask, to append the assertion as a commented-out ; 2026-06-01 balance … tripwire.Every balance, sum, and residual in the proposal must be reproducible by the user. Mental or prose arithmetic has produced wrong expressions next to correct ledger values, so compute with the ledger engine's decimal arithmetic in one read and quote its output:
<!-- recipe: tie-out -->
bea --file "$ledger" --json --no-input query "SELECT sum(number) AS ledger, sum(number) + $proposed_net AS projected, $statement_ending - (sum(number) + $proposed_net) AS residual WHERE account = '$account' AND currency = '$currency' AND date < $assertion_date"$proposed_net is the signed sum of the proposed missing-in-ledger target postings, written as decimal literals (e.g. -3.00, or (-54.20 + -12.00)); use 0.00 when nothing is proposed. $assertion_date is the day after the statement's last day.rows in the proposal. Any arithmetic you restate in prose — e.g. 2945.00 − 3.00 = 2942.00 — must copy the operands and result from that output. If the query returns no row or null, the account has no postings before that date; state that rather than assuming zero silently.Categorizing the other leg of a missing entry:
Expenses:Uncategorized (open it if needed) and say so — flag it for the user to refine. Never invent a plausible-looking account name.Example proposal:
Target file: ./ledger.beancount
Reconciling: Assets:Bank:Checking — May 2026 statement (2026-05-01 … 2026-05-31)
Prior assertion: 2026-05-01 balance … 1,000.00 USD ✓
Diff:
matched: 18
missing-in-ledger: 2 → propose transactions below
missing-on-statement: 1 → REVIEW: 2026-05-14 "Refund ACME" 25.00 — in ledger, not on statement
amount-mismatch: 1 → REVIEW: 2026-05-09 "Gas" ledger 40.00 vs statement 42.00
duplicate: 0
New account opens (if any):
2026-05-01 open Expenses:Uncategorized
Proposed transactions:
2026-05-07 * "TRADER JOES #123"
Assets:Bank:Checking -54.20 USD
Expenses:Food:Groceries 54.20 USD ; categorized from prior "TRADER JOES" entries
2026-05-22 * "CITY PARKING AUTH"
Assets:Bank:Checking -12.00 USD
Expenses:Uncategorized 12.00 USD ; no prior match — please refine
Tie-out (bea query, executed):
SELECT sum(number) AS ledger, sum(number) + (-54.20 + -12.00) AS projected,
1203.80 - (sum(number) + (-54.20 + -12.00)) AS residual
WHERE account = 'Assets:Bank:Checking' AND currency = 'USD' AND date < 2026-06-01
→ ledger 1297.00, projected 1230.80, residual -27.00
1297.00 − 66.20 = 1230.80; 1203.80 − 1230.80 = −27.00 (ledger 27.00 above statement)
Statement ending balance: 1,203.80 USD, as of end of 2026-05-31.
Balance assertion: withheld. The −27.00 residual equals the net of the
reported suspect (−25.00: refund in ledger only) and amount mismatch
(−2.00: ledger gas 40.00 vs statement 42.00).
Append these to ./ledger.beancount? (yes/no)On yes, use the recipes in beancount-init's references/bea-cli.md:
bea --file "$ledger" --json --no-input add transactions --from "$batch" --into "$target".bea --file "$ledger" --json --no-input add balance --date "$assertion_date" --account "$account" --amount "$amount" --into "$target".An opening adjustment uses the shared --pad-from recipe before period-end
assertion. Each command validates its own write; the sequence is not one
atomic operation. If the assertion fails, keep track of the successful batch
and re-read the ledger before retrying. On no, revise the proposal.
Without bea, use beancount-init's references/compatibility.md.
Do not append the suspect / duplicate / amount-mismatch items — those are reported only. They are exactly what an amount-off assertion will flag next.
After writing, verify the entire root ledger:
bea --file "$ledger" --json --no-input checkUse the compatibility reference only when bea is absent.
In the clean case, you wrote the missing entries plus a passing balance assertion — that assertion is the reconciliation's proof, and the check verifies it:
Balance failed for 'Assets:Bank:Checking': expected 2865.80 USD != accumulated 2863.80 USD (2.00 too little)) → the assertion was not written, but the earlier missing-entry batch may have been. Do not report success. Surface the residual and re-examine the current ledger before retrying; never replay that batch blindly.Recall from Propose that when the account does not tie out (unresolved suspect / mismatch / duplicate), you never wrote an assertion at all — you reported the residual instead. So a well-run partial reconcile leaves the check green (no failing assertion), with the residual and its causes reported in prose for the user to fix.
If validation cannot run, report the result as unvalidated and suggest installing bea; manual tie-out does not replace the engine check.
A beancount balance assertion checks the account balance at the start of its date — it includes every transaction before that date and excludes transactions dated on that date. So to assert a statement's ending balance as of the end of the last statement day, date the assertion the day after the statement's last day.
2026-05-31 with ending balance 1203.80 USD → write 2026-06-01 balance Assets:Bank:Checking 1203.80 USD.2026-05-31 would wrongly exclude every transaction that actually happened on 2026-05-31.State this reasoning to the user when proposing the assertion, so the off-by-one-day choice is visible and reviewable.
Expenses:Uncategorized and flag it.bea check failure — surface the residual instead.option, plugin, or include directives.© 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
SKILL.md and 23 other files (references) in skills/.claude/skills/beancount-reconcile of bex-co/beancount-io.
Open the folder on GitHubat commit 2e520db
Beancount Reconcile 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Beancount Reconcile this skillbex-co/beancount-io | 296 | — | ~4.1k | Automated safety check: Pass | MIT | |
| Receipts To Expensesskrun-dev/skrun | 210 | — | ~1.1k | Automated safety check: Pass | MIT | |
| Journalkazukinagata/shinkoku | 365 | — | ~2.3k | Automated safety check: Pass | MIT | |
| Mx Macro Datahiboys/ExploreFinance | 365 | — | ~1.7k | Automated safety check: Pass | None | |
| Map Tokenreportazalio/map-framework | 156 | — | ~2.5k | Automated safety check: Pass | MIT | |
| Remofirst Local Dev Loopjeremylongshore/tons-of-skills-marketplace | 2.8k | — | ~1.1k | Automated safety check: Pass | MIT |
skrun-dev/skrun
Read a batch of receipt images directly via vision, classify each into expense categories, optionally reconcile against a bank statement CSV, and produce a multi-sheet Excel workbook + a PDF summary.
kazukinagata/shinkoku
This skill should be used when the user wants to record bookkeeping entries (仕訳), import transaction data from CSV files, receipts, or invoices, or manage their general ledger.
hiboys/ExploreFinance
基于东方财富数据库,支持自然语言查询全球宏观经济数据,涵盖国民经济核算、价格指数、货币金融、财政收支、对外贸易、就业民生、产业运行等多个领域,适配各类宏观经济研究、市场分析、政策解读等多元专业场景需求。返回结果包含数据说明及 csv 文件。Natural language query for macroeconomic data from financial databases…
azalio/map-framework
Show per-subtask/agent token accounting (input, output, cache read/creation, cost, cache-hit ratio) for the current branch.
jeremylongshore/tons-of-skills-marketplace
Rehearse RemoFirst imports, report reconciliation, and operator controls offline with synthetic fixtures before touching a client account.
jeremylongshore/tons-of-skills-marketplace
Control a RemoFirst workflow cutover to supported Workday, ADP, report, or CSV exchange with reconciliation and rollback.
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…
bex-co/beancount-io
Import a bank or card CSV, OFX/QFX, or QIF export into an existing Beancount ledger.
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.
bex-co/beancount-io
Scaffold a new Beancount ledger with bea init and validation, with optional Fava browser setup when requested.
bex-co/beancount-io
Record a described options trade or lifecycle event as validated Beancount transactions through bea, after review and confirmation.
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.
Reconcile one Beancount account against a CSV statement or pasted PDF text. Beancount Reconcile is an agent skill from bex-co/beancount-io. Reconcile one Beancount account against a CSV statement or pasted PDF text.
Beancount Reconcile fits situations like: checking whether an account matches its statement; tasks that involve Accounting and bookkeeping; tasks that involve CSV and tabular files.
Run `npx skills add bex-co/beancount-io --skill beancount-reconcile -a claude-code`. Or copy the skill folder (skills/.claude/skills/beancount-reconcile in bex-co/beancount-io) into .claude/skills/beancount-reconcile in your project. Claude Code loads it when a task matches its description.
Run `npx skills add bex-co/beancount-io --skill beancount-reconcile -a codex`. Or copy the skill folder (skills/.claude/skills/beancount-reconcile in bex-co/beancount-io) into .agents/skills/beancount-reconcile in your project. Codex loads it when a task matches its description.
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-reconcile -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-reconcile, .gemini/skills/beancount-reconcile, .github/skills/beancount-reconcile and .opencode/skills/beancount-reconcile in your project.
SKILL.md names no scripts, command-line tools or credentials: Beancount Reconcile is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
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.
Beancount Reconcile is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.1k tokens (SKILL.md is roughly 16k 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 2.9k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Beancount Reconcile: Receipts To Expenses (skrun-dev/skrun, 210 stars), Journal (kazukinagata/shinkoku, 365 stars), Mx Macro Data (hiboys/ExploreFinance, 365 stars) and Map Tokenreport (azalio/map-framework, 156 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
bex-co (a GitHub organization) maintains it in bex-co/beancount-io, which has 296 GitHub stars. The repository holds 27 skills in this directory. The repository was last updated on October 10, 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.