assistant (kcosr)

What It Is

assistant is a self-hosted personal AI assistant with a panel-based UI and plugin system. It runs a Node.js backend with a browser client and orchestrates multiple AI agents — Claude Code, Codex, and Pi — as subprocess agents sharing a common workspace of notes, lists, and task panels.

The architecture is built for serious agent use: scheduled cron sessions trigger CLI runs, plugins expose both operations and CLI skill binaries that agents can call directly, and external agents push results back via HTTP callbacks. MCP over stdio attaches tool servers to any session, making it straightforward to extend any agent’s capabilities without per-agent custom code.

The Identity Problem

Sessions in assistant are well-managed, but agent identity is assumed to be the human’s. Agents that interact with external services — sending emails, accessing APIs, completing verifications — share or borrow the human operator’s credentials. As agent autonomy increases, that assumption breaks down.

How Ravi Integrates

Credential Injection via MCP

assistant supports MCP servers over stdio. A Ravi MCP server exposing passwords_get and secrets_get lets any agent session pull credentials on demand — no secrets in config files, no credential sharing between agents, no manual rotation when keys change.

Drop @ravi/mcp-server into the mcpServers config. Every agent session (Claude, Codex, Pi) gets access to Ravi’s identity vault through the same MCP layer, with no per-agent custom code required.

{
  "mcpServers": {
    "ravi": {
      "command": "npx",
      "args": ["@ravi/mcp-server", "--stdio"]
    }
  }
}

Email-to-Agent Triggers

assistant supports external agents pushing results via REST callbacks. Ravi’s inbox webhook → assistant callback URL means inbound email can drive agent sessions directly, with no human relay. An agent that receives an email, acts on it, and replies — all unattended — is a first-class assistant workflow once Ravi is in the loop.

SMS/OTP for Autonomous Verification

Scheduled sessions that encounter 2FA gates don’t need to block. Configure Ravi as the receiving phone number for the service. The agent calls ravi_read_sms, extracts the OTP, and continues unattended. No human in the loop, no session timeout waiting for a code.

Identity Per Persona

assistant plugins interact with external services on behalf of the user. When different plugins (or different scheduled sessions) need distinct identities — separate email addresses, separate phone numbers, separate credential stores — ravi_identity_create provisions a full identity bundle per persona. Each plugin or agent role gets its own accountable identity without manual provisioning.

Setup

  1. Install the Ravi MCP server (once available as @ravi/mcp-server) or use the Ravi API directly from a custom plugin.

  2. Add to assistant’s MCP config to make Ravi tools available to all agent sessions.

  3. Provision identities for each agent role or plugin that needs external service access:

    ravi_identity_create({ name: "assistant-notes-agent" })
  4. Wire Ravi inbox webhooks to assistant’s external-agents callback endpoint for email-triggered sessions.

  5. Use ravi_read_sms in any plugin that needs to handle 2FA flows automatically.

Why Ravi

assistant is already solving the multi-agent coordination problem well. Ravi fills the gap it leaves: the identity layer. Agents in assistant can be productive without Ravi, but they can’t be accountable — they can’t send email as themselves, verify phone numbers as themselves, or hold credentials as themselves. Ravi makes every agent in assistant a first-class identity, not a session running under the human operator’s name.