omi-plugin-development
Omi Plugin Development Skill
This skill provides guidance for developing Omi plugins/apps, including webhook patterns, chat tools, and OAuth flows.
When to Use
Use this skill when:
- Creating new Omi plugins/apps
- Implementing webhook handlers
- Adding chat tools for LangGraph
- Setting up OAuth integrations
- Building prompt-based apps
Key Patterns
Plugin Types
1. Prompt-Based Apps
No server required - Just define prompts
- Chat prompts: Customize AI personality
- Memory prompts: Customize memory extraction
2. Integration Apps
Requires server endpoint - Webhook-based
- Memory triggers: Webhook on memory creation
- Real-time transcript: Webhook for live transcripts
- Chat tools: Custom tools for LangGraph
- Audio streaming: Raw audio processing
Webhook Patterns
Memory Creation Webhook
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class MemoryWebhook(BaseModel):
id: str
content: str
category: str
user_id: str
@app.post("/webhook/memory-created")
async def memory_created(webhook: MemoryWebhook):
"""Called when a memory is created."""
# Process memory
# Can create new memories via API
# Can trigger actions
return {"status": "processed"}
Real-time Transcript Webhook
@app.post("/webhook/transcript")
async def transcript_segment(segment: dict):
"""Called with live transcript segments."""
text = segment.get("text")
# Process in real-time
if "hey omi" in text.lower():
await trigger_action()
return {"status": "received"}
Chat Tools
Creating a Chat Tool
from langchain.tools import tool
@tool
def my_custom_tool(query: str) -> str:
"""Description of what this tool does.
Args:
query: The search query
Returns:
Results as a string
"""
result = perform_search(query)
return json.dumps(result)
# Register in app configuration
CHAT_TOOLS = [my_custom_tool]
Usage: Tool becomes available in agentic chat path when app is enabled
OAuth Integration
Setting Up OAuth
from authlib.integrations.fastapi_oauth2 import OAuth2
oauth = OAuth2(
client_id=os.getenv("CLIENT_ID"),
client_secret=os.getenv("CLIENT_SECRET"),
server_metadata_url="https://accounts.google.com/.well-known/openid-configuration",
)
@app.get("/auth")
async def auth():
return await oauth.google.authorize_redirect(
redirect_uri="https://your-app.com/callback"
)
Plugin Configuration
App Manifest
{
"id": "my-plugin",
"name": "My Plugin",
"description": "Plugin description",
"capabilities": [
"memory_trigger",
"real_time_transcript",
"chat_tools"
],
"webhook_url": "https://your-app.com/webhook"
}
Common Tasks
Creating a New Plugin
- Choose plugin type (prompt-based or integration)
- Set up server (if integration app)
- Implement webhook handlers
- Register plugin in Omi app
- Test with webhook.site first
Adding Chat Tools
- Create tool function with
@tooldecorator - Write clear tool description
- Register in app configuration
- Tool becomes available when app enabled
Setting Up OAuth
- Create OAuth app in provider (Google, Apple, etc.)
- Configure redirect URIs
- Implement OAuth flow in plugin
- Store tokens securely
Best Practices
- Error Handling: Handle webhook errors gracefully
- Idempotency: Make webhooks idempotent
- Rate Limiting: Implement rate limiting
- Security: Verify webhook signatures
- Documentation: Document your plugin API
- Testing: Test with webhook.site first
Related Documentation
The docs/ folder is the single source of truth for all user-facing documentation, deployed at docs.omi.me.
- Plugin Introduction:
docs/doc/developer/apps/Introduction.mdx- View online - Integrations:
docs/doc/developer/apps/Integrations.mdx- View online - Chat Tools:
docs/doc/developer/apps/ChatTools.mdx- View online - OAuth:
docs/doc/developer/apps/Oauth.mdx- View online - Prompt-Based Apps:
docs/doc/developer/apps/PromptBased.mdx- View online - Audio Streaming:
docs/doc/developer/apps/AudioStreaming.mdx- View online - Submitting Apps:
docs/doc/developer/apps/Submitting.mdx- View online - Plugin Development:
.cursor/rules/plugin-development.mdc
Related Cursor Resources
Rules
.cursor/rules/plugin-development.mdc- Plugin development patterns.cursor/rules/plugin-apps-js.mdc- JavaScript plugin patterns.cursor/rules/backend-api-patterns.mdc- Backend API patterns.cursor/rules/backend-architecture.mdc- Backend architecture
Subagents
.cursor/agents/plugin-developer/- Uses this skill for plugin development
Commands
/create-plugin- Uses this skill for plugin scaffolding/create-app- Uses this skill for app creation
More from basedhardware/omi
local-dev
Start local development environment — backend, macOS app, or Flutter mobile in iOS simulator. Use when: 'run the app', 'start backend', 'run simulator', 'flutter run', 'local dev', 'start dev environment', 'run mobile app'.
45rotate-key
Rotate an API key or secret across all locations — local .env files, macOS Keychain, GCP Secret Manager, Kubernetes deployments, and Codemagic CI. Use when: 'rotate key', 'update key', 'key leaked', 'replace secret', 'new API key', 'update GEMINI key', 'rotate secret'.
26self-improvement
Meta-skill for analyzing PRs, issues, and user interactions to improve Cursor rules and skills automatically
14debug-mode
Debug mode workflows and best practices for troubleshooting bugs, regressions, and performance issues. Use when debugging tricky issues that standard agent interactions struggle with.
13docs-automation
Automate documentation updates when API endpoints, functions, or architecture change. Detects code changes that require doc updates, generates API reference from FastAPI routers, updates architecture diagrams, and syncs between internal and external docs.
13omi-flutter-patterns
Flutter Dart BLE device communication state management Provider backend integration localization cross-platform iOS Android
13