AgentOS Extensions
Official extension registry for the AgentOS ecosystem.
Published Extensions
All extensions are published to npm under the @framers scope.
Registry Packages
| Package | Description | npm |
|---|---|---|
@framers/agentos-extensions-registry | Curated registry bundle — single import with createCuratedManifest() | |
@framers/agentos-extensions | Static catalog (registry.json) of all extensions |
Extensions
| Package | Description | npm |
|---|---|---|
@framers/agentos-ext-web-search | Multi-provider web search & fact-checking | |
@framers/agentos-ext-web-browser | Browser automation & content extraction | |
@framers/agentos-ext-news-search | News article search via NewsAPI | |
@framers/agentos-ext-giphy | GIF & sticker search via Giphy API | |
@framers/agentos-ext-image-search | Stock photo search (Pexels, Unsplash, Pixabay) | |
@framers/agentos-ext-voice-synthesis | Text-to-speech via ElevenLabs | |
@framers/agentos-ext-cli-executor | Shell command execution & file management | |
@framers/agentos-ext-auth | JWT authentication & subscription management | |
@framers/agentos-ext-telegram | Telegram Bot API integration | |
@framers/agentos-ext-telegram-bot | Telegram bot communications handler | |
@framers/agentos-ext-anchor-providers | Solana on-chain provenance anchoring | |
@framers/agentos-ext-tip-ingestion | Tip content processing pipeline |
Channel Adapters
| Package | Description | npm |
|---|---|---|
@framers/agentos-ext-channel-telegram | Telegram messaging channel (grammY) | |
@framers/agentos-ext-channel-whatsapp | WhatsApp messaging channel (Baileys) | |
@framers/agentos-ext-channel-discord | Discord messaging channel (discord.js) | |
@framers/agentos-ext-channel-slack | Slack messaging channel (Bolt) | |
@framers/agentos-ext-channel-webchat | Built-in WebChat channel (Socket.IO) |
Repository Structure
agentos-extensions/
├── .changeset/ # Changesets for versioning & publishing
├── .github/workflows/ # CI, release, TypeDoc pages
├── logos/ # Branding assets
├── templates/ # Starter templates for new extensions
│ ├── basic-tool/ # Single tool template
│ ├── multi-tool/ # Multiple tools template
│ ├── guardrail/ # Safety/compliance template
│ └── workflow/ # Multi-step process template
├── registry/
│ ├── curated/ # Official & verified extensions
│ │ ├── auth/ # Authentication & subscriptions
│ │ ├── communications/# Messaging (Telegram bot)
│ │ ├── integrations/ # External services (Telegram API)
│ │ ├── provenance/ # On-chain anchoring & tip ingestion
│ │ ├── research/ # Web search & browser automation
│ │ ├── channels/ # Messaging channels (Telegram, WhatsApp, Discord, Slack, WebChat)
│ │ └─ ─ system/ # CLI executor
│ └── community/ # Community-contributed extensions
├── scripts/ # Registry build & scaffolding tools
├── registry.json # Auto-generated extension manifest
├── pnpm-workspace.yaml # Workspace packages for publishing
└── typedoc.json # API docs config
Quick Start
Install the registry (recommended)
Load all extensions at once via the curated registry:
npm install @framers/agentos-extensions-registry
import { AgentOS } from '@framers/agentos';
import { createCuratedManifest } from '@framers/agentos-extensions-registry';
const manifest = await createCuratedManifest({
tools: 'all',
channels: 'none',
secrets: {
'serper.apiKey': process.env.SERPER_API_KEY!,
'giphy.apiKey': process.env.GIPHY_API_KEY!,
},
});
const agentos = new AgentOS();
await agentos.initialize({ extensionManifest: manifest });
Only extensions whose npm packages are installed will load — missing packages are skipped silently.
Install individual extensions
npm install @framers/agentos-ext-web-search
import { AgentOS } from '@framers/agentos';
import webSearch from '@framers/agentos-ext-web-search';
const agentos = new AgentOS();
await agentos.initialize({
extensionManifest: {
packs: [{
factory: () => webSearch({ /* config */ })
}]
}
});
Registry options
createCuratedManifest() accepts:
| Option | Type | Default | Description |
|---|---|---|---|
tools | string[] | 'all' | 'none' | 'all' | Which tool extensions to enable. Pass an array of names (e.g. ['web-search', 'giphy']) to selectively load. |
channels | ChannelPlatform[] | 'all' | 'none' | 'all' | Which messaging channels to enable. |
secrets | Record<string, string> | {} | API keys and tokens. Falls back to environment variables. |
logger | RegistryLogger | console | Custom logger (info, warn, error, debug methods). |
basePriority | number | 0 | Base priority for all extensions. |
overrides | Record<string, ExtensionOverrideConfig> | — | Per-extension overrides for enabled, priority, and options. |
Secret keys
| Secret ID | Environment Variable | Extension |
|---|---|---|
serper.apiKey | SERPER_API_KEY | web-search |
serpapi.apiKey | SERPAPI_API_KEY | web-search |
brave.apiKey | BRAVE_API_KEY | web-search |
giphy.apiKey | GIPHY_API_KEY | giphy |
elevenlabs.apiKey | ELEVENLABS_API_KEY | voice-synthesis |
pexels.apiKey | PEXELS_API_KEY | image-search |
unsplash.apiKey | UNSPLASH_ACCESS_KEY | image-search |
pixabay.apiKey | PIXABAY_API_KEY | image-search |
newsapi.apiKey | NEWSAPI_API_KEY | news-search |
telegram.botToken | TELEGRAM_BOT_TOKEN | channel-telegram |
discord.botToken | DISCORD_BOT_TOKEN | channel-discord |
slack.botToken | SLACK_BOT_TOKEN | channel-slack |
slack.appToken | SLACK_APP_TOKEN | channel-slack |
Selective loading examples
// Only web search and giphy, no channels
const manifest = await createCuratedManifest({
tools: ['web-search', 'giphy'],
channels: 'none',
});
// Only Telegram and Discord channels, all tools
const manifest = await createCuratedManifest({
channels: ['telegram', 'discord'],
tools: 'all',
secrets: {
'telegram.botToken': process.env.TELEGRAM_BOT_TOKEN!,
'discord.botToken': process.env.DISCORD_BOT_TOKEN!,
},
});
// Override specific extension options
const manifest = await createCuratedManifest({
tools: 'all',
channels: 'none',
overrides: {
'web-search': { priority: 10 },
'cli-executor': { enabled: false },
},
});
Create a new extension
# Use the scaffolding script
pnpm run create-extension
# Or copy a template
cp -r templates/basic-tool registry/curated/category/my-extension
cd registry/curated/category/my-extension
pnpm install
pnpm run dev
Releasing & Publishing
This repo uses Changesets for multi-package versioning and npm publishing. See RELEASING.md for the full workflow.
TL;DR
# 1. Make your changes to one or more extensions
# 2. Add a changeset describing what changed
pnpm changeset
# 3. Commit and push to master
git add . && git commit -m "feat: my changes" && git push
# 4. The GitHub Action opens a "Version Packages" PR
# → Merge it to publish updated packages to npm
Each extension is versioned and published independently. A change to web-search does not bump telegram.
Naming Convention
| Type | Pattern | Example |
|---|---|---|
| Extension | @framers/agentos-ext-{name} | @framers/agentos-ext-web-search |
| Template | @framers/agentos-template-{type} | @framers/agentos-template-basic-tool |
CI/CD
All extensions get free CI/CD via GitHub Actions:
- CI (
ci.yml): Lint, test, typecheck on every PR - Release (
release.yml): Changesets auto-version PRs + npm publish on merge - TypeDoc (
pages-typedoc.yml): API docs deployed to framersai.github.io/agentos-extensions - Extension validation (
extension-validation.yml): Manifest & structure checks - Dependabot: Automated dependency updates with auto-merge for patches
Quality Standards
All Extensions
- TypeScript with strict mode
-
80% test coverage
- MIT license
- No hardcoded secrets
Additional for Curated
- Professional code review
- Performance benchmarks
- Integration tests
- Migration guides
Documentation
- API Reference (TypeDoc)
- How Extensions Work
- Extension Architecture
- Auto-Loading Extensions
- Agency Collaboration Examples
- Self-Hosted Registries
- Migration Guide
- Releasing & Publishing
- Contributing
Contributing
See CONTRIBUTING.md for detailed guidelines.
Links
- Website: frame.dev
- AgentOS: agentos.sh
- Marketplace: vca.chat
- npm: @framers
- API Docs: framersai.github.io/agentos-extensions
- Contact: team@frame.dev
License
All extensions in this repository are MIT licensed.