financial-insights
Skill896 starsChanged 30 days agoMITView on GitHub
Reads a user's Link transactions, balances, financial sources, and precomputed insights to answer questions about spending, available funds, connected accounts, and account activity. Use for balance checks, transaction history, spending summaries, shopping patterns, and source capabilities.
In this repository9 other files it gives its agents.
- AGENTS.mdAGENTS.md
- packages/agent-identity/AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- create-payment-credentialSkill
- check-link-walletSkill
- complete-link-purchaseSkill
- create-payment-credentialSkill
- financial-insightsSkill
- use-link-identitySkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
16 rules. About 0 are common, 6 are distinctive, and 10 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈6
Distinctive · estimate
This author's own choices. Worth a look.
10
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 12
Use this skill for read-only questions about the user's Link financial data.
- Very specific: line 13
Call the extension's native tools with their discovered mount prefix, such as link__list_transactions.
- Distinctive: line 24
Do not ask for tokens in chat.
- Distinctive: line 30
Use the smallest set that answers the question.
- Very specific: line 50
Only transaction amount uses negative values for money leaving the account and positive values for money entering.
- Very specific: line 60
Call list_transactions with the relevant filters, for example:
- Very specific: line 98
Call list_balances with {} for an initial page, or filter by sources:
- Very specific: line 112
Use current for a general balance question and cash.available when the user asks about available cash.
- Very specific: line 118
Call list_sources with {} or pagination arguments.
- Distinctive: line 128
Use capabilities and granted actions to understand what data is accessible.
- Very specific: line 139
If you do not already know the applicable insight ID or its access requirement, call list_available_insight_types with {}.
- Very specific: line 144
Call list_insights with only the IDs the task needs, for example { "insights": ["top_brand_by_transaction_count_per_category_t180d"] }.
- Distinctive: line 161
Never report missing permissions, pending, or failed results as zero activity.
- Distinctive: line 186
If access is missing or the insight is unavailable, continue without it or ask the user which merchant to use.
- Very specific: line 211
Stop when has_more is false or absent, or when the user's non-exhaustive lookup is satisfied.
- Distinctive: line 225
If the tools return no matching data, say that no data was available for the requested filters and access.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Financial insights
Use this skill for read-only questions about the user's Link financial data.
Call the extension's native tools with their discovered mount prefix, such as
link__list_transactions. Inputs and results are structured objects; use the
tool schemas for parameter names and constraints.
For purchases or payment credentials, load the mounted
create-payment-credential skill instead.
Authentication and access
The application configures the wallet and authorization provider. If Eve asks the user to connect Link, let that authorization finish before continuing. Do not ask for tokens in chat. If access is denied or a tool reports missing permissions, explain what data could not be retrieved and stop. Do not repeatedly retry the same denied operation.
Choose the right tools
Use the smallest set that answers the question.
| User asks about | Tool |
| Purchases, merchants, spend, income, deposits, recurring payments | list_transactions |
| Current balance, available funds, cash position | list_balances |
| Connected accounts, source details, data capabilities | list_sources |
| Precomputed signals, such as top brands per shopping category | list_available_insight_types, then list_insights |
For restaurant spending last month, retrieve transactions for that period. For an account balance, retrieve balances. For connected accounts, retrieve sources. Combine tools only when the question requires it, such as joining source names to balances.
Amounts and sources
Financial-data amounts are integers in the currency's smallest unit. Format
using the currency's ISO 4217 minor-unit exponent; do not always divide by 100.
For example, 152340 represents $1,523.40 USD.
Only transaction amount uses negative values for money leaving the account
and positive values for money entering. Interpret balance fields according
to their balance type. Keep currencies separate when aggregating.
A source is an account connected to Link. Use its id to join records exposing
source_id. Do not guess which account owns a transaction whose source_id
is null. Sources can describe banks, cards, and other account types.
Transactions
Call list_transactions with the relevant filters, for example:
{
"start_date": "2025-01-01",
"end_date": "2025-01-31",
"category": "groceries",
"origin": "external_connection",
"sources": ["<source_id>"],
"limit": 100
}Choose dates and filters from the user's question; omit unnecessary fields.
| Input | Meaning |
start_date, end_date | Inclusive dates in YYYY-MM-DD format |
category | Category filter |
origin | link or external_connection |
sources | Array of source IDs |
Useful response fields:
| Field | Interpretation |
amount | Negative for outflows; positive for inflows |
origin | Link-native or from an external connection |
category | May be null when unclassified |
status | API-provided status; do not assume a closed set of values or interpret/filter an unfamiliar status without knowing its meaning |
Distinguish spending from credits, deposits, and refunds. Explain whether a reported total is gross spending or net movement. Group by merchant, category, source, currency, or period only when relevant. Label summaries based on a limited window or partial pagination accordingly.
Balances
Call list_balances with {} for an initial page, or filter by sources:
{ "sources": ["<source_id>"], "limit": 100 }| Field | Interpretation |
type | cash or credit; determines which sub-object is present |
current | Balance before pending transactions; not necessarily available funds |
cash.available | Currency-to-amount mapping for available cash, accounting for pending activity |
credit.used | Currency-to-amount mapping for credit used |
as_of | Last update time; the data may be stale |
Use current for a general balance question and cash.available when the user
asks about available cash. Do not present credit used as available funds.
Preserve currencies, summarize by source, and mention relevant freshness limits.
Sources
Call list_sources with {} or pagination arguments.
| Field | Meaning |
id | Source identifier used by balances and transactions |
name, type | Display name and account type |
capabilities | Data capabilities with status values, such as balances.status |
external_connection.status | Connection status at the external institution |
granted_actions | Actions the user has granted for this source |
Use capabilities and granted actions to understand what data is accessible. Summarize institution, account type, and connection status when relevant. Avoid exposing full account numbers, tokens, or unnecessary identifiers.
Insights
Insights are signals Link computes ahead of time, such as
top_brand_by_transaction_count_per_category_t180d (top brands per shopping
category over the last 180 days, by transaction count). New types can appear
without an extension release.
- If you do not already know the applicable insight ID or its access
requirement, call
list_available_insight_typeswith{}. Each type has anid, adescription, and, when the current grant needs more access, anauthorization_remediationwith thescopeorauthorization_detailsrequired. - Call
list_insightswith only the IDs the task needs, for example{ "insights": ["top_brand_by_transaction_count_per_category_t180d"] }. Omitinsightsonly when the user asks for an overview of all insights.
Both tools accept limit (1 to 100, default 10) and starting_after (the last
returned insight id); they do not accept ending_before.
Handle each result by status and error_code:
| Result | Meaning | What to do |
ready | Computed; data holds { label, value } entries | Use it and mention as_of when freshness matters |
pending | Not computed yet | Treat as unavailable for this answer. Do not call again in a loop |
no_data with error_code: missing_permissions | The grant lacks access | Explain the access listed in authorization_remediation (below) |
no_data with error_code: internal_error | Link could not compute it | Say the insight is temporarily unavailable |
no_data with no error_code | No qualifying activity in the authorized data | Say no qualifying activity was found for the access granted |
Never report missing permissions, pending, or failed results as zero activity.
For missing_permissions, tell the user which access is missing (for example,
transaction access for a Link payment detail) and why. Access comes from the
application's authorization provider, never from chat. If Eve presents an
authorization challenge, let the user complete it, then call list_insights
once more for the same IDs. If authorization is declined or access is still
missing, continue without the insight and say so. Request nothing beyond the
supplied remediation.
Values are tagged by type. number_of_items values carry
number_of_items.label, naming what was counted (such as the brand), and
number_of_items.count; the entry label names the category, for example
"Top brand from Clothing and accessories shopping category" with J.crew and
a count of 10. The number_of_items.label may be absent. For an unfamiliar type, describe only what its
fields make clear, or omit it.
Insights describe observed history. Explicit user instructions and stated preferences always override them. Describe a pattern as observed, for example "your recent transactions point to J.crew for clothing", not as a preference the user declared. Results cover only authorized sources; mention that coverage may be incomplete.
For an ambiguous merchant during a payment, use a ready top-brand insight
for the relevant category only when the tools and existing access are available.
If access is missing or the insight is unavailable, continue without it or ask
the user which merchant to use. Do not request new access or retry solely for
this optional payment clue.
Pagination
list_transactions, list_balances, and list_sources accept:
| Input | Meaning |
limit | Results per page, from 1 to 100 |
starting_after | Cursor for the next page |
ending_before | Cursor for reverse navigation |
Responses contain data and may contain has_more. When has_more is true,
derive starting_after from the last returned item:
| Tool | Cursor field |
list_transactions | id |
list_balances | source_id |
list_sources | id |
For example, continue a transaction query with the same filters and
starting_after: "<last_transaction_id>". Change only the cursor across pages.
Stop when has_more is false or absent, or when the user's non-exhaustive lookup
is satisfied. If more results are reported but the page is empty or lacks a
usable cursor, stop and explain that pagination could not continue.
Fully paginate when a complete bounded result is needed, such as a total for a specified month. Do not present a partial page's sum as the complete total.
Answer the question
State the answer first, followed by the relevant period and source. Mention limitations such as missing categories, pending activity, stale balances, partial results, or inaccessible accounts. Summarize rather than dumping raw records or object IDs.
If the tools return no matching data, say that no data was available for the
requested filters and access. That does not prove no activity occurred or that
an inaccessible balance is zero. Report uncertain derived insights as uncertain.
Mention as_of when stale data could change the answer.
This skill does not move money, initiate payments, or modify sources. Retrieve only relevant financial data and never expose payment credentials.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

