How the skill works: your agent reads stripe payouts from Stripe; add gumroad and paddle payouts, whichever you use from Gumroad; payments from Paddle; deposits from the bank from Mercury; quickbooks, xero from 2 more apps; payment providers, accounting software, names your bank shows for payouts, business days before a payout counts as missing from What you tell it, mondays at 9:00, and gives you a question for you and a telegram ping and the report in the chat.
Reads
StripeStripe payouts
GumroadAdd Gumroad and Paddle payouts, whichever you use
PaddlePayments
MeMercuryDeposits from the bank
+22 more appsQuickBooks, Xero
What you tell itPayment providers, Accounting software, Names your bank shows for payouts, Business days before a payout counts as missing
reads
Your agentClaude Code, Codex, Cursor or GeminiMondays at 9:00
posts
You get
A question for youOn your board, answered with a tap
A Telegram pingOnly when it needs your answer, if you connect Telegram
The report in the chatEvery run, with or without Briefkin
What you get
Payouts in the last 30 days per provider, and how many matched in the bank and in the books.
Not in bank: paid payouts with no deposit after 3 business days, with the destination account.
Not in books: deposits that arrived but were never recorded.
Unknown deposits from a provider with no payout behind them.
The ask: which support messages and bookkeeper notes to draft.
The card on the right is a sample. Yours shows your own numbers and updates in place every run.
What lands on your board
Your boardMondays at 9:00
AcmePayouts that never reached the bank: Stripe, Gumroad or Paddle, Mercury and your books · Claude Code
Gumroad's $612 payout of October 14 never reached the bank
Shall I draft a message to Gumroad support and a note for your bookkeeper?
6 payouts in the last 30 days: 3 matched in Mercury and QuickBooks, 1 is still in transit. The Gumroad payout of October 14 ($612) is not in the bank, and 1 Stripe payout ($3,982.10) has no matching deposit in QuickBooks.
Provider
Payout date
Amount
In Mercury
In QuickBooks
Stripe
Oct 6
$4,210.55
Oct 7
Yes
Stripe
Oct 13
$3,982.10
Oct 14
Missing
Gumroad
Oct 14
$612.00
Missing
Missing
Paddle
Oct 15
$2,318.40
Oct 16
Yes
Stripe
Oct 20
$4,455.80
Oct 21
Yes
Stripe
Oct 27
$4,104.25
In transit
Not due
Gumroad paid to an account ending 4821; your Mercury checking ends in 7730. Check the payout account under Settings > Payments in Gumroad.
An example with made-up numbers. Your agent posts your real ones.
What it does
A payout that says "paid" in Stripe or Gumroad is a promise, not money. Most of the time it lands two days later and the bookkeeper records it, but sometimes it goes to an old bank account, bounces, or arrives and never gets booked. Nobody notices until month-end close, or until the books and the bank disagree by an amount nobody can explain.
Every Monday the agent lists the last 30 days of payouts from each payment provider you use, finds the matching deposit in Mercury by amount, date and sender, and then the matching deposit or transfer in QuickBooks or Xero. What lines up is counted; what does not is listed with the reason it probably failed, and the agent offers to draft the support message.
How it works
1List Stripe payouts
GET /v1/payouts?arrival_date[gte]=<30 days ago>&limit=100, keeping id, amount (in cents), currency, arrival_date, status (paid, in_transit, pending, failed, canceled) and statement_descriptor. A failed payout goes straight on the list with its failure_code.
2Add Gumroad and Paddle payouts, whichever you use
Gumroad: GET /v2/payouts?after=<30 days ago>&include_upcoming=false, keeping amount (a decimal string), currency, status, processed_at, payment_processor and bank_account_visual; skip paypal payouts, which never touch the bank. Paddle has no payout list endpoint: POST /reports with type: "payout_reconciliation" and a balance_movement_date filter, download it from GET /reports/{id}/download-url, and sum balance_movement_in_balance_currency per remittance_reference, dated by payout_created_at.
Me
3Read deposits from the bank
GET /api/v1/transactions?start=<35 days ago>&end=<today> across all accounts, dropping failed, cancelled, reversed and blocked, internalTransfer rows, and money out (check the sign on one deposit you know). Keep amount, postedAt (or createdAt while pending), counterpartyName and bankDescription. Read GET /api/v1/accounts for each account's last four digits.
4
4Match each payout to one deposit
Match on amount to the cent and currency, with the deposit dated from the payout's expected date to 3 business days after it; when two candidates fit, prefer the one whose counterpartyName or bankDescription contains the provider name (STRIPE, GUMROAD, PADDLE or the names in settings). Each deposit matches once. A paid payout older than 3 business days with no deposit is "not in bank"; compare Gumroad's bank_account_visual with your Mercury account numbers. A provider deposit with no payout is "unknown deposit".
5Check each deposit is in the books
QuickBooks: SELECT * FROM Deposit WHERE TxnDate >= '<date>' and SELECT * FROM Transfer WHERE TxnDate >= '<date>', matching TotalAmt or Amount into the bank account within 3 business days of the Mercury date. Xero, if that is your ledger: GET /BankTransactions?where=Type=="RECEIVE" and GET /BankTransfers, matching Total or Amount and Date. A deposit with no entry is "not in books".
6
6Post the gaps as an ask
If everything matched, post a short update instead. Otherwise list each gap with provider, payout date, amount and reason, and ask whether to draft a message to the provider's support (payout ID, date, amount, account last four) and a note for the bookkeeper. The agent never moves money or creates entries.
Post it to the board
With BRIEFKIN_TOKEN set, the agent sends the result as one card that updates in place every run. Without it, you get the report in the chat.
Install and run it
Pick your agent, where the data comes from and how to schedule it; the commands below follow.
Agent
Data
Schedule
Install the skill
One command. It puts the SKILL.md in ~/.claude/skills and in ~/.agents/skills, which Codex, Cursor, Gemini CLI, Copilot CLI and OpenCode read too.
shellcurl -fsSL https://briefkin.dev/skills/stripe-payout-reconciliation/install | sh
Run it
Ask Claude Code:
promptRun the stripe-payout-reconciliation skill
Or paste the prompt instead of installing:
promptReconcile my payouts for the last 30 days. List payouts from whichever of Stripe, Gumroad and Paddle I use (Stripe payouts with arrival_date and status; Gumroad payouts with processed_at and bank_account_visual, skipping PayPal ones; Paddle from a payout_reconciliation report, summed per remittance_reference). Match each to one Mercury deposit: same amount to the cent, dated up to 3 business days after the payout, sender name containing the provider. Then check each deposit has a matching Deposit or Transfer in QuickBooks (or a RECEIVE bank transaction or bank transfer in Xero) within 3 business days. Give me a table of payouts with bank and books status, and list what is not in the bank, not in the books, or deposited with no payout behind it. Do not move money or create entries. Ask me before drafting support messages or bookkeeper notes.
Put it on a schedule
Mondays at 9:00, from cron on any machine where Claude Code is signed in:
crontab0 9 * * 1 claude -p "Run the stripe-payout-reconciliation skill"
Add it with crontab -e. A laptop asleep at that time runs it when it wakes if you use launchd or Task Scheduler instead; GitHub Actions works for the API route.
Send it to your board
Connect Briefkin once with curl -fsSL https://briefkin.dev/install | sh and every run lands on your board as a question for you. How setup works
SKILL.md---
name: stripe-payout-reconciliation
description: "Every Monday: each Stripe, Gumroad and Paddle payout matched to a Mercury deposit and an entry in QuickBooks or Xero, with the ones that went missing. Use when the user asks for this, or when it runs on a schedule."
---
# Payouts that never reached the bank: Stripe, Gumroad or Paddle, Mercury and your books
Every Monday: each Stripe, Gumroad and Paddle payout matched to a Mercury deposit and an entry in QuickBooks or Xero, with the ones that went missing.
A payout that says "paid" in Stripe or Gumroad is a promise, not money. Most of the time it lands two days later and the bookkeeper records it, but sometimes it goes to an old bank account, bounces, or arrives and never gets booked. Nobody notices until month-end close, or until the books and the bank disagree by an amount nobody can explain.
Every Monday the agent lists the last 30 days of payouts from each payment provider you use, finds the matching deposit in Mercury by amount, date and sender, and then the matching deposit or transfer in QuickBooks or Xero. What lines up is counted; what does not is listed with the reason it probably failed, and the agent offers to draft the support message.
## Two ways to get the data
Use the API or MCP route when you have an MCP server, a CLI or an API token for the app. Otherwise, if you can drive a browser the user is signed in to (Claude in Chrome, a Playwright or Chrome DevTools MCP server), use the browser route. Say which one you used.
## Route A: API or MCP server
### What you need
- Read access to each payment provider you use: a Stripe restricted key with Read on Payouts, a Gumroad token with `view_payouts`, a Paddle API key with `report.read`.
- A Mercury Read Only token or the Mercury MCP server with the `read` scope, and read access to QuickBooks or Xero bank transactions and transfers.
- The names your bank shows for each provider's deposits, if they are not simply STRIPE, GUMROAD or PADDLE.
If something is missing, say what and stop; do not invent numbers.
### Steps
1. **List Stripe payouts** (Stripe): `GET /v1/payouts?arrival_date[gte]=<30 days ago>&limit=100`, keeping `id`, `amount` (in cents), `currency`, `arrival_date`, `status` (`paid`, `in_transit`, `pending`, `failed`, `canceled`) and `statement_descriptor`. A `failed` payout goes straight on the list with its `failure_code`.
2. **Add Gumroad and Paddle payouts, whichever you use** (Gumroad): Gumroad: `GET /v2/payouts?after=<30 days ago>&include_upcoming=false`, keeping `amount` (a decimal string), `currency`, `status`, `processed_at`, `payment_processor` and `bank_account_visual`; skip `paypal` payouts, which never touch the bank. Paddle has no payout list endpoint: `POST /reports` with `type: "payout_reconciliation"` and a `balance_movement_date` filter, download it from `GET /reports/{id}/download-url`, and sum `balance_movement_in_balance_currency` per `remittance_reference`, dated by `payout_created_at`.
3. **Read deposits from the bank** (Mercury): `GET /api/v1/transactions?start=<35 days ago>&end=<today>` across all accounts, dropping `failed`, `cancelled`, `reversed` and `blocked`, `internalTransfer` rows, and money out (check the sign on one deposit you know). Keep `amount`, `postedAt` (or `createdAt` while pending), `counterpartyName` and `bankDescription`. Read `GET /api/v1/accounts` for each account's last four digits.
4. **Match each payout to one deposit**: Match on amount to the cent and currency, with the deposit dated from the payout's expected date to 3 business days after it; when two candidates fit, prefer the one whose `counterpartyName` or `bankDescription` contains the provider name (`STRIPE`, `GUMROAD`, `PADDLE` or the names in settings). Each deposit matches once. A paid payout older than 3 business days with no deposit is "not in bank"; compare Gumroad's `bank_account_visual` with your Mercury account numbers. A provider deposit with no payout is "unknown deposit".
5. **Check each deposit is in the books** (QuickBooks): QuickBooks: `SELECT * FROM Deposit WHERE TxnDate >= '<date>'` and `SELECT * FROM Transfer WHERE TxnDate >= '<date>'`, matching `TotalAmt` or `Amount` into the bank account within 3 business days of the Mercury date. Xero, if that is your ledger: `GET /BankTransactions?where=Type=="RECEIVE"` and `GET /BankTransfers`, matching `Total` or `Amount` and `Date`. A deposit with no entry is "not in books".
6. **Post the gaps as an ask**: If everything matched, post a short update instead. Otherwise list each gap with provider, payout date, amount and reason, and ask whether to draft a message to the provider's support (payout ID, date, amount, account last four) and a note for the bookkeeper. The agent never moves money or creates entries.
## Route B: the browser
### What you need
- Signed in to Stripe, Gumroad or Paddle (Admin or Finance role for Paddle payouts), Mercury, and QuickBooks or Xero, in this browser. Mercury may ask for a 2FA code; the person enters it.
If something is missing, say what and stop; do not invent numbers.
### Steps
Start at https://dashboard.stripe.com/payouts. The user is signed in already; never type passwords or codes, and ask if a sign-in page appears.
1. **List payouts in each provider**: In Stripe's Payouts page, note each payout of the last 30 days with its arrival date, amount and status. In Gumroad, open Payouts and note date, amount and destination account. In Paddle, open the Payouts page (Admin or Finance role) and note each payout's date, amount and remittance reference.
2. **Find each deposit in Mercury**: Open `https://app.mercury.com/transactions`, set the date range to the last 35 days and search `stripe`, `gumroad` and `paddle` in turn. Match each payout to a deposit of the same amount dated up to 3 business days later; note the account it landed in.
3. **Check the books**: In QuickBooks, open the bank register for that Mercury account (Chart of accounts > View register) and look for a deposit or transfer of the same amount near that date. In Xero, open the bank account under Accounting > Bank accounts and check Account Transactions.
4. **Sort out what is missing**: A paid payout older than 3 business days with no bank deposit is not in the bank: compare the destination account digits with your Mercury accounts. A deposit with no ledger entry is not in the books. Report both and ask before drafting any message.
Note: Paddle's Payouts page is only visible to Admin and Finance roles. Mercury search matches description and counterparty names, so a provider that pays under a different legal name needs that name typed instead. Thirty days of payouts is a few minutes of clicking; for daily Stripe payouts over several months the API route is far quicker.
## The report
- **Payouts in the last 30 days** per provider, and how many matched in the bank and in the books.
- **Not in bank**: paid payouts with no deposit after 3 business days, with the destination account.
- **Not in books**: deposits that arrived but were never recorded.
- **Unknown deposits** from a provider with no payout behind them.
- The ask: which support messages and bookkeeper notes to draft.
## Post it to Briefkin
When `BRIEFKIN_TOKEN` is set, or `~/.config/briefkin/env` exists (the installer from https://briefkin.dev/docs writes it), also send the result to the user's Briefkin board as one card. Keep the `item_key` the same on every run so the card updates in place, use a new `event_id` per run, and put today's real numbers in place of the example ones. If the request fails, say so once and carry on.
```bash
[ -n "${BRIEFKIN_TOKEN:-}" ] || . ~/.config/briefkin/env
curl -sS -X POST "${BRIEFKIN_URL:-https://briefkin.dev}/v1/events" \
-H "authorization: Bearer $BRIEFKIN_TOKEN" \
-H "content-type: application/json" \
-d @- <<'JSON'
{
"v": 1,
"event_id": "stripe-payout-reconciliation/<date of this run, e.g. 2026-10-16>",
"item_key": "stripe-payout-reconciliation",
"project": "Acme",
"source": "Payouts that never reached the bank: Stripe, Gumroad or Paddle, Mercury and your books skill",
"kind": "action",
"title": "Gumroad's $612 payout of October 14 never reached the bank",
"summary": "**6 payouts** in the last 30 days: 3 matched in Mercury and QuickBooks, 1 is still in transit. The **Gumroad payout of October 14 ($612)** is not in the bank, and **1 Stripe payout ($3,982.10)** has no matching deposit in QuickBooks.",
"action": {
"request": "Shall I draft a message to Gumroad support and a note for your bookkeeper?",
"options": [
"Draft both",
"Only the Gumroad message",
"Only the bookkeeper note",
"I will handle it"
]
},
"widget": [
{
"type": "Table",
"props": {
"columns": [
"Provider",
"Payout date",
"Amount",
"In Mercury",
"In QuickBooks"
],
"align": [
"left",
"left",
"right",
"left",
"left"
],
"rows": [
[
"Stripe",
"Oct 6",
"$4,210.55",
"Oct 7",
"Yes"
],
[
"Stripe",
"Oct 13",
"$3,982.10",
"Oct 14",
"Missing"
],
[
"Gumroad",
"Oct 14",
"$612.00",
"Missing",
"Missing"
],
[
"Paddle",
"Oct 15",
"$2,318.40",
"Oct 16",
"Yes"
],
[
"Stripe",
"Oct 20",
"$4,455.80",
"Oct 21",
"Yes"
],
[
"Stripe",
"Oct 27",
"$4,104.25",
"In transit",
"Not due"
]
]
}
},
{
"type": "Callout",
"props": {
"text": "Gumroad paid to an account ending 4821; your Mercury checking ends in 7730. Check the payout account under Settings > Payments in Gumroad.",
"tone": "bad"
}
}
]
}
JSON
```
Widgets come from the Briefkin catalog (https://briefkin.dev/v1/catalog). Without a token, just give the user the report.
## Run it on a schedule
Suggested: Mondays at 9:00 (`0 9 * * 1`). From cron, with the agent signed in on that machine:
```bash
0 9 * * 1 claude -p "Run the stripe-payout-reconciliation skill"
# Codex: codex exec, Gemini CLI: gemini -p, Copilot CLI: copilot -p, OpenCode: opencode run
```
Or use the agent's own scheduler (Claude Code routines, Codex automations, Claude or ChatGPT scheduled tasks): https://briefkin.dev/skills/stripe-payout-reconciliation#schedule
Source: https://briefkin.dev/skills/stripe-payout-reconciliation
What your agent needs
Read access to each payment provider you use: a Stripe restricted key with Read on Payouts, a Gumroad token with view_payouts, a Paddle API key with report.read.
A Mercury Read Only token or the Mercury MCP server with the read scope, and read access to QuickBooks or Xero bank transactions and transfers.
The names your bank shows for each provider's deposits, if they are not simply STRIPE, GUMROAD or PADDLE.
Connecting Stripe
Stripe MCP server, Stripe's official remote server at https://mcp.stripe.com. Add Stripe from Claude's connector directory, or run claude mcp add --transport http stripe https://mcp.stripe.com/, and sign in with OAuth; clients without OAuth can send a restricted key as a Bearer token.
The Stripe CLI. Run stripe login once, then stripe subscriptions list --status active --limit 100 or stripe invoices list --status open. The CLI defaults to test mode, so add --live for real data.
API with a restricted key. Create a restricted key (rk_live_...) in the Dashboard under Developers > API keys, store it in STRIPE_API_KEY, and give it Read on the resources the report touches: Subscriptions, Invoices, Charges, Customers, PaymentIntents, Balance and Disputes.
Never hand an agent the secret key (sk_live_...); a restricted key with Read where needed and None everywhere else can't refund, cancel or charge anything.
Connecting Gumroad
Gumroad MCP server, Gumroad's own hosted server. In Claude, add https://gumroad.com/claude/v1/mcp as a custom connector (Gumroad isn't in Claude's directory yet) and sign in to Gumroad; other clients that support OAuth with PKCE can use the same URL. Its tools list products, sales and payouts, and can create, publish and unpublish product drafts (details).
API v2 with an access token. In Gumroad, open Settings > Advanced, create an application under Applications, and click Generate access token. Store the token in GUMROAD_ACCESS_TOKEN and pass it as the access_token parameter. An OAuth app can ask for just the view_sales scope.
If your client lets you choose OAuth scopes for the MCP server, keep view_sales and view_payouts and leave out edit_products unless you want drafts made from chat. Disconnecting in the chat app doesn't revoke the token: do that under Authorized Applications in Gumroad's settings.
Connecting Paddle
Paddle MCP server, Paddle's official open-source server for Paddle Billing (not Paddle Classic), @paddle/paddle-mcp (source). It runs locally with Node: in Claude Code, claude mcp add --env PADDLE_API_KEY=<key> --env PADDLE_ENVIRONMENT=production --env PADDLE_MCP_TOOLS=read-only --transport stdio paddle -- npx -y @paddle/paddle-mcp. Codex and Cursor take the same command with those three variables in the server's env. PADDLE_MCP_TOOLS accepts read-only, non-destructive (the default), all or a list of tool names.
API with an API key. Create a key on the Authentication page of the Paddle dashboard (vendors.paddle.com/authentication-v2, or sandbox-vendors.paddle.com/authentication-v2 for sandbox), choose its permissions, and store it in PADDLE_API_KEY. Live keys start with pdl_live_apikey_, expire after 90 days by default (a year at most), and go in Authorization: Bearer.
Give the key read permissions only (subscription.read, transaction.read, customer.read, report.read) and set PADDLE_MCP_TOOLS=read-only; the default non-destructive mode can still create transactions, discounts and customers.
MeConnecting Mercury
Mercury MCP, Mercury's official remote server at https://mcp.mercury.com/mcp, signed in with OAuth. It's in Claude's connector directory. In Claude Code run claude mcp add --transport http -s user mercury https://mcp.mercury.com/mcp and then claude mcp login mercury; in Codex, codex mcp add mercury --url https://mcp.mercury.com/mcp; Cursor takes the same URL (docs). Its tools load accounts, transactions, statements, recipients and cards.
API with a Read Only token. In the Mercury dashboard, open the organization menu, then Settings > Tokens, and create an API token of the Read Only type, which needs no IP whitelist. Store it in MERCURY_API_TOKEN and send it as Authorization: Bearer.
At the MCP consent screen, grant only read: the write scopes (transactions:request, transfers:request, transactions:update and the category scopes) let an agent request payments or recategorize transactions. A Read Only API token fetches everything a report needs and can't move money.
Connecting QuickBooks
QuickBooks connector in Claude. Intuit and Anthropic partnered in 2026 to bring QuickBooks into Claude; where your plan offers the connector, connect it with your Intuit sign-in.
QuickBooks Online MCP server, Intuit's open-source local server (source). It runs over stdio and reads QUICKBOOKS_CLIENT_ID, QUICKBOOKS_CLIENT_SECRET, QUICKBOOKS_REFRESH_TOKEN, QUICKBOOKS_REALM_ID and QUICKBOOKS_ENVIRONMENT.
Accounting API with OAuth 2.0. Register an app in the Intuit Developer Portal, authorize the company once with the com.intuit.quickbooks.accounting scope, and store the same five values. Access tokens last an hour and the refresh token can change on each refresh, so the skill must save the newest one.
The accounting scope has no read-only version; with Intuit's MCP server, set QUICKBOOKS_DISABLE_WRITE, QUICKBOOKS_DISABLE_UPDATE and QUICKBOOKS_DISABLE_DELETE to true so the agent gets only read, search and report tools.
Connecting Xero
Xero connector for Claude, Xero's own remote server at https://mcp.xero.com/mcp, in Claude's connector directory. It connects with read-only access and has tools for profit and loss, financial and cash position, aged receivables and payables, invoices, bills, contacts and bank transactions. Connectors added in claude.ai also appear in Claude Code when you sign in with that account.
Xero MCP server (open source). Xero's local server, @xeroapi/xero-mcp-server, runs with a custom connection's client ID and secret or with a bearer token: claude mcp add --env XERO_CLIENT_ID=<id> --env XERO_CLIENT_SECRET=<secret> --transport stdio xero -- npx -y @xeroapi/xero-mcp-server@latest, and the same command and variables in Codex or Cursor. It also has tools that create invoices, payments and journals, so set XERO_SCOPES to read scopes only (source).
Accounting API with a custom connection. A custom connection links one organisation to your app through the client credentials grant. Store XERO_CLIENT_ID and XERO_CLIENT_SECRET and request granular read scopes such as accounting.invoices.read, accounting.banktransactions.read, accounting.reports.profitandloss.read, accounting.reports.aged.read and accounting.contacts.read; custom connections created since April 29, 2026 use these granular scopes.
The Claude connector is read-only already. On the API, request only .read scopes: a token without write scopes can't raise an invoice or record a payment.
Questions
What if the bank amount does not match the payout exactly?
Stripe and Gumroad payouts arrive as one deposit for the exact net amount, so the match is to the cent. Paddle may pay in a different currency than the bank account, and some banks charge an incoming wire fee, so for Paddle the agent accepts a 2% difference and shows the gap. A payout split across two deposits is rare and shows up as a miss for you to check.
Why 3 business days?
Stripe's arrival_date is when it expects the bank to have the money, but ACH can post a day or two late, and weekends and bank holidays push it further. Inside 3 business days a missing deposit is reported as pending, not missing; after that it is worth a support message.
Do I need Briefkin to use the Payouts that never reached the bank: Stripe, Gumroad or Paddle, Mercury and your books skill?
No. The skill runs with your own agent and gives you the report in the chat. With a Briefkin token set, each run also posts it to your board as a asks you, so you can glance at it instead of asking again.
Which agents can run it?
Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot CLI, OpenCode, Windsurf and Amp all read SKILL.md files. The install command puts it in ~/.claude/skills and ~/.agents/skills, where they look. ChatGPT, the Claude app and Grok take the prompt instead. Pick your agent under "Install and run it" and the commands change to match.
Can it work without an API or MCP server, from my browser?
Yes. Switch the data source to "Your browser" and the steps change to the Stripe, Gumroad, Paddle, Mercury, QuickBooks and Xero pages themselves: the agent opens dashboard.stripe.com/payouts in a browser you are signed in to and reads the numbers off the page. Claude Code, Codex, Cursor, Claude app and ChatGPT can drive a browser out of the box; Gemini CLI, Copilot CLI and OpenCode need a Playwright or Chrome DevTools MCP server first. It is slower than the API and needs you signed in, so it suits a report you run by hand or from a scheduler on your own computer.
Answer your agents from one board, or from Telegram
Skills are free to use with any agent. Briefkin is where their results land: one board for every report, number and question your agents send, with a ping when something needs you.