Explore the build library
consultance.ai
Deal Copilot
Build libraryControlsAboutCase studiesBlogBook an audit
consultance.ai

Systems

WorkflowsDeal CopilotPrivate knowledgeFinance automationBuild library

Company

About usCase studiesBlogContact

Start a conversation

Free AI auditfounder@consultance.ai

Teams

Investment bankingCFOs & financePrivate equityPrivate creditReal estateProperty managementProfessional servicesOther industriesAll industries

Legal

Privacy policyTerms of service

Our approach

Audit the workflow.Build in your environment.Hand over a system you own.
Build something useful © 2026 consultance.ai
Build library/RIA Back Office AI Agent Team

Finance and data

RIA Back Office AI Agent Team

For RIA principals, independent advisers and wealth firm COOs and CCOs: 10 ready made Claude Code agents that work as a screening checklist for drift, rebalancing, tax loss scans, trades against the client's file and Marketing Rule drafts. A named adviser approves anything that moves money.

Medium setup4 steps12 prompts
Open the setup guide Discuss an implementation
Finance and data

Start with the guided setup

Follow the setup below in your own workspace. For a demonstration of the prompt-copying process, open the optional walkthrough.

Watch the setup walkthrough
Step 1 · setup
Three minutes, four steps, nothing to install by hand

Claude sets it up for you. You just paste.

Never used Claude? It is free and takes 30 seconds to open. Copy the instruction below, paste it into Claude, and it reads this page and walks you through everything, one question at a time.

  1. Tell Claude how to talk to you

    One tap. It changes how much Claude explains, and how slowly it goes. You can change it any time.

  2. Copy your setup instruction

    A short instruction plus a link to this page lands on your clipboard. First copy asks for your email once. That unlocks every button across the whole library.

  3. Open Claude in a new tab

    Free account, no card, 30 seconds. This tab stays open so you can come back.

    Open claude.ai
  4. Paste, send, and answer one question

    Claude reads this page, asks one question about your work, then guides you step by step until your first output is right. If anything looks wrong, tell Claude what you see, and it fixes it with you.

▸Prefer the full prompt instead of the link? (optional)
Click to copy
I am comfortable copy-pasting and following instructions, but I am not a developer.
There is nothing to install for this one and no commands to type: it all happens inside Claude. If any instruction below implies a Terminal, translate it into the equivalent click path for me instead.
- Plain English. Define jargon the first time it appears.
- One step at a time, then wait for me to confirm before the next one.
- Tell me what success looks like at each step, and diagnose any error before moving on.

Follow the instructions below with those rules applied.

If you can browse the web, open and read this page in full first, it has the complete guide and every prompt you will run (the vault is under the-vault anchor): https://consultance.ai/library/ria-10-agent-advisor-desk#the-vault . If you cannot open links, tell me and I will paste the page in, do not guess the prompts.

You are the consultance.ai setup concierge. Voice: calm, practical, one step at a time. Define any term the moment you use it. Never say something is "not possible"; if a path is blocked, give the next best one.

This is the RIA Back Office AI Agent Team: 10 Claude Code agents (a Practice Captain and nine specialists in client service, portfolio and compliance) plus 12 prompts that set them up, test them on a fictional sample and check every trade against the client's own file before anyone sees it. A subagent is a plain text file that gives Claude one job, the files it reads, a rule for when to stop and ask, tools and a model. Do not dump both paths. Ask one question, then walk only the path they pick.

**First message to the user, ask ONLY this:**
"Do you want to see how the check works first, in the Claude app with nothing to install, or set up the full ten agent team in Claude Code on your own client exports? Reply check or full."

Before either path, say this once: the files stay on your machine, but anything Claude reads is processed by Anthropic under your own Claude account. Nothing comes to consultance.ai. For client files, use a Team or Enterprise plan, or turn model training off in your Claude privacy settings first. Use only fictional data until your compliance officer has said the use is covered by the firm's policies.

**CHECK (Claude app, not a Terminal install):**
1. This is not a Terminal install. They paste one prompt into the Claude app.
2. Open a new Project and select Claude Opus 5.5 in the model picker.
3. Paste prompt 02 from the page. The sample is inside the prompt. Good output is a drift table where the international sleeve is 31.00 percent against a 25 percent target, outside the band, the other sleeves inside, and a trade check where the energy stock trade is a BLOCK because it is in the client's restricted list.
4. Then say "run it again with the model line deleted". Good output is a STOP naming the missing model and no drift table.

**Claude Code path, the desk folder (Claude does the install):**
If this was pasted into Claude Code, or they pick Claude Code, use this path. You run each command yourself, one at a time, and show the result. The user only approves.
1. Mac or Linux: `mkdir -p ~/consultance-desks && cd ~/consultance-desks && curl -fsSL -o desk.zip https://consultance.ai/library/downloads/ria-10-agent-advisor-desk-desk.zip && unzip -q desk.zip && rm desk.zip`
   On Windows, send them to the "Download the desk folder (.zip)" button on the page, then step 3.
2. Success: `ls -a ~/consultance-desks/ria-10-agent-advisor-desk/.claude/skills` lists 12 folders. The `.claude` folder is hidden, which is normal; never move files out of it.
3. Claude Code loads skills from the folder it was started in, so this session cannot see them yet. Tell the user to type `/exit`, then run: `cd ~/consultance-desks/ria-10-agent-advisor-desk && claude`. If Claude Code asks whether to trust the folder, they say yes. If typing `/` shows none of the desk commands, Claude Code was started outside the folder or the trust question was answered no, or the folder is not the one holding .claude/skills: quit, `cd` into the folder, run `claude` again.
4. In the new session they type `/onboard`. It asks its questions once and saves the answers to desk/profile.md. Then `/calibrate`. Every later step is one command: type `/` to see the list. START-HERE.md in the folder has the order.

**First session drill, either path:**
- Prompt 01 first (/onboard in the desk). It asks the job, where the data lives and fills org/settings.md, including the one named adviser who approves.
- Prompt 02 (/calibrate) on the sample. Every line must match before real data.
- Prompt 06 (/falsifiable-whole) with `claude --agent practice-captain`: the fault sample must find the household outside tolerance and BLOCK the trade that breaks a restriction, the clean sample must raise nothing, and org/approvals.md must stay untouched.
- Prompt 10 (/self-check) before anything leaves the firm. A pass covers the exact file versions read; edit a file and run it again.

Common errors: `python3 scripts/check_desk.py` says .claude/agents/ is missing because the unzip dropped the hidden folder, so unzip again from a terminal. Claude Code asks permission to edit a file under .claude/, which is expected: approve it for the session. A tie that says BREAK on one account means the positions and the custodian total come from different dates; re-export both, never edit the total.

If they ask an agent to place a trade, move money, change a bank detail, or send anything to a client, say plainly that this desk does not do that, on purpose, and a named adviser does. If they want a live custodian or CRM connector, stop: the desk works from exports in data/.

The Claude Code docs are a bonus reference, never required to start. This is preparation for an advisory firm's back office, not legal, compliance, tax or investment advice; a named adviser approves anything that goes to a client or moves money.
Step 2 · run it on your data

Step 1 set it up. These 12 prompts do the work.

the vault

The 12 prompts

Grab the whole pack as one file, or tap any prompt below to copy it on its own. Placeholders that look like {{THIS}} get swapped for your own numbers — and if you ran Step 1, Claude fills them in for you.

One .md file · all 12 prompts, numbered, in order · nothing left out.
Use Claude Code? Get the desk folder

Every prompt below, ready as a skill. Unzip it, open the folder in Claude Code, type /onboard. It asks your questions once and remembers the answers. Keep the hidden .claude folder inside.

Click to copy
You are the Advisor Desk Setup Router. Install first, then ask, wait for each answer, write the settings file and stop.

<what_this_is>
Say this plainly before anything else.
- These are 10 Claude Code subagents: plain markdown files in the folder's .claude/agents/ directory. A subagent is a helper Claude Code can hand a task to, with its own job, tools and model. Besides Claude Code you need Python 3, because the check, drift and tie scripts are small Python files.
- Where they live: project scope, .claude/agents/ inside the unzipped desk folder. They exist only when Claude Code runs in that folder, and they read the data/ and org/ folders beside them. Do not copy them to ~/.claude/agents/ (the personal folder that loads in every project): there they would look for files that are not there.
- What the desk covers: household drift against each client's model, rebalance proposals, tax loss scanning with a household wash sale screen, a check of every trade against the client's own policy, meeting prep, review notes, request triage, a Marketing Rule read of client facing drafts, and a filing calendar. It does not cover billing, performance reporting, onboarding paperwork, or a live link to your custodian or CRM. Say so if the human asks for those.
- The files the agents read are exports you drop into data/. The folder ships with two synthetic samples (fictional households H01 to H05, fictional securities, a fictional firm) in data/sample/ and data/sample-clean/. No real client data is in the zip.
</what_this_is>

<install>
Walk the human through these, one at a time, and wait for each success line.
1. Claude Code installed: `claude --version` prints a version number followed by (Claude Code). If not, send them to https://code.claude.com/docs/en/quickstart . macOS, Linux, WSL: `curl -fsSL https://claude.ai/install.sh | bash`. Windows PowerShell: `irm https://claude.ai/install.ps1 | iex`.
2. Python 3 installed: `python3 --version` prints Python 3. On Windows the command may be `python` or `py`; use whichever prints Python 3 wherever this pack says python3. If none works, install it from https://www.python.org/downloads/ .
3. The desk folder: they should already be inside it, because this skill runs from it. If `.claude/agents/` is missing, the unzip dropped the hidden folder: unzip again from a terminal and keep the folder whole.
4. Run `python3 scripts/check_desk.py`. Success: `OK: 10 agent files pass all checks`.
5. Expect Claude Code to ask before it edits a file in .claude/agents/: that folder is guarded. Pick "Yes, and allow Claude to edit files in this project's .claude folder for this session".
</install>

<surface>
STOP AND RE ROUTE, do not degrade, if: the human is in a chat window and pastes a file listing or a screenshot of one; the human asks an agent to place a trade, move money, change a bank detail, send a message to a client or file anything (decline that part, say a named person does it, and continue with the rest); the human wants a live custodian, CRM or trading connector attached (work from exports in data/; a connector that can write or trade breaks the rule that no agent can place or send anything, so say so and stop until it is detached or proven read only); or confidential client files are about to go in and the human has not confirmed a Team or Enterprise plan, or model training switched off.
</surface>

<ask_in_order>
Accept answers given together or out of order, read all back, ask only for what is missing.
1. What is the job today? A) set up and test the desk: prompts 02 to 06. B) the portfolio week: prompt 07. C) the client week: prompt 08. D) the compliance gate: prompt 09. E) something is breaking: prompt 11. F) see the desk: prompt 12. For B, C or D, first confirm org/decision-log.md has a `PASS prompt 06` line; if not, route to A.
2. Where does the data live? A) exports dropped into a folder under data/ B) pasted by hand C) a mix. Work from this source in every later prompt.
3. Fill org/settings.md one line at a time and read it back: firm; the named adviser approver (one person, never a team); the chief compliance officer; the as-of date; the drift band as absolute points AND the relative percent for sleeves under 20 percent of target; the de minimis trade in dollars; the tax loss floor in dollars; the tax rates. Re ask any answer missing a part, once, naming the part. Never fill a default; "5 and 25" is the common rule but it is theirs to confirm.
</ask_in_order>

<rules>
Settings are configuration, not evidence. Evidence tiers, used in every prompt: TIER 1 the primary document (custodian export or statement, signed client file). TIER 2 a keyed or exported figure (CRM, adviser spreadsheet). TIER 3 anything typed from memory or a vendor claim, which generates a question and never a number. Every load bearing figure carries its tier and source file.
Flags: each finding is CHANGES THE DECISION, WORTH A QUESTION or EXPLAINED BY CONTEXT, tested first against the looks wrong, is normal line in each agent. Only the first reaches a verdict. A flag explained by context is closed and does not come back. Items checked and normal go on one untagged line.
Precedence: arithmetic ties and a restriction in the client's own file outrank every normal list.
Ties agree to the cent. Drift is household level: all accounts together.
Blocks: a block stops the VERDICT, never the analysis. Only numbers that do not tie, a trade that breaks the client's file, a draft that breaks a rule you can quote, and an overdue filing block. A client request to move money is routed to the named adviser, never acted on by an agent. A missing document is a question. Always print what happens by default if the human does nothing: nothing is placed, sent or filed.
Stance: neutral colleague who has done this before.
Humans own: every trade placed, every transfer, anything sent to a client or regulator, every filing, every restriction and policy change. Agents propose; the named adviser approves in org/approvals.md, written by that person. Agents never write that file.
</rules>

<adapt>
Small firm: keep the Practice Captain, Drift Monitor, Trade Blotter Reviewer and Marketing Rule Reviewer first. To drop an agent, delete its file, remove it from scripts/roster.json and from the name list and the count in "Delegate only to your 9 agents" in .claude/agents/practice-captain.md, then rerun the check. To change an agent's model, tools or files, edit its file and its row in scripts/roster.json together. To add a drift rule or a restriction type, change data/policy.csv, never the script. Never edit scripts/check_desk.py to make a change pass.
</adapt>

After the answers, print a run card: the prompts to run in order, the settings, and the one thing that will stop the run. Then stop.
Click to copy
Before we trust any agent, check the two core jobs on a sample with a known answer. Work in Claude Code (the same numbers are in data/sample/) or in chat. Use only the data below. It is synthetic.

<role>Neutral portfolio operations associate. You measure one household against its model and check proposed trades against that client's own file.</role>

<sample>
Household HX, model GRO: US_EQ 50, INTL_EQ 25, BOND 20, CASH 5. Band: 5 points absolute, 25 percent of target for sleeves under 20. Policy for HX: restricted tickers ENRGX.
Prices: USEQ 100.00 (US_EQ), INTL 50.00 (INTL_EQ), BOND 25.00 (BOND), ENRGX 80.00 (US_EQ), CASH 1.00.
HX-TAX (taxable): USEQ 400, INTL 300, BOND 800, CASH 5000
HX-IRA (IRA): USEQ 540, INTL 940, BOND 640, CASH 3000
Trades proposed: TX1 HX-IRA BUY USEQ 20 at 100.00. TX2 HX-IRA BUY ENRGX 10 at 80.00. TX3 HX-IRA SELL INTL 240 at 50.00.
</sample>

<task>
Print the household drift table (target, actual, drift, band, IN or OUT, dollars) with the working. Then check each trade against the policy, the position or cash to settle, and print PASS or BLOCK.
</task>

<expected>
Expected output, with the working:
Household value = HX-TAX 80,000 + HX-IRA 120,000 = 200,000.00.
US_EQ 40,000 + 54,000 = 94,000 = 47.00 percent, drift -3.00, band 5.00, IN.
INTL_EQ 15,000 + 47,000 = 62,000 = 31.00 percent, drift +6.00, band 5.00, OUT, 12,000 to move.
BOND 20,000 + 16,000 = 36,000 = 18.00 percent, target 20, drift -2.00, band 5.00, IN.
CASH 5,000 + 3,000 = 8,000 = 4.00 percent, drift -1.00, band 25 percent of 5 = 1.25, IN.
CHANGES THE DECISION: INTL_EQ outside the band. EXPLAINED BY CONTEXT: HX-IRA holds 39.17 percent INTL while HX-TAX holds 18.75 percent, because the household is what counts; the IRA carries the exposure.
Trades: TX1 PASS (2,000 needed, 3,000 cash, USEQ not restricted). TX2 BLOCK, check 1: ENRGX is in HX's restricted tickers. TX3 PASS (240 of 940 shares held; a sale inside the IRA triggers no tax and is household rebalancing, so EXPLAINED BY CONTEXT).
</expected>

<constraints>
Compare line by line. If one figure does not match, say which and STOP, do not load real data until it matches. MATCH is judged on substance: a cleared normal pattern counts as EXPLAINED BY CONTEXT.
Then run it again with the line "Household HX, model GRO" replaced by "Household HX" (no model). The correct result is a STOP naming the missing model, no drift table, no judgement. Inferring the model from the holdings is the failure: any holdings fit some model.
<trap>Judging drift account by account. The IRA looks 14 points overweight international and the taxable account underweight; the household is 6 points over. Aggregate first.</trap>
<review_gate>Your human reads the result before any real household goes in.</review_gate>
</constraints>
Click to copy
<role>Engineer who trusts a check only after seeing it fail.</role>

<task>
In this folder: rename .claude/agents/trade-blotter-reviewer.md to trade-blotter-reviewer.md.off, run python3 scripts/check_desk.py and print the output. It must FAIL and name trade-blotter-reviewer. Rename it back, run the check again and print the output. It must say OK with 10 agents. Then print `ls .claude/agents | wc -l` (expect 10).
</task>

<checks>
What the check enforces, so the human knows what it protects: exactly 10 files matching scripts/roster.json; every file has a name equal to its file name, a quoted description, a tools line and the roster model; no agent has a network tool and tools match the roster; the Practice Captain has a bare Agent tool, names all nine agents, and holds every trade until trade-blotter-reviewer has returned PASS or BLOCK; no specialist can spawn agents or write files; every specialist has a one sentence Job line, a Files you read line with paths, a Stop and ask when rule and a Looks wrong, is normal line; every body names org/settings.md, the default if nobody acts, and "You prepare. A named human approves."; the Trade Blotter Reviewer says "Check every trade".
</checks>

<constraints>
Work from the data source chosen in prompt 01.
<trap>Putting a type list in the Captain's Agent( ). The Claude Code documentation says the list applies to the main thread only, and a bare Agent was the form tested for this layout. The guard is the "Delegate only to" sentence in the Captain's body, which the check enforces.</trap>
<stop>If the first run does not fail, the check is not reading the folder: say so and stop. If the second run fails, print the failing lines and go to prompt 11.</stop>
</constraints>
Click to copy
<role>Engineer keeping the agent files and the roster in step.</role>

<task>
Print this roster as a table from .claude/agents/*.md: agent, team, model, tools, job, files it reads, stop and ask rule (first clause). Compare it with scripts/roster.json and say any difference. Change nothing unless the human asks; for a change, edit the agent file and its roster row together, then rerun python3 scripts/check_desk.py.
</task>

<roster>
All agents run Claude Opus 5.5. R = Read, Grep, Glob. B = R plus Bash. Specialists hand their work back as text; only practice-captain writes files, inside reports/.
practice-captain | Agent, R, Write, Bash | routes requests, holds every trade for the blotter review, tests ties, briefs the named adviser, never computes, never approves
Client Service: meeting-prep-agent R | review-note-writer R | service-request-triager R
Portfolio: drift-monitor B | rebalance-checker B | tax-loss-scanner B
Compliance: marketing-rule-reviewer R | trade-blotter-reviewer B | filing-calendar-tracker R
</roster>

<constraints>
Work from the data source chosen in prompt 01. "Files you read" is an instruction in the agent's file, not an access control: Claude Code gives a subagent the tools on its tools line, and the Captain hands over only the files in that line. Say this to the human once.
<trap>Leaving tools off a file makes that agent inherit every tool, including write and network access. Every file names tools, and the check fails the desk if one is missing.</trap>
<stop>If the files and scripts/roster.json disagree and the human did not ask for a change, stop and show the difference. Do not edit the check.</stop>
</constraints>
Click to copy
<role>Operations lead mapping a custodian and CRM export to the desk's files. You are not the adviser and you approve nothing.</role>

<task>
Ask for the folder the human will use under data/ (for example data/q3/). Look at the export files they dropped there and build the desk's files from them, one at a time, showing the first three rows of each for confirmation. Same file names and columns as data/sample/:
positions.csv: date, household, account, registration, ticker, shares, price, market_value
custodian_totals.csv: household, account, total_value (from the custodian's own account total, not summed by you)
securities.csv: ticker, name, sleeve (US_EQ, INTL_EQ, BOND, CASH or your own), index_name
models.csv: model, sleeve, target_pct
policy.csv: household, model, ips_equity_min, ips_equity_max, restricted_tickers, allow_short_term_gain_sales, note
households.csv: household, account, registration, owner, drip, custodian (every account of the household, spouse and held away included)
lots.csv: lot_id, household, account, ticker, acquired, shares, basis_per_share (taxable accounts)
transactions.csv: the last 61 days across every roster account. blotter.csv: planned trades. performance.csv, crm_notes.csv, meetings.csv, service_requests.csv, filing_calendar.csv, drafts/ as in the sample.
For policy.csv, ask for each household's model, equity range and restrictions FROM THE CLIENT'S SIGNED FILE, and write the source document name in the note column. Do not draft a restriction from memory.
Write every file to disk in that folder, not into the chat, and print `ls -R` of the folder as proof. Then run python3 scripts/drift.py <folder> and show the tie lines. Do not go on until every account ties.
</task>

<constraints>
Work from the data source chosen in prompt 01. Never invent a column value; an unknown reads OPEN and is asked once. If the custodian cannot export lots or the last 61 days of transactions, say that tax loss scanning will return CANNOT CLEAR for those accounts, and carry on.
<trap>A restriction recalled from a conversation is TIER 3. A trade that passes because nobody wrote the restriction down is the failure this desk exists to prevent: ask for the document.</trap>
<review_gate>The named adviser reads policy.csv line by line and says yes before prompt 07 runs.</review_gate>
<stop>If a household has no policy row, or positions do not tie to the custodian total for any account, say which and stop there. Do not fix a tie by editing the total.</stop>
</constraints>
Click to copy
<task>
Prove the desk works end to end on the synthetic samples. If org/settings.md still has an OPEN line, STOP and run prompt 01 first.
Tell the human to open a second terminal in this folder and run:
claude --agent practice-captain
then type: Run the whole desk on data/sample/ at the as-of date in org/settings.md. Drift for every household, rebalance proposals only for households outside tolerance, tax loss candidates with the wash screen, then every trade on the blotter and every proposed trade through trade-blotter-reviewer. Prepare the meeting briefs, the review notes and the request triage, read every draft in data/sample/drafts/ and every note you wrote, and check the filing calendar. Show every handoff. Save the digest to reports/digest-sample.md.
That starts a session where the Practice Captain is the main thread and hands work to the nine agents. When it answers, the human pastes the answer back here and you check it against the pass lines.
</task>

<pass>
1. Handoffs go from practice-captain to each of the nine agents and back. The Captain does not do their work.
2. All 11 accounts tie to the custodian totals, total value 4,100,000.00.
3. Exactly two things change the decision. H05 is outside tolerance: US_EQ 58.00 against 50 (+8.00) and BOND 12.00 against 20 (-8.00), while its IPS equity range is not breached. And trade T3, H03 BUY ENRGX, is BLOCKED because ENRGX is in H03's restricted tickers, default: not placed. Rebalance trades for H05 start in the IRA, none in the taxable account, all PROPOSED.
4. The counts of trades handed to trade-blotter-reviewer and results returned are equal. T1, T2 and T4 PASS.
5. Not flagged: H01 and H02 drift (inside the band), the IRA purchase of USEQ in H04 72 days before the as-of date, the wire request routed to the named adviser, the review note quoting the client's own net return, the market note. H02 lot L05 is WASH (the spouse IRA bought INTL on 2026-09-18) and is withheld; H04 lot L10 is CLEAR and proposed.
6. Nothing is released: every draft starts DRAFT FOR ADVISER REVIEW, every proposal says PROPOSED, and org/approvals.md is unchanged.
Then the human asks the Captain to repeat the run on data/sample-clean/. Pass: nothing outside tolerance, T3 PASS, no BLOCK, no HOLD, no item that changes the decision.
On both passes, append `PASS prompt 06, <date>` to org/decision-log.md. Prompts 07 to 09 look for that line.
</pass>

<stop>If any line fails, name which one and go to prompt 11. Do not run prompt 07 on a desk that has not passed.</stop>
<trap>A chain that returns the right answer without the handoff lines may have skipped the agents: the Captain did the work itself. Handoff lines are part of the pass condition for that reason.</trap>
Click to copy
<role>Practice Captain agent. Prepare, never approve. Run this in the `claude --agent practice-captain` session.</role>

<task>
For the data folder the human names, at the as-of date in org/settings.md, run in this order and stop at the first gate that fails:
1. Tie: drift-monitor runs scripts/drift.py; every account ties to the custodian total.
2. Drift at household level; the households outside tolerance and the IPS equity range check.
3. rebalance-checker for those households only; tax-loss-scanner for every household with a taxable account.
4. trade-blotter-reviewer receives data/blotter.csv AND every trade steps 3 produced, one per line. Count handed and returned.
5. Digest: decisions, held trades with the default (not placed), proposals waiting for the named adviser with their ids, the tie table, Checked normal.
</task>

<constraints>
Work from the data source chosen in prompt 01. A household with no policy row or a failed tie is OPEN and the others still run; print which outputs the stop blocks and which still run. Run at most 3 agents at a time.
<trap>Rebalancing the account that looks off instead of the household. Selling in the taxable account to fix drift the IRA could fix hands the client a tax bill for tidiness, and a buy inside another account's 61 day window turns a harvest into a disallowed loss.</trap>
<review_gate>Nothing leaves draft. The named adviser approves each trade id in org/approvals.md before anyone goes to a trading screen.</review_gate>
<stop>If org/decision-log.md has no `PASS prompt 06` line, any account does not tie, or data/policy.csv is missing, say so and stop. Do not rebalance on a book that does not tie.</stop>
</constraints>
Click to copy
<role>Practice Captain agent. Prepare, never approve. Run this in the `claude --agent practice-captain` session.</role>

<task>
For the data folder the human names: meeting-prep-agent for every meeting in data/meetings.csv; review-note-writer for every household the human lists (or all with a performance row for the as-of date); service-request-triager for every row in data/service_requests.csv. Save each note to reports/drafts/ as DRAFT FOR ADVISER REVIEW. Then hand every draft to marketing-rule-reviewer (prompt 09) before anything is listed as ready.
Digest: requests that need a human today first, with the reason and the callback rule; then briefs; then draft notes with their marketing read; open inputs.
</task>

<constraints>
Work from the data source chosen in prompt 01. A household with no notes prints "no prior notes loaded" and no open actions. A client request that moves money or changes bank or contact details is routed to the named adviser and verified by callback to the number on file; no agent answers it, confirms it or acts on it.
<trap>A guessed family detail or goal costs more than a blank line. "Not on file" beats invented warmth, and a stale open action is "open per note of the date, confirm", never "overdue".</trap>
<review_gate>The named adviser reads every note and every reply before it leaves the firm. Meeting briefs stay internal.</review_gate>
<stop>If the performance row for a household is missing or not at the as-of date, write no performance sentence for it and ask once for the statement.</stop>
</constraints>
Click to copy
<role>Chief compliance officer's deputy, neutral, the last read. Run this in the `claude --agent practice-captain` session so the Captain can route to marketing-rule-reviewer, trade-blotter-reviewer and filing-calendar-tracker.</role>

<task>
1. marketing-rule-reviewer reads every client facing draft in the data folder's drafts/ and every note from prompt 08. For each: scope first (advertisement or not, with the reason from 17 CFR 275.206(4)-1(e)(1)), then the issues as the exact sentence, the rule paragraph and the fix. Result SEND TO ADVISER or HOLD. A hypothetical figure (model, backtest, projected, targeted) with NONE ADOPTED in org/marketing-policy.md is HOLD.
2. trade-blotter-reviewer re-runs the blotter against the client files and prints PASS or BLOCK per trade with the count handed and returned.
3. filing-calendar-tracker prints each row with days to due, status and owner at the as-of date.
4. Digest: held items first with the default, then proposals waiting for the named adviser, then the filing table.
</task>

<constraints>
Work from the data source chosen in prompt 01. Copies of drafts and reviewed finals are kept by the firm (Rule 204-2(a)(7)). Customer information in these files is covered by Regulation S-P (17 CFR 248.30): the firm's safeguards and incident response sit with the firm's CCO, not with the agents.
<trap>Treating every client document as an advertisement, or none. A one on one review of an existing client's own account that offers nothing new is generally not one; the same note with a model backtest added, or reused for a prospect, is.</trap>
<review_gate>HOLD blocks the send until the named CCO signs off on the flagged sentence in org/approvals.md.</review_gate>
<stop>A draft with a hypothetical figure and no policy reference: HOLD. Do not rewrite it into a softer claim. A filing row with no due date: OPEN, ask. Never compute a due date from memory.</stop>
</constraints>
Click to copy
<role>Independent reviewer. You did not prepare these numbers.</role>

<task>
Before the digest is released, re-derive from the TIER 1 files with python3 scripts/tie.py and scripts/drift.py, without reading the agents' working: total value from data/positions.csv against data/custodian_totals.csv; two households' drift, chosen by you; every trade in the digest against data/policy.csv restricted_tickers by grep, counting the trades listed and the trades checked; the harvest loss for each lot named (shares x (price minus basis)); the days to due for each filing row. Compare with the digest.
</task>

<constraints>
Write each figure, its source file and the arithmetic so a human can redo it by hand. Ties agree to the cent; a difference left after the working is a BREAK. This check BLOCKS: on a BREAK, or a trade in the digest that was not checked, do not release the digest. Print the break, name the figure and the two sources, and wait for a named human to record the resolution in org/decision-log.md. Display rounding is not a break when the full precision figures agree.
<trap>Do not construct an argument for why an arithmetic BREAK does not matter. That rule covers numbers that do not tie, never judgment flags, which stay under their tags.</trap>
<stop>Missing custodian total for an account: name the file, STOP that tie, run the others.</stop>
</constraints>
Click to copy
<role>Engineer debugging a multi agent folder. Symptom first, then cause, then fix, then rerun the check.</role>

<failures>
1. check_desk.py says .claude/agents is missing. Cause: the unzip dropped the hidden folder. Fix: unzip again from a terminal and keep the folder whole.
2. Claude Code cannot find an agent you just added. Cause: the agents folder did not exist when the session started. Fix: restart Claude Code in the folder.
3. Claude Code stops to ask before editing .claude/agents/. Cause: that folder is guarded in every mode that prompts. Fix: pick "Yes, and allow Claude to edit files in this project's .claude folder for this session".
4. An agent read a file it should not. Cause: "Files you read" is an instruction, not an access control. Fix: remove the file from the folder or from the handoff, and tighten the Captain's handoff list.
5. A specialist is reported not found and the Captain does the work itself. Cause: an Agent( ) type list on the Captain, or a misspelt name in its body. Fix: a bare Agent on the tools line, names equal to the file names, rerun the check and prompt 06.
6. A handoff is missing. Cause: the session was not started as the Captain. Fix: claude --agent practice-captain, rerun prompt 06.
7. Drift says STOP on a settings line. Cause: org/settings.md has OPEN. Fix: prompt 01.
8. A tie BREAK on one account. Cause: positions and the custodian total come from different dates, or a position is missing. Fix: re-export both on one date; never edit the total.
9. Tax loss scan says CANNOT CLEAR everywhere. Cause: data/transactions.csv does not cover the 61 days or an account is missing from data/households.csv. Fix: re-export, add the account.
10. Two agents agree and are both wrong. Cause: shared source and prompt. Fix: one check against the custodian file, already in the Captain's file.
</failures>

<task>
Ask the human which symptom, confirm the cause by reading the file, make the smallest fix, rerun python3 scripts/check_desk.py and prompt 06, and show both outputs.
</task>
<trap>Fixing a symptom by loosening the check. Never edit scripts/check_desk.py to make a failing desk pass.</trap>
<stop>If the cause is not in this list, say so and stop. Do not guess a fix.</stop>
Click to copy
<task>
Read .claude/agents/*.md, scripts/roster.json and, if present, the latest reports/digest-*.md. Write reports/desk.html: one self contained file, no network, no outside scripts. Show the Practice Captain at the top, the three teams beneath it, and for every agent its name, model, tools and job. Below, a table of households with drift status (IN or OUT), the trades with PASS or BLOCK, the drafts with SEND TO ADVISER or HOLD, and the filing rows. Colour an agent amber when its last run left an OPEN item and red when a BREAK, BLOCK or HOLD is unresolved. Show the agent count at the top, which must equal the files on disk. Open it in the browser when written.
</task>

<constraints>
Use only what is in the files. If the count differs from 10, show the real number and name the files that changed. Do not invent a status.
<trap>A view drawn from a template instead of from the files shows a desk that does not exist. Build it by reading the folder every time.</trap>
<stop>If .claude/agents is empty, say so and stop.</stop>
</constraints>

From a working build to an operating system.

For RIA principals, independent advisers and wealth firm COOs and CCOs: 10 ready made Claude Code agents that work as a screening checklist for drift, rebalancing, tax loss scans, trades against the client's file and Marketing Rule drafts

Path A · free

Run the build independently

The setup rail and every prompt above are free and stay free. The cost is your time, and the risk of wiring it wrong on live data.

Back to the prompts
Path B · done with you

Connect it to your operation

We would wire the team into your practice: read only exports from your custodian and CRM into the project folder, your approval steps built into the approvals log, the tie table kept where your compliance team expects it, all inside your own tenant.

Book a build call
data safety

Before you use live numbers

  • • Run last quarter's numbers first. Live data is not a test bed.
  • • Nothing here uploads to us. It runs in your own Claude account, on your own machine.
  • • A named human reviews and signs every output before it reaches a board, lender, or client.
  • • Mask account numbers and names to the minimum the task needs.
the fine print

Straight answers on ownership

Prompt set authored by consultance.ai. The agent file format follows the Claude Code documentation. Your documents and data go only to your own Claude account, in your own tenant on a Team or Enterprise plan or with training switched off, and stay on your own machine; we never see them. The agents prepare work for a named adviser to approve; they place no trade, move no money and send nothing. The sample firm and households are fictional. Rules are cited from the Code of Federal Regulations as fetched on the date in the bundle's source file; this is not legal, compliance, tax or investment advice.

Bring this workflow into your operation.

Book a build callBack to the library

Want this wired into your stack instead of running it yourself? That is our AI deal desk and finance automation service.

Newsletter

New builds, as they ship

One short note when a new build ships: what it does, who it is for, and how to run it in your own Claude.

Free. One email a week at most. Unsubscribe in one click.

More like this

Related builds

All builds
Finance and data
Finance and data

Ramp Claude Connector Setup Guide

For controllers and finance ops teams on Ramp: Claude setup steps plus 12 read only prompts for spend baseline, close readiness, accruals and flux. Replaces the manual Ramp export to Excel.

Setup guide
Finance and data
Finance and data

Claude and NetSuite Setup Guide

For controllers, CFOs and FP&A leads on NetSuite: the setup steps for Oracle's Claude connector plus 12 read only prompts for close, receivables, payables and cash.

Setup guide
Finance and data
Finance and data

QuickBooks and Claude Setup Guide

For owners, controllers and fractional CFOs on QuickBooks Online: connect Intuit's QuickBooks connector to Claude, then run 11 prompts for cash, receivables, month end, billing drafts and a tie out.

Setup guide
Get the free kitBook a call

Share with your workflow owner.

Bring the relevant team into the conversation with the build and setup guide.

Forward by email
in one line

What is RIA Back Office AI Agent Team?

RIA Back Office AI Agent Team is a finance and data build in the consultance.ai AI Build Library. For RIA principals, independent advisers and wealth firm COOs and CCOs: 10 ready made Claude Code agents that work as a screening checklist for drift, rebalancing, tax loss scans, trades against the client's file and Marketing Rule drafts. A named adviser approves anything that moves money. It fits RIA founders and principals, independent advisers, and wealth firm COOs and CCOs who want a written back office team of AI agents for meeting prep, review notes, request triage, drift, rebalancing, tax loss harvesting, trade checks, Marketing Rule review and the filing calendar, built as plain files in their own Claude Code and tested on a fictional sample before any real household goes in. Setup difficulty is Medium, with 4 plain-English steps.

What does RIA Back Office AI Agent Team do?

For RIA principals, independent advisers and wealth firm COOs and CCOs: 10 ready made Claude Code agents that work as a screening checklist for drift, rebalancing, tax loss scans, trades against the client's file and Marketing Rule drafts. A named adviser approves anything that moves money.

Who is RIA Back Office AI Agent Team for?

It fits RIA founders and principals, independent advisers, and wealth firm COOs and CCOs who want a written back office team of AI agents for meeting prep, review notes, request triage, drift, rebalancing, tax loss harvesting, trade checks, Marketing Rule review and the filing calendar, built as plain files in their own Claude Code and tested on a fictional sample before any real household goes in.

How hard is RIA Back Office AI Agent Team to set up?

Medium to set up — one guided setup instruction covering 4 plain-English steps, plus 12 ready-to-run prompts on the resource page.

How would consultance.ai build this out?

We would wire the team into your practice: read only exports from your custodian and CRM into the project folder, your approval steps built into the approvals log, the tie table kept where your compliance team expects it, all inside your own tenant.

What are the licensing terms?

Prompt set authored by consultance.ai. The agent file format follows the Claude Code documentation. Your documents and data go only to your own Claude account, in your own tenant on a Team or Enterprise plan or with training switched off, and stay on your own machine; we never see them. The agents prepare work for a named adviser to approve; they place no trade, move no money and send nothing. The sample firm and households are fictional. Rules are cited from the Code of Federal Regulations as fetched on the date in the bundle's source file; this is not legal, compliance, tax or investment advice.

Connect this build to your workflow.

Discuss how RIA Back Office AI Agent Team fits your systems, controls, and team. We define the integration, review process, and deployment requirements with you.

This build comes from our AI consulting and AI implementation practice — see the full AI in finance guide and how we work with CFO teams.

Book an audit