Accomplish

Accomplish is a local-first AI desktop agent (Electron app) for macOS and Windows. It automates file management, document creation, and browser tasks — all on-device, with nothing sent to external servers. Under the hood it spawns OpenCode via node-pty and supports any major LLM provider through a BYOK model.

As Accomplish’s browser automation and service integration capabilities grow, its agents increasingly need their own identity rather than borrowed user credentials. That’s where Ravi comes in.

Why Ravi

Isolated API Key Vault

Accomplish is explicit about BYOK — you supply your own Anthropic, OpenAI, or other provider keys. But autonomous agents shouldn’t inherit a human’s personal API credentials. Ravi’s secrets store gives each Accomplish instance its own isolated vault: keys scoped per agent, not per human. If an agent is compromised or decommissioned, you revoke one identity — not your personal account.

Email Identity for Service Signups

Browser automation is core to Accomplish. The moment it fills forms or registers for services (Notion, Google Drive, Dropbox), it needs an email address. Ravi provisions a dedicated agent email identity so Accomplish registers as accomplish-agent@... rather than piggybacking on the user’s inbox. Your inbox stays clean; the agent’s signups are isolated and auditable.

Phone Verification

Many services Accomplish integrates with require SMS verification during signup. Ravi’s provisioned phone numbers let Accomplish complete these flows autonomously — no human handoff needed.

Credential Storage After Signup

After Accomplish autonomously creates accounts or obtains OAuth tokens, those credentials need a structured home. Ravi’s password vault (domain + username + encrypted password) gives the agent a proper credential store it can read back on next run — no re-authenticating every session.

Setup Guide

1. Create a Ravi identity for your Accomplish agent

# Via Ravi identity tools
ravi_identity_create --name "Accomplish Agent"

This provisions a dedicated email address, phone number, and secrets vault for the agent.

2. Store your LLM API keys in the Ravi vault

Instead of pasting keys directly into Accomplish’s settings UI, store them in Ravi’s secrets store:

ravi_secrets_set ANTHROPIC_API_KEY sk-ant-...
ravi_secrets_set OPENAI_API_KEY sk-...

Your Accomplish agent retrieves them at runtime via ravi_secrets_get. If you rotate a key, update it in one place.

3. Use the provisioned email for service signups

When Accomplish’s browser automation registers for a new service, configure it to use the Ravi-provisioned email address retrieved from ravi_get_info. This keeps all agent-initiated signups isolated from your personal accounts.

4. Handle phone verification automatically

For services requiring SMS verification, Accomplish can use the Ravi phone number. After triggering the verification flow, poll ravi_inbox_sms to retrieve the OTP and complete the signup autonomously.

5. Store post-signup credentials

After Accomplish creates an account or obtains an API key, persist it:

ravi_passwords_create --domain service.com --username accomplish-agent@... --password <obtained-password>

On subsequent runs, Accomplish calls ravi_passwords_get instead of prompting the user or re-authenticating.

Integration Pattern: Identity Bootstrap

The cleanest pattern is an Identity Bootstrap on first run:

  1. Accomplish calls ravi_get_info to retrieve its provisioned email and phone
  2. It stores that email as the default for all service registrations in the current workspace
  3. API keys go into ravi_secrets_set — fetched at runtime, never hardcoded
  4. Every account created gets a ravi_passwords_create entry for persistence

This makes the Accomplish agent a first-class identity holder — not a proxy for the human’s credentials. Each Accomplish workspace becomes its own Ravi identity consumer, with a clean audit trail of what the agent signed up for and what credentials it holds.