All work

OFFBEND2026 – Present

Oppie

OFFBEND's company agent layer. It started as a Slack accountability bot for five co-founders and grew into a governed agent platform: intent routing, risk-tiered policy, approval gates, typed memory, and multiplayer code sessions in isolated sandboxes.

Role
Lead engineer
Stack
TypeScriptLangGraphCloudflare WorkersDurable ObjectsModalNeon PostgresVercelSlack

Why

Small teams don't need more tools. They need something that can pick up work across the tools they already have. The goal for Oppie is to act like a teammate: say “I can take this,” work in the open, use the right tools, ask before doing anything risky, and hand back a result someone can verify.

The design principle is broad awareness and narrow hands. Oppie can read and reason across the company, but every action it takes has a named human behind it, a permission boundary, and an audit trail.

commits since April 2026
500+
lines of TypeScript
~60k
specialist agents
11
company tool connectors
15

Architecture

SurfacesWeb consoleSlackDispatchCronWebhooks
GatewayCloudflare edge routerVercel API
Router and policyIntent routingRisk tiersApproval gate
Specialist agentscoderesearchopsrevenuefinancecomms+5
ExecutionTool connectorsModal sandboxesResearch sources
RecordAudit ledgerTyped memoryArtifacts

Oppie owns identity, memory, policy, routing, approvals, and audit. Specialist agents own execution. Simple flows stay on a lightweight tool loop. Workflows with real state, like multi-pass PR review, are explicit LangGraph state machines with a Postgres checkpointer, so they can pause for a human and resume.

Governance

Every tool declares a risk tier, and every agent has a maximum tier it can reach. The policy engine decides before a tool runs, not after. Anything that writes to the outside world waits for approval, and the approval renders the same way in Slack, the web console, or Dispatch. The demo below runs the same decision logic as the real policy gate.

Policy gate
Agent
Tool
read
draft
propose
autonomous_write
▲ write_with_approval
restricted
Bright tiers are within code's max risk. The marker is the tool's tier.
Waiting for approval{ status: "waiting_approval", reason: "code.session.start requires approval" }
lib/agent/policy.ts
export function decideToolUse(
  tool: AgentTool,
  agent: AgentKind,
  run: AgentRunInput,
): PolicyDecision {
  if (!tool.agentKinds.includes(agent))
    return deny(`${tool.name} is not available to ${agent}`)

  if (riskGt(tool.risk, maxRiskForAgent(agent)))
    return needsApproval(`${tool.name} exceeds ${agent} max risk`)

  if (tool.risk === 'restricted')
    return needsApproval(`${tool.name} is restricted`)

  if (requiresApproval(tool.risk) && run.approvalMode !== 'granted')
    return needsApproval(`${tool.name} requires approval`)

  return allow()
}

Identity says who's asking, not what they're allowed to see. So connectors prefer delegated auth: Oppie queries Notion, GitHub, or Google Workspace with the acting user's own token, and the provider enforces that person's visibility.

Code sessions

The code agent is modeled on Ramp's Inspect. From one plain-English prompt, Oppie starts an isolated sandbox from a prepared repository snapshot, runs an OpenCode server inside it, and streams every event to everyone in the session.

YouAPISessionSandboxGitHub
prompt
session token
connect
start from snapshot
live events
stream
draft PR
  • Multiplayer by defaultEach session is a SQLite-backed Durable Object with replayable history, presence, queued prompts, and hibernating WebSockets.
  • Fast startsRepositories are prebuilt as snapshots on a schedule, and a warm pool of sandboxes is always ready.
  • Real artifactsSessions produce preview links, screenshots, logs, diffs, and a hosted VS Code.
  • Honest authorshipPRs open under the requesting user's GitHub identity, so no one can approve their own agent-authored change.
Code session safety defaults
{
  "mode": "draft_pr_only",
  "safety": {
    "canMerge": false,
    "canDeploy": false,
    "canAccessProductionSecrets": false,
    "blockWritesUntilSynced": true
  }
}
NextSides
OFFBEND signal received.