用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/JoeCotellese/claude-code-config --skill gnucash-import命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
Definition of Ready gate. Invoke with `/ready #<issue>` or when the user says 'is this ready', 'DoR check', 'audit this issue', 'can we implement #N'. Audits an issue against seven readiness criteria, repairs what it can (rewrites vague acceptance criteria, names accessibility identifiers, derives the acceptance test), and routes what it cannot back to /spec or /ui-design. Prints a fixed DOR VERDICT line so a /goal evaluator can judge the outcome.
Feature specification phase. Invoke with `/spec <feature description>` to create an issue, or `/spec #<issue>` to repair one that failed the /ready Definition of Ready gate. Also triggers on 'new feature', 'plan feature', 'create spec', 'split this issue', 'fix issue #N'. Orchestrates product management, UX design, and architecture planning. Hands off to /ready.
UI/UX design phase between spec and implement. Invoke with `/ui-design #<issue>` or when the user says 'design the UI', 'prototype this', 'let's design #N'. Builds a static prototype (the real target template rendered with fake data — not a throwaway mock), drives it in a browser with Playwright or through the platform's own preview, pressure-tests it with a fresh-context design committee on fixed lenses sized by the effort label, iterates until only non-blocking findings remain, then amends the issue and gates to /implement. UI features only.
基于 SOC 职业分类
正在显示 SKILL.md
| name | gnucash-import |
| effort | low |
| description | Process WSFS bank statement PDFs into QIF files for GnuCash import |
| user_invocable | true |
| trigger | /gnucash-import |
| arguments | <pdf_path> [pdf_path...] |
Process WSFS Bank statement PDFs into QIF files importable by GnuCash.
Copy config.example.json to config.json and fill in your paths:
cp config.example.json ~/.claude/skills/gnucash-import/config.json
Load settings from ~/.claude/skills/gnucash-import/config.json:
.gnucash fileAssets:Current Assets:Checking Account)payee_mappings.json for raw description → clean payee name mappingAdditional derived settings:
!Type:BankYYYYMM.qif<output_directory>/statement_metadata.jsonRun this to get existing mappings:
gunzip -c "<gnucash_file>" | python3 -c "
import sys, xml.etree.ElementTree as ET
tree = ET.parse(sys.stdin)
root = tree.getroot()
accounts = {}
for acct in root.iter('{http://www.gnucash.org/XML/gnc}account'):
name = acct.find('{http://www.gnucash.org/XML/act}name').text
acct_id = acct.find('{http://www.gnucash.org/XML/act}id').text
parent_el = acct.find('{http://www.gnucash.org/XML/act}parent')
accounts[acct_id] = {'name': name, 'parent': parent_el.text if parent_el is not None else None}
def get_path(aid):
parts = []
while aid and aid in accounts:
parts.append(accounts[aid]['name'])
aid = accounts[aid]['parent']
parts.reverse()
return ':'.join(parts[1:])
ns_trn = '{http://www.gnucash.org/XML/trn}'
ns_split = '{http://www.gnucash.org/XML/split}'
pm = {}
for txn in root.iter('{http://www.gnucash.org/XML/gnc}transaction'):
d = txn.find(f'{ns_trn}description')
if d is None or not d.text: continue
for s in txn.findall(f'.//{ns_split}account'):
if s.text in accounts:
p = get_path(s.text)
if p and not p.startswith('Assets:Current Assets:Checking'):
pm[d.text.strip()] = p
for k in sorted(pm): print(f'{k} -> {pm[k]}')
"
Also load payee_mappings.json from the skill directory for raw description → clean payee name mapping.
Also extract the full chart of accounts for categorizing unknown payees.
Use the Read tool to read the PDF. The WSFS statement format:
Mon DD) followed by type (ACH DEPOSIT, DEBIT CARD, POS PURCHASE, CHECK)-$9.18)For each transaction extract:
Mon DD + year from statement headerpayee_mappings.json. Match raw description substrings (case-insensitive) to clean payee names. Strip terminal numbers, addresses, masked account numbers (XXXX), TRAN DATE lines.-$ prefix, keep sign)Match cleaned payee names against the payee→account map from step 1 (fuzzy match is fine). For unknown payees, suggest a category from the chart of accounts based on the description. Mark uncertain matches with [?].
Before generating, check if the output QIF file already exists in the output directory. If it does, warn the user and ask before overwriting.
Compact format for known payees:
Jan 2026: 7 transactions, 7 known payees. Net: +$141.72 ✓
Only show detail table for unknown/uncertain payees:
Unknown/uncertain transactions requiring review:
| # | Date | Payee | Amount | Suggested Account |
|---|------------|----------------------|----------|--------------------------------|
| 3 | 01/15/2026 | Some New Vendor | -$50.00 | Expenses:Miscellaneous [?] |
Ask user to confirm or provide corrections (e.g., "3 -> Expenses:Office Supplies").
When user corrects an unknown payee, offer to add the mapping to payee_mappings.json for future use.
Write the QIF file to the output directory, named YYYYMM.qif.
QIF format:
!Account
NAssets:Current Assets:Checking Account
TBank
^
!Type:Bank
DMM/DD/YYYY
PPayee Name
T-amount
LAccount:Path
MTransaction Type
^
D = date in MM/DD/YYYYP = cleaned payee nameT = amount (negative for withdrawals, positive for deposits)L = GnuCash account pathM = memo (transaction type: DEBIT CARD, ACH DEPOSIT, POS PURCHASE, CHECK)^ = end of transaction recordAfter generating QIF, update statement_metadata.json in the output directory. This is a running JSON file keyed by YYYYMM with balance and transaction data extracted from the statement's Balance Summary section.
Read the existing file first, add/update the entry for this month, and write it back:
{
"YYYYMM": {
"statement_date": "MM/DD/YYYY",
"beginning_balance": 1234.56,
"ending_balance": 1345.67,
"deposits": 200.00,
"withdrawals": 88.89,
"transaction_count": 7
}
}
Verify continuity: the previous month's ending_balance should equal this month's beginning_balance. Warn if it doesn't.
Verify:
Report the QIF file path, then output reconciliation info:
Import in GnuCash: File → Import → Import QIF...
Reconciliation (Actions → Reconcile):
Statement Date: MM/DD/YYYY
Ending Balance: $X,XXX.XX