| Category | Features | Priority |
|---|---|---|
| Core Infrastructure | 8 features | P0 (Foundation) |
| Agent System | 12 features | P0 (Core) |
| Tool System | 14 features | P1 (Essential) |
| Real-time | 6 features | P1 (Essential) |
| Workers | 6 features | P2 (Enhancement) |
| Integrations | 10 features | P2 (Enhancement) |
| Billing | 8 features | P3 (Monetization) |
| Frontend | 12 features | P1 (User-facing) |
Total: 76 distinct features
Description: PostgreSQL database with TypeORM ORM Scope:
- Database connection configuration
- Environment variable handling (PGHOST, PGPORT, etc.)
- SSL support toggle
- Auto-sync in development mode
Entities Required:
- Organization
- OrganizationMember
- Workspace
- WorkspaceTool
- Agent
- Message
- ToolCall
- WorkerDefinition
- WorkerDefinitionTool
- Tool
- IntegrationProvider
- IntegrationConnection
- SlackUserMapping
Description: Multi-tenant organization management Fields:
id- Primary keyworkosOrganizationId- External auth ID (unique, indexed)name- Organization namestripeCustomerId- Stripe customer referencestripeSubscriptionId- Subscription referencesubscriptionTier- FREE | PAID | ENTERPRISEsubscriptionStatus- ACTIVE | CANCELED | PAST_DUE | INCOMPLETEcancelAtPeriodEnd- Boolean flagtokenCostUsedMicrodollars- Usage countertokenCostLimitMicrodollars- Usage limitsandboxTimeUsedSeconds- Sandbox usagesandboxTimeLimitSeconds- Sandbox limitbillingPeriodStart- DatebillingPeriodEnd- DatecreatedAt,updatedAt- Timestamps
Description: Container for agent sessions linked to repositories Fields:
id- Primary keyname- Workspace nameorganizationId- Foreign keygithubRepositoryName- Repository referenceworkerId- Optional worker template linkcurrentBranch- Git branch (indexed)slackChannelId- Optional Slack integrationslackMessageTs- Slack message timestampcreatedAt- Timestamp
Relations:
- Many-to-One: Organization
- One-to-Many: Agent, WorkspaceTool
Description: WorkOS-based SSO/OAuth authentication Components:
- WorkOS SDK integration
- OAuth callback handler
- Session cookie management (
wos-session) - Organization context loading
- Protected route middleware
Environment Variables:
WORKOS_API_KEYWORKOS_CLIENT_IDWORKOS_COOKIE_PASSWORDWORKOS_REDIRECT_URI
Description: Type-safe RPC API layer Components:
- tRPC router configuration
- Context creation with auth
- Protected procedure middleware
- Error handling (TRPCError)
- Input validation with Zod
Routers:
workspace- Workspace operationsworkers- Worker managementintegrations- Integration connectionsorganization- Org settingspayment- Billing operations
Description: Default data population on startup Seed Items:
- Default integration providers (GitHub, PostHog, Cursor, Jules, Slack)
- Default tools catalog
- System configuration
Description: Centralized environment variable management Categories:
- Database (PGHOST, PGPORT, PGUSER, PGPASSWORD, PGDATABASE, PGSSL)
- Auth (WORKOS_*)
- LLM (OPENAI_API_KEY)
- Analytics (POSTHOG_API_KEY)
- Payments (STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET)
- GitHub (GITHUB_APP_ID, GITHUB_PRIVATE_KEY, GITHUB_WEBHOOK_SECRET)
Description: Sensitive data encryption for integration credentials Implementation:
setDataConfig()- Encrypt and storegetDataConfig()- Decrypt and retrieve- JSONB storage format
Description: AI execution instance data model Fields:
id- Primary keyworkspaceId- Foreign keystatus- PENDING | RUNNING | COMPLETED | FAILEDproviderType- | CURSOR | JULESconversationId- Provider conversation IDurl- Agent URLgithubBranchName- Created branchname- Agent namemodel- LLM model usedsandboxId- Sandbox instance IDisOrchestratorAgent- Boolean flagcreatedAt,updatedAt- Timestamps
Description: Agent state machine management States:
PENDING → RUNNING → COMPLETED
↓
FAILED
Functions:
markAgentComplete(agentId)markAgentFailed(agentId, error)getAgentStatus(agentId)
Description: Conversation history storage Fields:
id- Primary keyagentId- Foreign keycontent- Message textsender- USER | AGENTimages- Array of {data, mimeType}promptTokens,completionTokens,totalTokens- Token trackingcostMicrodollars- Cost trackingerror- Optional error messagemodel- LLM modelsandboxDurationMs- Execution timecreatedAt- Timestamp
Description: Tool execution tracking Fields:
id- Primary keyagentId- Foreign keymessageId- Foreign keytoolName- Tool identifier (indexed)arguments- JSON inputresult- Execution resultstatus- success | errorcreatedAt- Timestamp
Description: Abstract interface for agent backends Methods:
interface CloudProvider {
createAgent(params): Promise<Agent>
getMessages(agent): Promise<ProviderMessage[]>
sendMessage(agent, message, images): Promise<boolean>
}Description: Built-in agent provider with full sandbox control Features:
- Internal workflow execution
- Token tracking and cost calculation
- SSE streaming support
- Database persistence
- Sandbox management
Description: External Cursor AI integration Endpoints:
POST https://api.cursor.com/v0/agents- Create agentGET /messages- Get historyPOST /followup- Send message
Auth: Basic auth with API key (Base64 encoded)
Description: External Jules AI integration Similar to Cursor provider with Jules-specific API
Description: Main execution workflow for coding agents Steps:
- Load agent from DB
- Validate and get GitHub token
- Create sandbox environment
- Load conversation history
- Create branch if first run
- Run LLM with tools
- Save response and track tokens
- Commit changes if any
- Cleanup sandbox
- Mark complete
Description: Multi-agent coordination workflow Differences from Standard:
- Uses "high" reasoning effort
- Has
spawn_sub_agenttool - Extracts images from history
- Returns reasoning logs
Description: Modular workflow steps Functions:
loadAgent(agentId)validateAndGetToken(repoName)prepareSandbox(agentId, repo, token)loadPreviousMessages(agentId)createBranchIfNeeded(agent, sandbox)saveAgentResponse(agentId, text, usage)commitChangesIfNeeded(sandbox, agent, prompt)cleanupSandbox(sandbox)
Description: System prompts for different agent types Prompts:
AGENT_SYSTEM_PROMPT- Standard coding agentORCHESTRATOR_AGENT_SYSTEM_PROMPT- Multi-agent coordinator
Description: Tool catalog data model Fields:
id- Primary keydisplayName- Human-readable nameslugName- Unique identifier (e.g., "posthog/errors")isModel- Boolean (model config vs tool)providerId- Optional integration provider link
Unique Constraint: [displayName, provider, slugName]
Description: Runtime tool collection assembly
Function: buildDynamicTools(agentId, toolSlugs, sandbox)
Logic:
- Parse tool slugs
- Load matching tool builders
- Merge into single collection
Description: List files in repository
Input: { relativePath: string }
Execution: ls -la {path}
Description: Read file contents
Input: { relativeFilePath: string }
Execution: cat {path}
Description: Write/overwrite file
Input: { relativeFilePath: string, content: string }
Execution: File write operation
Description: Search in files
Input: { command: string }
Execution: Bash grep command
Description: List recent commits
Input: { commitLimit: number (1-10, default 5) }
Execution: git log -n {limit} --pretty=format:'%H - %an, %ad : %s' --date=iso
Description: Show commit diff
Input: { commitSha: string }
Execution: git show {sha}
Slug: posthog/query_runner
Tools:
query_run- Execute HogQL queryquery_generate_hogql_from_question- Natural language to HogQLdocs_search- Search documentation
Slug: posthog/insights
Tools:
insight_create_from_queryinsight_deleteinsight_getinsight_queryinsight_updateinsights_get_all
Slug: posthog/errors
Tools:
error_details- Get error detailslist_errors- List recent errors
Slug: posthog/documentation
Tools:
docs_search- Search PostHog docs
Description: Create sub-agent for task delegation
Input: { prompt: string }
Execution: Creates new agent via PrismProvider
Returns: New agent ID
Description: Hierarchical tool identification
Format: {provider}/{tool-name}
Examples:
posthog/errorsgithub/commitssandbox/files
Description: Isolated code execution environment Capabilities:
- File operations (read, write, list)
- Command execution (bash)
- Git operations (clone, branch, commit)
- Ephemeral containers
Description: Create, use, cleanup sandbox Functions:
prepareSandbox(agentId, repo, token)- InitializecleanupSandbox(sandbox)- Destroy
Description: Track sandbox execution time Functions:
canUseSandbox(orgId)- Check availabilityincrementSandboxTimeSeconds(orgId, seconds)- Record usage
Description: Automatic feature branch creation
Format: prism/{agent-id}-{sanitized-prompt}
Function: createBranchIfNeeded(agent, sandbox)
Description: Commit file changes after agent work
Function: commitChangesIfNeeded(sandbox, agent, prompt)
Logic:
- Detect file changes
- Generate commit message from prompt (truncated to 50 chars)
- Git commit
Description: Run bash commands in sandbox
Method: sandbox.runCommand({ cmd, args })
Returns: { stdout(), stderr() }
Description: Event data structures Types:
type AgentEventPayload = {
type: 'status' | 'error' | 'done' | string;
phase?: string;
step?: string;
detail?: string;
code?: string;
reason?: string;
}Description: Event wrapper with metadata Fields:
id- Auto-incrementing per agenttimestamp- Event timepayload- Event data
Description: Per-agent event storage Structure:
Map<agentId, {
events: AgentEventEnvelope[] // Max 500
listeners: Set<Function>
lastActivity: Date
}>Cleanup: 60-second interval, 5-minute inactivity threshold
Description: Emit events to listeners Functions:
publishAgentEvent(agentId, payload)emitStatus(agentId, phase, step, detail?, metadata?)emitError(agentId, code, message)emitDone(agentId, reason)
Description: Server-Sent Events HTTP endpoint
Route: GET /sse/agent/:agentId
Features:
- Event stream headers
- Last-event-id resumption
- Backlog replay
- Disconnect handling
Description: Stream LLM reasoning to client
Function: createReasoningStreamer(agentId)
Emits: Status events with reasoning text
Description: Reusable agent template Fields:
id- Primary keyslug- Unique per orgprompt- Custom system promptorganizationId- Foreign keykey- Webhook auth keycloudProviders- Array of provider configscreatedAt- Timestamp
Description: Worker-to-tool association Fields:
id- Primary keyworkerDefinitionId- Foreign keytoolId- Foreign key
Description: Worker CRUD operations Procedures:
workers.list()- List org workersworkers.create({ slug, prompt, toolSlugs, cloudProviders, key })workers.update({ id, ... })workers.delete({ id })
Description: Unique slug per organization Validation: Check slug doesn't exist for org
Description: Link tools to worker definitions Logic:
- On create: Create WorkerDefinitionTool records
- On update: Delete old, create new
Description: Multi-provider support per worker Schema:
{
provider: 'prism' | 'cursor' | 'jules',
model?: string
}[]Description: Process GitHub events
Route: POST /webhooks/github/events
Trigger: Issue comments containing --prism
Features:
- HMAC-SHA256 signature verification
- Worker slug extraction
- Workspace creation
Description: Process PostHog error events
Route: POST /webhooks/posthog/issue
Auth: Worker slug + key validation
Action: Create workspace with error context
Description: Update agent status from Cursor
Route: POST /webhooks/cursor/complete/:agentId
Input: { status: 'FINISHED' | 'FAILED' }
Description: Process Stripe payment events
Route: POST /webhooks/stripe
Events:
invoice.paid- Reset usagecustomer.subscription.updated- Tier changecustomer.subscription.deleted- Cancellation
Description: Validate webhook authenticity Implementation:
const expected = 'sha256=' + crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex');Description: Automated workspace + agent creation
Function: createWorkspaceFromWebhook(params)
Steps:
- Find worker definition
- Create workspace
- Associate tools
- Create agent
Description: Available integration types Fields:
id- Primary keyslug- Unique identifierdisplayName- Human-readable namelogoUrl- Icon URL
Description: User's connected integrations Fields:
id- Primary keyorganizationId- Foreign keyproviderId- Foreign keyexternalId- External service IDdata- Encrypted JSONB configcreatedAt,updatedAt- Timestamps
Description: Integration management API Procedures:
integrations.list()- List with connection statusintegrations.connect({ providerSlug, data })integrations.disconnect({ id })integrations.repositories()- GitHub reposintegrations.branches({ repositoryFullName })- Repo branches
Description: GitHub repository access Features:
- OAuth installation flow
- Installation token retrieval
- Repository listing
- Branch listing
- Webhook events
Description: GitHub token management
Function: getGithubTokenForUser(organizationId)
Steps:
- Find integration connection
- Get installation ID from encrypted config
- Get installation token
Description: Analytics and error tracking Storage: API key in encrypted data Tools: Query runner, insights, errors, documentation
Description: External Cursor AI agent Auth: API key (Basic auth) Features: Agent creation, message retrieval
Description: External Jules AI agent Similar to Cursor integration
Description: Team notifications Features:
- User mapping (SlackUserMapping entity)
- Channel notifications
- Message threading
Description: Secure credential storage Methods:
setDataConfig(input)- Encrypt and savegetDataConfig()- Decrypt and return
Description: AI SDK configuration Model: GPT-5-mini (or configurable) Features:
- Reasoning mode support
- Tool calling
- Token tracking
Description: Track token consumption Structure:
{
promptTokens: number
completionTokens: number
totalTokens: number
}Description: Run LLM for standard agents
Function: runAgentLLM(agentId, sandbox, toolSlugs, messages, usage)
Config:
- Reasoning effort: "medium"
- Max steps: 32
Description: Run LLM for orchestrator agents
Function: runOrchestratorAgentLLM(...)
Config:
- Reasoning effort: "high"
- Includes spawn_sub_agent tool
- Returns reasoning logs
Description: LLM call observability Integration: PostHog SDK Tracks: Calls, tokens, latency
Description: Convert tokens to cost Formula:
const COST_PER_1K_TOKENS = 0.01; // $0.01 per 1K
const costMicrodollars = Math.round(totalTokens * COST_PER_1K_TOKENS * 1000);Description: Plan configuration Tiers:
| Tier | Token Limit | Sandbox | Price |
|---|---|---|---|
| FREE | $5 | 2 hrs | $0/mo |
| PAID | $20 | 24 hrs | $20/mo |
| ENTERPRISE | Unlimited | Unlimited | Custom |
Description: Track token cost usage Functions:
canSendMessage(orgId)- Check limitincrementTokenCostMicrodollars(orgId, amount)
Description: Track sandbox time usage Functions:
canUseSandbox(orgId)- Check limitincrementSandboxTimeSeconds(orgId, seconds)
Description: Monthly billing cycle
Function: resetBillingPeriodIfNeeded(org)
Logic: Auto-reset for free tier, Stripe webhook for paid
Description: Get usage statistics
Function: getUsageStats(orgId)
Returns:
{
tokenCostPercentage: number
sandboxTimePercentage: number
billingPeriodStart: Date
billingPeriodEnd: Date
}Description: Customer creation and management Operations:
- Create customer on signup
- Link to organization
Description: Handle subscriptions Operations:
- Create subscription
- Update tier
- Cancel subscription
Description: Billing API endpoints Procedures:
payment.getPlans()- List available planspayment.createCheckout()- Start subscriptionpayment.cancelSubscription()- Cancelpayment.getUsage()- Current usage
Path: /
Features:
- Recent workspaces list
- Quick actions
- Usage summary
Path: /login
Features:
- WorkOS OAuth redirect
- Session handling
Path: /workspace/:id
Features:
- Agent chat interface
- Message display
- Tool call visualization
- SSE connection for real-time updates
- Send message input
Path: /workers
Features:
- Worker list
- Create worker form
- Edit worker
- Delete worker
Path: /integrations
Features:
- Available integrations list
- Connected status
- Connect/disconnect buttons
- OAuth flows
Path: /usage
Features:
- Token usage chart
- Sandbox time chart
- Billing period info
- Upgrade CTA
Path: /organization
Features:
- Org name editing
- Member management
- Subscription info
Description: Navigation sidebar Features:
- Page links
- Workspace list
- Current org display
Description: Chat message rendering Features:
- User vs agent styling
- Markdown rendering
- Image display
- Timestamp
Description: Show tool executions Features:
- Tool name
- Arguments display
- Result/error display
- Collapsible details
Description: Real-time event subscription Features:
- EventSource connection
- Reconnection logic
- Last-event-id resumption
- Event handling
Description: Frontend API client Code:
export const trpc = createTRPCReact<AppRouter>();| ID | Feature | Complexity |
|---|---|---|
| F1.1 | Database Setup | Medium |
| F1.2 | Organization Entity | Low |
| F1.3 | Workspace Entity | Low |
| F1.4 | Authentication System | High |
| F1.5 | tRPC API Setup | Medium |
| F2.1 | Agent Entity | Low |
| F2.2 | Agent Status Lifecycle | Low |
| F2.3 | Message Entity | Low |
| ID | Feature | Complexity |
|---|---|---|
| F2.5 | CloudProvider Interface | Medium |
| F2.6 | Prism Provider | High |
| F2.9 | Standard Agent Workflow | High |
| F4.1 | Vercel Sandbox Integration | High |
| F5.5 | SSE Endpoint | Medium |
| F9.1 | OpenAI SDK Setup | Medium |
| F11.3 | Workspace Page | High |
| ID | Feature | Complexity |
|---|---|---|
| F3.3-F3.6 | Sandbox Tools | Medium |
| F3.7-F3.8 | GitHub Tools | Low |
| F3.13 | spawn_sub_agent | Medium |
| F5.1-F5.4 | Event System | Medium |
| F8.4 | GitHub App Integration | High |
| ID | Feature | Complexity |
|---|---|---|
| F6.1-F6.6 | Workers System | Medium |
| F7.1-F7.6 | Webhooks | Medium |
| F3.9-F3.12 | PostHog Tools | Medium |
| F2.7-F2.8 | Cursor/Jules Providers | Medium |
| ID | Feature | Complexity |
|---|---|---|
| F10.1-F10.8 | Billing System | High |
| F8.9 | Slack Integration | Medium |
F1.1 (Database) ─┬─→ F1.2 (Organization)
├─→ F1.3 (Workspace)
├─→ F2.1 (Agent)
└─→ F2.3 (Message)
F1.4 (Auth) ────→ F1.5 (tRPC) ────→ All API Features
F4.1 (Sandbox) ──┬─→ F3.3-F3.6 (Sandbox Tools)
└─→ F2.9 (Agent Workflow)
F2.5 (Provider Interface) ─┬─→ F2.6 (Prism Provider)
├─→ F2.7 (Cursor Provider)
└─→ F2.8 (Jules Provider)
F5.1-F5.4 (Events) ────→ F5.5 (SSE) ────→ F11.11 (SSE Client)
F6.1 (Workers) ────→ F7.1-F7.2 (Webhooks)
Total: 76 features across 11 categories