Atomemo-official-plugins atomemo-plugin-development
git clone https://github.com/choice-open/atomemo-official-plugins
T=$(mktemp -d) && git clone --depth=1 https://github.com/choice-open/atomemo-official-plugins "$T" && mkdir -p ~/.claude/skills && cp -r "$T/plugins/gmail/.agents/skills/atomemo-plugin-development" ~/.claude/skills/choice-open-atomemo-official-plugins-atomemo-plugin-development-4d2ffd && rm -rf "$T"
plugins/gmail/.agents/skills/atomemo-plugin-development/SKILL.mdAtomemo Plugin Development
You are helping a developer build an Atomemo plugin. Atomemo plugins extend the platform with:
- Tools: External API wrappers or local functions
- Models: LLM definitions with capabilities, pricing, and parameter overrides
- Credentials: Secure authentication definitions used by tools and models
Architecture Overview
Host (Atomemo App) ↕ Plugin Hub ← secure intermediary for lifecycle + message routing ↕ Your Plugin ← SDK + your business logic
- Plugin Hub decouples the host and plugin and handles communication security
- SDK (
) provides@choiceopen/atomemo-plugin-sdk-js
, runtime context, file helpers, schemas, and type-safe plugin definitionscreatePlugin - CLI (
) scaffolds projects and manages auth plus debug setup@choiceopen/atomemo-plugin-cli
Read
references/core-concepts.md first when the developer needs architectural context.
Main Component Types
| Type | Purpose | Source directory |
|---|---|---|
| Tool | Invokes third-party services or local business logic | |
| Model | Declares an LLM and its capabilities | |
| Credential | Collects and transforms authentication data | |
A single plugin can contain multiple tools, models, and credentials.
Identify the Scenario
Scenario A — New project from scratch: Read:
references/quick-start.mdreferences/core-concepts.md- The relevant implementation guides below
Scenario B — Adding to an existing project: Read the relevant guide directly:
- Adding a Tool →
references/tool-plugin.md - Adding a Model →
references/model-plugin.md - Adding Credentials →
references/credential.md - Configuring Parameters →
references/declarative-parameters.md - Understanding
→context.filesreferences/tool-plugin.md
Scenario C — Publishing: Read
references/publishing.md.
Workflow
Step 1: Clarify intent
Determine:
- Is this a new plugin or an existing plugin?
- Does it need tools, models, credentials, or some combination?
- Does it need file input/output (
) handling?file_ref - Does it need advanced declarative parameters such as
orresource_locator
?resource_mapper - Is TypeScript acceptable? It is the recommended and best-supported path.
Step 2: Verify the Atomemo CLI
Before running
atomemo commands, check whether the CLI is installed:
atomemo --version
If missing, install it:
npm install @choiceopen/atomemo-plugin-cli --global
If you need to compare against the latest published CLI:
atomemo --version npm view @choiceopen/atomemo-plugin-cli version
Only upgrade after confirming with the user:
npm install @choiceopen/atomemo-plugin-cli@latest --global
Checking versions is safe to automate. Installing or upgrading is not.
Step 3: Set up the project (new projects only)
See
references/quick-start.md. The normal sequence is:
atomemo auth login atomemo plugin init cd <plugin-name> atomemo plugin refresh-key bun install bun run dev bun run ./dist
Step 4: Implement plugin components
Create definitions in the appropriate directories and register them in
src/index.ts.
Typical project layout:
src/ index.ts tools/ models/ credentials/ i18n/
Registration pattern:
import { createPlugin } from "@choiceopen/atomemo-plugin-sdk-js" import { myTool } from "./tools/my-tool" import { myModel } from "./models/my-model" import { myCredential } from "./credentials/my-credential" const plugin = await createPlugin({ /* manifest fields */ }) plugin.addTool(myTool) plugin.addModel(myModel) plugin.addCredential(myCredential) plugin.run()
Step 5: Declarative parameters and file handling
Use declarative parameters for user input and configuration. Start with:
references/declarative-parameters.mdreferences/declarative-parameters-examples.md
When a tool handles files, use
context.files helpers instead of manually treating
file references as plain JSON.
Step 6: Internationalization
All user-facing strings support i18n. Prefer the
t() helper:
import { t } from "../i18n/i18n-node" display_name: t("WEATHER_TOOL_DISPLAY_NAME"), description: t("WEATHER_TOOL_DESCRIPTION"),
Step 7: Test locally
bun run build bun run ./dist
bun run dev rebuilds in watch mode. bun run ./dist creates the actual Hub connection.
Step 8: Publish (when ready)
See
references/publishing.md. Key steps:
— validates, builds, syncs versionsbun run release- Fork
repoatomemo-official-plugins - Add plugin to
plugins/<your-plugin-name>/ - Open PR with title
feat(plugin): add <your-plugin-name>
Reference Files
Load these on demand based on what the developer needs:
| File | When to read |
|---|---|
| New project setup |
| Architecture, manifest, lifecycle |
| Building Tool plugins |
| Building Model plugins |
| Defining credentials |
| Parameter types and UI config |
| Ready-to-copy parameter examples |
| Publishing to the marketplace |
CLI Automation
You can automate most CLI steps except the browser-based login flow.
Safe commands to run automatically:
atomemo --version npm view @choiceopen/atomemo-plugin-cli version atomemo plugin init --no-interactive -n <plugin-name> -d "<description>" -l typescript atomemo plugin refresh-key bun install bun run build bun run ./dist
Commands that require user action:
atomemo auth login uses a device authorization flow. You cannot automate it.
Guide the user through the browser verification step and wait for confirmation.
Common Mistakes to Avoid
- Plugin names must match
/^[a-z][a-z0-9_-]{2,62}[a-z0-9]$/ - Never hardcode secrets
- Model names should follow
provider/model_name - Debug API keys expire; refresh with
atomemo plugin refresh-key - Tools that handle files should use
context.files - Every tool, model, and credential must be registered in
src/index.ts