From lurii-cc
Update the user's manual cash balance via lurii-finance MCP. Reads current balances, asks per-currency amounts, confirms a before/after diff, then calls set_cash_balance. Use when the user says "update cash", "set my cash", "I have $X in cash", "log cash", "add cash balance", or invokes /cash-update.
How this skill is triggered — by the user, by Claude, or both
Slash command
/lurii-cc:cash-updateThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Mechanism only. Drives the `lurii-finance` MCP cash tools through a confirm-before-write flow. **Read current balance first. Confirm the diff. Halt loud on missing cash source.**
Mechanism only. Drives the lurii-finance MCP cash tools through a confirm-before-write flow. Read current balance first. Confirm the diff. Halt loud on missing cash source.
Requires pfm-mcp >= 0.22.9 (cash MCP tools list_supported_fiat_currencies, get_cash_balance, set_cash_balance). On older builds the tool calls in Step 0 will fail with "Unknown tool" — halt and instruct the user to upgrade lurii-pfm.
AskUserQuestion before calling set_cash_balance.list_supported_fiat_currencies. Reject anything else with the supported list shown."100.50", not 100.5 — the MCP tool parses strings and rejects non-finite values.get_cash_balance returns Cash source not found, do not try to create one — surface the exact pfm source add instruction.set_cash_balance upserts today's row; re-running the skill same day overwrites today, not appends.pfm refresh (separate).Call in parallel:
mcp__lurii-finance__list_supported_fiat_currenciesmcp__lurii-finance__get_cash_balanceBranches:
Response contains error: "Cash source not found" → halt with:
No cash source is configured. Run
pfm source addand pick thecashtype at the prompt; setfiat_currenciesto a comma-separated list (e.g.USD,EUR). Then re-invoke /cash-update.
Response contains error: "Multiple cash sources are configured" with matches: [...] → halt with:
Multiple cash sources detected:
<matches joined>. The MCP cash tool requires exactly one. Delete the extras withpfm source delete <name>, then re-invoke /cash-update.
Response is a CashBalanceView → continue.
Render a compact table the user can read at a glance:
Current cash (source: <source_name>, last snapshot: <latest_snapshot_date or "never">)
USD 1,234.56 ($1,234.56)
EUR 850.00 ($935.00 @ 1.10)
GBP 0.00 (-)
If latest_snapshot_date is null or older than today, note that — the user may want to refresh stale fiat prices by simply re-saving.
AskUserQuestion (single call), options:
update one currency — fastest pathupdate multiple currencies — iterateadd a new currency — picks from supported set minus already-selectedremove a currency — drops from selected_currencies and zeros itcancel — exit, no writeFree-text "Other" is auto-provided; treat free-text as a goal description and re-route to one of the above.
For each affected currency:
usd, normalize to USD (the MCP tool does too, but check early to fail fast with a helpful message).For "add a new currency", the new code joins selected_currencies. For "remove", it gets dropped from selected_currencies and the amount is set to "0" (zero row preserved per set_cash_balance semantics — currencies previously held but unselected get zeroed automatically by the tool).
For "update multiple currencies": loop until the user picks "done" via a second AskUserQuestion.
Compose the call args for set_cash_balance:
selected_currencies: the final list (existing - removed + added). Order: existing order with new codes appended.balances: dict with every currency in selected_currencies as a key. For unchanged currencies, copy the current amount from Step 0. For changed/new, use the user's input. The MCP tool zeros out previously-held currencies that are no longer selected — relying on that, do not include removed codes in balances.Render before/after side by side:
Diff:
USD 1,234.56 → 1,234.56 (no change)
EUR 850.00 → 1,000.00 (+150.00)
GBP 0.00 → 250.00 (new)
THB 500.00 → 0.00 (removed)
AskUserQuestion: Apply this update? options: apply, cancel. Default no recommendation — the user must pick.
If cancel → exit cleanly, no write.
Call mcp__lurii-finance__set_cash_balance with the args from Step 4.
Handle errors:
error field present → surface the message verbatim. Do not retry. Common cases:
selected_currencies contains unsupported currencies: … — re-route to Step 3 with the offending codes flagged.Amount for 'X' must be non-negative / … must be finite — same.Invalid amount for 'X' — same.Show a one-paragraph summary:
balances map.End with a hint: the SwiftUI app refreshes automatically (the MCP write triggers a snapshot_updated WebSocket event when the daemon is running). If the daemon is not running, the next pfm refresh or app open will pick it up.
list_supported_fiat_currencies are valid.memory/. Cash balance lives in the SQLite DB via the MCP, not in workspace memory.npx claudepluginhub chizhovyui/lurii-cc --plugin lurii-ccCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.