Skip to content

BKR Agent

The BKR Agent (bkr-claude-managed-agent) is the core of the Mansa system. It runs four agents on Anthropic Claude Managed Agents. The agents run directly on Anthropic’s servers. Credentials and configuration are managed through the Claude Console.

The orchestrating agent. Mansa starts every workflow run, decides what needs doing, delegates work to the right worker agents, collects their output, and produces the digest email. It holds the system’s state for the duration of a session.

Responsibilities:

  • Pull and triage the day’s emails
  • Spawn Email Processor subagents in parallel batches of up to 15, with up to 25 processors per session across multiple rounds
  • Collect results and handle partial failures via the handover mechanism
  • Write the daily digest and send it to the BKR Capital team
  • Log each processed email to Azure SQL for auditability and as a backup to Attio

Processes one or more emails per instance. Mansa may group similar emails and assign them to a single processor. Multiple instances run in parallel during the daily workflow.

Per-email workflow:

  1. Read the full email body and attachments
  2. Consult the rubric to decide whether this is a relevant lead
  3. If relevant: deduplicate against Attio, extract structured data, create/update Attio records, and draft a reply requesting a pitch deck if one was not included
  4. If not relevant: label as ai-misc and skip
  5. Label the processed email as ai-processed so it won’t be reprocessed

Parallel execution: Up to 15 processors run concurrently per round. A session can span multiple rounds, with up to 25 processors total. Mansa decides the grouping and batch size each round.

Triggered by an Attio webhook when a Deal Intro meeting is logged. Reads the meeting notes from Attio, extracts every decision with its reasoning, updates pipeline stages, assigns tasks to team members, and sends the recap email.

Runs weekly. Reads each agent’s patterns.md memory file and produces a compacted version. It consolidates raw incident logs into structured sections, removes lead-specific data, collapses duplicates, and drops resolved one-offs.

Skills are reusable tool definitions uploaded to the Claude Console and called by agents at runtime. All agent-to-service communication goes through skills. There are no direct SDK calls to external services from within the agent runtime.

Skill Agents That Use It What It Does
email-actions Email Processor Read, list, label, mark-read
admin-email-actions Mansa Search, create reply drafts
draft-email Email Processor Create a reply draft for a specific message
send-email Mansa, Meeting Agent Send emails (digest, recap)
retrieve-google-slides-deck Email Processor Fetch and extract text from a Google Slides URL
download-attachment Email Processor Download email attachments (PDFs, decks)
analytics-db Mansa Check if an email has already been processed (check-duplicate); log run results to Azure SQL (log-run)

See Update a Skill for how to modify skill files.

Email API keys and Attio OAuth credentials (client ID, client secret, refresh token) are stored in Anthropic’s Credential Vaults. At runtime, Anthropic obtains an access token and facilitates authenticated calls on the agent’s behalf. Agents never see the actual secrets. They receive opaque placeholders at runtime, and Anthropic facilitates the authenticated call on their behalf. No credentials appear in session logs, memory stores, or context windows.

Each agent has a dedicated memory store in the Claude Console containing a patterns.md file. Agents read this file at the start of every session.

What gets stored:

  • Classification edge cases and how to handle them
  • Attio field observations (which fields exist, which are reliably populated)
  • Failure patterns and recovery approaches
  • Coordinator-level lessons about workflow orchestration

Format: Structured Markdown log entries. Each entry describes an incident: what happened, what the agent concluded, and what to do differently. The Dreamer consolidates these logs into cleaner structured sections on a weekly basis.

See Update Agent Memory for how to review and edit memory files.

In addition to per-agent memory, the system maintains two categories of shared memory stores:

  • Rubrics (Rubrics - Mansa, Rubrics - Mansa Meeting): guides for agent self-evaluation. See Update the Rubric.
  • Context Files (Context Files): contains about_bkr_capital.md. See Update Context Files.

If a daily run doesn’t finish processing all emails (due to time limits or transient errors), Mansa writes a handover.md file listing what remains. The next scheduled run reads this file and picks up where the previous one left off.

Two idempotent scripts in setup/ provision every Anthropic resource:

  • agents.py: creates and updates agent definitions (model, system instruction, memory stores, tool access)
  • skills.py: creates and updates skill definitions with current tool schemas

Both scripts are safe to re-run at any time. They use upsert semantics, creating resources that don’t exist and updating those that do.

Mansa (the coordinator) uses the Azure SQL database for two purposes: checking whether an email has already been processed before delegating it, and logging one record per processed email after the run completes. These logs serve as an audit trail and as a backup to Attio. If a record is missing or incorrect in Attio, the database holds the ground truth for what was processed and when. The Email Processor does not write to the database directly. It returns results to Mansa, which does all reads and writes. Access goes through a dedicated Azure Function API called as a skill. There is no direct database connection in the agent runtime.

What gets logged:

Field Description
id Auto-incrementing primary key
timestamp When the record was written
agent_id ID of the agent that processed the email
email_id Microsoft Graph message ID
email_classification Classification result: relevant or irrelevant
attio_entry_id Attio pipeline entry ID, if one was created
pipeline_status Pipeline stage assigned in Attio
status Processing outcome
recommendation Agent’s recommendation for the deal
additional_notes Any extra context the agent recorded
company_name Company name extracted from the email
agent_status Completion state of the agent run (default: done)
failure_reason Populated if the agent encountered an error
email_draft_link Link to the reply draft created in Outlook, if any