Agent Profiles
What agent profiles are
An agent profile is a specialist persona with:
- A dedicated system prompt defining its expertise and approach
- A tool whitelist — only the tools this agent is allowed to use
- Auto-routing keywords — phrases that automatically route messages to this agent
- An agent type — research, execution, delivery, or synthesis
- An optional memory namespace — isolated memory so this agent's context doesn't bleed into others
When you route a goal to @fin-analyst, the Financial Analyst profile's system prompt, tool whitelist, and memory context are loaded instead of the default agent.
Built-in profiles
Go to Settings → Agent Profiles to see and edit all profiles.
Research cluster
| Profile | Slug | Keywords | Best for |
|---|---|---|---|
| Web Researcher | @researcher | "research", "find", "search", "look up" | Multi-source web research with citation |
| Fact Checker | @fact-checker | "verify", "check", "confirm", "is it true" | Cross-referencing claims against sources |
| Trend Spotter | @trend-spotter | "trending", "latest", "news", "what's hot" | News monitoring, trend analysis |
Development cluster
| Profile | Slug | Keywords | Best for |
|---|---|---|---|
| Python Developer | @python-dev | "python", "script", "automate", "pandas" | Python code generation and execution |
| Node.js Developer | @node-dev | "node", "javascript", "typescript", "npm" | Node.js/TypeScript development |
| Debugger | @debugger | "debug", "error", "fix", "broken", "why is" | Root cause analysis and code fixes |
| Shell Operator | @shell-op | "shell", "bash", "command", "terminal" | System administration and shell scripts |
Data cluster
| Profile | Slug | Keywords | Best for |
|---|---|---|---|
| Financial Analyst | @fin-analyst | "stock", "market", "revenue", "valuation", "NIFTY" | Market data, financial modeling, portfolio |
| Data Analyst | @data-analyst | "data", "csv", "analyze", "statistics", "chart" | Data wrangling, statistical analysis, charts |
| Excel Builder | @excel-builder | "excel", "spreadsheet", "table", "formula" | Complex Excel files with formulas and formatting |
Content cluster
| Profile | Slug | Keywords | Best for |
|---|---|---|---|
| Report Generator | @report-gen | "report", "document", "write up", "summary" | Structured document generation |
| Summarizer | @summarizer | "summarize", "tldr", "brief", "condense" | Text condensation and executive summaries |
| Tech Writer | @tech-writer | "documentation", "readme", "guide", "explain" | Technical documentation |
| Prompt Architect | @prompt-arch | "prompt", "system prompt", "llm", "few-shot" | LLM prompt engineering |
| Task Planner | @task-planner | "plan", "breakdown", "roadmap", "steps" | Goal decomposition and project planning |
Delivery cluster
| Profile | Slug | Keywords | Best for |
|---|---|---|---|
| Publisher | @publisher | "publish", "broadcast", "tweet", "post to slack", "post to twitter", "email the team" | Multi-channel delivery (Slack / Twitter / Gmail / Telegram / Discord / WhatsApp) with audit receipts. Reads pre-approved content from a file, picks the right channel tool, writes a receipt JSON. Always preferred over single-channel reporters for new workflows. |
| Telegram Reporter | @tg-reporter | "telegram", "notify", "send to phone", "alert me" | Legacy single-channel — Telegram only. Use @publisher for new templates. |
Using profiles
Explicit routing — prefix your message with @profile-slug:
@fin-analyst What is the current P/E ratio for RELIANCE.NS?
@python-dev Write a web scraper for LinkedIn job listings
@excel-builder Create a monthly budget tracker with conditional formatting
Auto-routing — type naturally and the ModelRouter matches keywords:
"trending AI startups this week" → auto-routes to @trend-spotter
"debug this Python error: ..." → auto-routes to @debugger
"summarize this article" → auto-routes to @summarizer
Auto-routing uses both keyword matching and embedding similarity. You can see which profile was selected in the Inspector → PERSONA section.
Creating a custom profile
Go to Settings → Agent Profiles → + New Profile:
- 1Basic infoName: Legal AnalystSlug: legal-analystType: research (research / execution / delivery / synthesis)
- 2System prompt
Write the persona for this agent. This is injected at the start of every conversation routed to this profile:
You are a senior legal analyst specializing in Indian corporate law andcontract review. You identify risks, flag ambiguous clauses, and suggestprotective language. You cite relevant sections of Indian law where applicable.You are precise, cautious, and always recommend professional legal reviewfor binding decisions.Or click Generate from description to have AI Partner write the system prompt for you based on a short description.
- 3Tool whitelist
Select which tools this agent can use. For a Legal Analyst:
- ✅ web_search (for case law research)
- ✅ web_fetch (for reading legal documents)
- ✅ knowledge_search (for uploaded contracts)
- ✅ generate_word (for drafting)
- ❌ execute_python (not needed)
- ❌ stripe_* (not appropriate)
Unchecked tools are completely unavailable to this profile, even if they're enabled globally.
- 4Keywords
Add phrases that automatically trigger this profile:
contract, legal, clause, compliance, liability, GDPR, NDA, agreement,terms of service, indemnity - 5Memory namespace (optional)
Enable isolated memory so this agent's context is separate from your main agent. Useful when you want the Legal Analyst to have a separate knowledge base from the Financial Analyst.
Tool whitelists in practice
Tool whitelists are enforced at the MCP dispatcher level — not just in the prompt. Even if you ask @excel-builder to "send a Slack message", it cannot, because slack_send is not in the Excel Builder's whitelist.
This is intentional: it prevents accidentally running the wrong tool with the wrong context, and limits the blast radius of any individual profile.
Per-profile memory
When a profile has memory namespace isolation enabled, it maintains separate:
- Episodic memory entries
- Biographic facts
- Vector embeddings
This means your Financial Analyst's "Bob is our CFO" fact doesn't appear in the Legal Analyst's context, keeping each profile's knowledge domain clean.
Access a profile's memory directly:
GET /api/agent-profiles/:slug/memory
Editing built-in profiles
All built-in profiles are editable. Changes take effect immediately — no restart needed. If you break a profile, click Reset to Default to restore the original system prompt and tool whitelist.
Built-in profiles ship with the app. Your customizations are saved to your account and persist across restarts. The built-in defaults are only applied on first run or when you reset a profile.
Domain profiles (Phase 4)
Beyond the general specialists, AI Partner ships with domain-specific orchestrators + their sub-agents. The orchestrator is the entry point — it decomposes the goal and delegates to its specialists. You only need to know the orchestrators; the specialists run as sub-agents under the hood (same pattern existing @fin-analyst → @data-analyst → @excel-builder uses).
Cybersecurity cluster (Tier 1)
For authorized vulnerability assessments and pentest engagements. cybersec-pm writes a scope_authorization.txt first and refuses to delegate to the scanner without it.
| Profile | Role | Owned classes |
|---|---|---|
@cybersec-pm | Orchestrator — write authorization, delegate the full chain | security_assessment, pentest_engagement |
@cybersec-recon | Passive OSINT — subfinder, amass, httpx, dnsx, theHarvester | (sub-agent) |
@cybersec-scanner | Active scans — nmap, nuclei, nikto, sslyze, sqlmap (test mode); refuses without scope_authorization.txt | (sub-agent) |
@cybersec-analyst | Triage findings, CVSS scoring, remediation guidance | (sub-agent) |
@cybersec-reporter | Final pentest PDF + 1-page executive summary | (sub-agent) |
Trigger examples: @partner pentest staging.example.com — I own this domain and authorize testing · audit my staging cluster for vulnerabilities, authorized · do a VAPT on app.example.com
Agile / feature-delivery cluster (Tier 1)
For shipping features through to a merged-ready PR. The receipt is the PR URL — verified via gh_pr_exists. Reuses existing python-dev / node-dev / qa-tester / tech-writer profiles for implementation work.
| Profile | Role | Owned classes |
|---|---|---|
@agile-pm | Orchestrator — read repo, decompose into design → impl → tests → docs → PR | feature_implementation, deployment |
@agile-architect | Writes the ADR (Architecture Decision Record) before code | (sub-agent) |
@agile-devops | Runs tests + linters, commits + pushes, opens PR via gh pr create | (sub-agent) |
Trigger examples: @partner implement password reset for the dashboard repo, open a PR · add JWT refresh tokens to the auth module · fix the bug where login fails on Safari
Submission specialist (Tier 1)
For web-form submissions: directories, signups, applications, listings. Captures confirmation_screenshot.png as the contract receipt, with screenshot_contains vision-grounded verification.
| Profile | Role | Owned classes |
|---|---|---|
@submission-specialist | Navigate → fill → submit → capture confirmation screenshot | submission |
Trigger examples: submit AI Partner to https://theresanaiforthat.com · add my tool to these 5 AI directories · fill out the application at https://...
Inbox handler (Tier 2)
For email triage and threaded replies in the user's voice. The receipt is the Gmail message_id from a successful send, verified via email_sent.
| Profile | Role | Owned classes |
|---|---|---|
@inbox-handler | Search inbox → read thread → draft + (optionally approve) → send with correct threading | email_sent |
Trigger examples: @partner reply to all client emails from this week, keep my voice · draft an email to sarah@example.com about pushing the deadline a week
Meeting coordinator (Tier 2)
For booking meetings, finding mutual slots, sending invites. The receipt is the calendar event ID, verified via api_returns against the calendar API.
| Profile | Role | Owned classes |
|---|---|---|
@meeting-coordinator | Find slots → create event → send invite → return confirmation | booking, meeting_attended |
Trigger examples: @partner book a 30-min slot with Sarah next Tuesday morning · schedule a call with the design team for Thursday
Ops runner (Tier 2)
For deeper deployment work — Kubernetes, Helm, Terraform, cloud infra. The receipt is deploy/receipt.json + a successful smoke test (url_responds); rollback on failure.
| Profile | Role | Owned classes |
|---|---|---|
@ops-runner | Preflight (terraform plan / helm diff) → apply → smoke test → save receipt | deployment |
Trigger examples: @partner deploy the staging branch to prod · rollback the last helm release · apply the terraform plan I just generated
How any profile gets picked (4-layer routing)
Same routing applies to every profile — domain or generic — in this priority order:
- Explicit @-mention —
@cybersec-pm assess example.com(highest priority, always wins) - goal_class match —
GoalClassifier(Phase 2) decides class; profiles whosegoal_classesincludes that class become candidates - autoSelectKeywords match — keyword scan over the request text (the legacy path)
- Default fallback — generic profile (
coder/general) when nothing matches
Open any profile in the Agent Profiles panel to view and customize its prompt and tool access.