Skip to content
Agentmart
Submit a tool

subscription-ledger

Rules for recording, matching and reporting saved subscriptions and recurring bills, their dates, provenance and opt-in reminders.

Skill by akhilvuputuri

IndexedMIT★ 1
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/akhilvuputuri-subscription-ledger

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Rules for recording, matching and reporting saved subscriptions and recurring bills, their dates, provenance and opt-in reminders.

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/subscription-ledger

What's inside

Skill name
subscription-ledger
Description
Rules for recording, matching and reporting saved subscriptions and recurring bills, their dates, provenance and opt-in reminders.
License
MIT
Instructions
17 lines in SKILL.md · view on GitHub

Files (1)

  • SKILL.md

SKILL.md (first lines)

# Subscription ledger

Work only from explicit owner statements in the brief. An instruction such as "add Netflix, 22.98 SGD monthly" confirms that item; a receipt, screenshot, suggested item or promotional offer alone does not. If the brief only contains extracted candidates, return needsOwner asking which to track. Invoice-backed fields follow the invoice-ledger skill.

Use subscription_list to retrieve IDs and current revisions before updating. A merchant-only match is ambiguous: ask which plan/account, never select the first. Merchant plus a plan or account label can resolve one saved item. Include inactive items before adding a previously cancelled merchant. Record cancellation only when the owner says they completed it; telling you they intend to cancel is not a cancellation. Cancelling means renewal was stopped but the owner remains paid through a stated date; cancelled means the owner says it ended. No merchant account can be changed or paid here.

subscription_record needs a fresh requestKey UUID; reuse it only for an exact retry. When a turn includes multiple original inputs, first call subscription_list(sourceInputs=true), follow nextOffset, and pass the exact sourceInputIds that support the fields. Never label unrelated later inputs as sources. If an excerpt is insufficient, ask the coordinator to read that original input with conversation_read(id). The host validates ownership and current coordinator/child run membership; a single original input is bound automatically. Updates need the baseRevision just read. Store amount as the stated decimal string, currency explicitly, and amountType fixed or variable only when known. Set cadence and status from the owner statement, and use unknown when absent. A monthly bill with a variable amount does not become a fixed recurring price. Keep nextChargeDate, trialEndDate, cancellationDeadline and paidThroughDate distinct. Resolve relative dates using Singapore time; "renews on the 5th" means the next future 5th. Never invent a cancellation deadline, charge time or tax treatment. Every supplied non-null nextChargeDate needs nextChargeEstimated explicitly: false for stated, true for inferred. Clearing the date also clears its certainty. Null explicitly clears a previously saved value. Only short merchant, plan and account labels belong here, never payment numbers, bank details or full addresses.

Inspect reminder settings with subscription_list(id). subscription_settings only changes preferences; never call it as a read. Reminders are opt-in, per item, through subscription_settings or reminderEnabled on an explicit request to remind. Enabling uses defaults of 7 days before annual renewals and cancellation deadlines, 3 before trial ends, no other renewal reminder, and 09:00 Singapore. daysBefore overrides all dates for that item; time changes the firing hour. Confirm the actual returned firesAt in Singapore time and explain estimated dates. If the notice window has passed, report the warning instead of promising a scheduled reminder. Dates and reminders commit together, edits withdraw obsolete reminders, and past delivery attempts are never automatically replayed. A pending/failed reminder is not a delivered message.

A stated future price ("Netflix goes up to 24.98 SGD on 1 December") is a pending price change: set pendingAmount, pendingCurrency and pendingEffectiveDate together, and keep amount as the current price. Never set one from a promotion, a guess or an invoice. From the effective date, reads, totals and later reminders use the new price, and the next update records it in history (the result's appliedPendingPrice says so). The effective date must be in the future; clearing all three before it drops the change, and once it is in effect, correct amount directly. Price-change notices are on unless the owner turns them off with subscription_settings(priceAlerts=false). They give a reminder 3 days before a saved price change, even when other reminders are off, and one alert when a background invoice match does not show the saved price. Report the returned firesAt and any warnings. Explain that an alert never changes the tracker.

The monthly summary is opt-in and owner-wide. subscription_summary_set(enabled, day?, time?) turns it on or off: one Telegram message on that day of each month (default the 1st, 09:00 Singapore). It is built from saved records with no model call and covers monthly equivalents, the previous calendar month's recorded changes and the next 30 days. Use subscription_summary to preview it, or to answer "what changed last month" (pass month for another month). Never call the setter as a read. The summary sees only saved records, not bank or card statements.

Give concise model-written answers. Monthly equivalents are normalized estimates, not actual spending or forecast charges; totals keep currencies separate and exclude unknown/variable/trial/cancelling prices. Surface unknowns and use subscription_list for the owner's next 30 days. The read-only Mini App has a Subscriptions tab with history and reminders. Put created/read subscription IDs in refs. There is no automatic source monitoring, external cancellation, payment, negotiation or cancellation button.

From akhilvuputuri/chief-agent, MIT.

More from akhilvuputuri/chief-agent

Signals

Stars
1
Forks
0
Open issues
16
Last commit (this folder)
Oct 19, 2026 (10 days ago)
Last release
Oct 11, 2026 (18 days ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from akhilvuputuri

Cite this page

subscription-ledger skill. Agent Mart. https://agentmart.dev/skills/akhilvuputuri-subscription-ledger (last updated 2026-10-24)