Configuring Horizon
coollabsio/coolify
A skill your agent uses whenever the user mentions Horizon by name in a Laravel context.
AAMP (Agent-to-Agent Mail Protocol) — gives this agent an email identity and lets it exchange structured tasks with other AAMP nodes via email.
$ npx skills add larksuite/aamp --skill aamp -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install larksuite/aamp aamp --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/larksuite/aamp.git skills-src && mkdir -p .claude/skills && cp -r skills-src/packages/aamp-openclaw-plugin/skills .claude/skills/aamp && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "aamp" agent skill from https://github.com/larksuite/aamp/tree/main/packages/aamp-openclaw-plugin/skills into .claude/skills/aamp/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "aamp", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/larksuite/aamp/tree/main/packages/aamp-openclaw-plugin/skillsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add larksuite/aamp --skill aamp -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install larksuite/aamp aamp --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/larksuite/aamp.git skills-src && mkdir -p .agents/skills && cp -r skills-src/packages/aamp-openclaw-plugin/skills .agents/skills/aamp && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "aamp" agent skill from https://github.com/larksuite/aamp/tree/main/packages/aamp-openclaw-plugin/skills into .agents/skills/aamp/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "aamp", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add larksuite/aamp --skill aamp -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install larksuite/aamp aamp --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/larksuite/aamp.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/packages/aamp-openclaw-plugin/skills .cursor/skills/aamp && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "aamp" agent skill from https://github.com/larksuite/aamp/tree/main/packages/aamp-openclaw-plugin/skills into .cursor/skills/aamp/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "aamp", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/larksuite/aamp.git --path packages/aamp-openclaw-plugin/skills--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add larksuite/aamp --skill aamp -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install larksuite/aamp aamp --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/larksuite/aamp.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/packages/aamp-openclaw-plugin/skills .gemini/skills/aamp && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "aamp" agent skill from https://github.com/larksuite/aamp/tree/main/packages/aamp-openclaw-plugin/skills into .gemini/skills/aamp/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "aamp", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install larksuite/aamp aampInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add larksuite/aamp --skill aamp -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/larksuite/aamp.git skills-src && mkdir -p .github/skills && cp -r skills-src/packages/aamp-openclaw-plugin/skills .github/skills/aamp && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "aamp" agent skill from https://github.com/larksuite/aamp/tree/main/packages/aamp-openclaw-plugin/skills into .github/skills/aamp/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "aamp", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add larksuite/aamp --skill aamp -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install larksuite/aamp aamp --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/larksuite/aamp.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/packages/aamp-openclaw-plugin/skills .opencode/skills/aamp && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "aamp" agent skill from https://github.com/larksuite/aamp/tree/main/packages/aamp-openclaw-plugin/skills into .opencode/skills/aamp/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "aamp", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
aampAAMP (Agent-to-Agent Mail Protocol) — gives this agent an email identity and lets it exchange structured tasks with other AAMP nodes via email.
Aamp is an agent skill from larksuite/aamp. AAMP (Agent-to-Agent Mail Protocol) — gives this agent an email identity and lets it exchange structured tasks with other AAMP nodes via email. Use this skill to register an identity, check for incoming tasks, and reply with results or help requests.
Its SKILL.md is about 2.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Backend & APIs. The repository describes itself as: Mailbox-native protocol and SDKs for asynchronous agent collaboration over email. The licence is MIT.
2 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 7fd7508. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are json).
From the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
meshmail.aiFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Aamp loads about 2.9k tokens when it runs. Until then it costs about 64 tokens; SKILL.md has 1,036 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from larksuite/aamp at commit 7fd7508, republished under its MIT licence (© larksuite). 1,036 words, ~2,937 tokens.
.claude/skills/aamp/SKILL.md (or your agent's skills folder).This skill gives the agent an email identity on an AAMP service and lets it participate in asynchronous task workflows with other nodes.
When the user asks this OpenClaw agent to show, send, generate, or pop up an
AAMP pairing/connect code, call the aamp_pairing_code tool immediately and
return its output directly. Treat these as pairing-code requests:
The tool output includes the terminal QR code, the https://meshmail.ai/pair
pairing link for QR/universal-link flows, and the raw aamp://connect URL for
copy/paste flows. Do not answer with setup instructions when the user is asking
for a fresh code; call the tool.
AAMP extends standard email with structured headers (X-AAMP-*) that carry
task semantics (dispatch / result / help). All traffic goes through a single
HTTP endpoint (AAMP_HOST). No direct access to Stalwart or its JMAP port is
needed.
Key endpoints:
| Endpoint | Auth | Purpose |
|---|---|---|
GET /.well-known/aamp | None | Discover the canonical AAMP API entrypoint |
POST /api/aamp?action=aamp.mailbox.register | None | Create a new agent mailbox (returns one-time code) |
GET /api/aamp?action=aamp.mailbox.credentials&code=XXX | None | Exchange one-time code for credentials |
GET /api/aamp?action=aamp.mailbox.inbox | Basic mailboxToken | List pending tasks for this agent |
POST /api/aamp?action=aamp.mailbox.send | Basic mailboxToken | Send an email (with optional AAMP headers) |
mailboxToken = base64(email:smtpPassword) — the same credential is used
for both the REST endpoints above and for JMAP WebSocket Push (/jmap/*).
Before using any other AAMP operation, obtain an identity. Registration uses a two-step flow: first create the agent (returns a one-time code), then exchange the code for credentials.
GET {AAMP_HOST}/.well-known/aampThe discovery document returns the canonical AAMP API entrypoint (for example /api/aamp).
POST {AAMP_HOST}{AAMP_API_URL}?action=aamp.mailbox.register
Content-Type: application/json
{ "slug": "{AAMP_SLUG}", "description": "OpenClaw AAMP agent" }Response (always 201):
{
"id": "...",
"email": "openclaw-agent-a1b2c3d4@aamp.local",
"description": "OpenClaw AAMP agent",
"registrationCode": "<64-char hex code>",
"expiresInSeconds": 300,
"credentialsAction": "aamp.mailbox.credentials"
}The response does NOT include credentials. Instead it returns a one-time
registrationCode that expires in 5 minutes.
GET {AAMP_HOST}{AAMP_API_URL}?action=aamp.mailbox.credentials&code={registrationCode}Response (200):
{
"email": "openclaw-agent-a1b2c3d4@aamp.local",
"mailbox": { "token": "<base64 mailboxToken>" },
"smtp": { "password": "<smtpPassword>" }
}Error responses:
404 — invalid code410 — code already used or expiredThe slug is a human-readable prefix only. A random 8-hex suffix is always
appended, so multiple registrations with the same slug produce distinct
mailboxes without conflict (e.g. openclaw-agent-a1b2c3d4,
openclaw-agent-ff09e21c).
Important — credential lifecycle:
email, mailbox.token, and
smtp.password to AAMP_CREDENTIALS_FILE.Poll for tasks dispatched to this agent that are waiting for a response.
GET {AAMP_HOST}{AAMP_API_URL}?action=aamp.mailbox.inbox
Authorization: Basic {mailboxToken}Success response:
[
{
"taskId": "uuid",
"fromAgent": "coordinator-abc123@aamp.local",
"title": "Review PR #42",
"expiresAt": "2026-03-17T09:00:00.000Z",
"dispatchedAt": "2026-03-17T08:00:00.000Z",
"createdAt": "2026-03-17T08:00:00.000Z"
}
]An empty array means no pending tasks.
After completing a task, reply to the dispatcher with a task.result email.
POST {AAMP_HOST}{AAMP_API_URL}?action=aamp.mailbox.send
Authorization: Basic {mailboxToken}
Content-Type: application/json
{
"to": "<fromAgent email from inbox item>",
"subject": "[AAMP Result] {title}",
"text": "<human-readable summary of result>",
"aampHeaders": {
"X-AAMP-Intent": "task.result",
"X-AAMP-TaskId": "<taskId>",
"X-AAMP-Status": "completed"
}
}Put the human-readable output or rejection reason in the email body. Keep
X-AAMP-StructuredResult only when you need structured writeback fields.
If the agent is blocked and needs human input, send a task.help_needed email instead.
POST {AAMP_HOST}{AAMP_API_URL}?action=aamp.mailbox.send
Authorization: Basic {mailboxToken}
Content-Type: application/json
{
"to": "<fromAgent email>",
"subject": "[AAMP Help] {title}",
"text": "<human-readable description of the blocker>",
"aampHeaders": {
"X-AAMP-Intent": "task.help_needed",
"X-AAMP-TaskId": "<taskId>",
"X-AAMP-SuggestedOptions": "<option A|option B|option C>"
}
}Put the question and blocked reason in the email body. X-AAMP-SuggestedOptions
remains pipe-separated; include 2–4 options when possible to make it easy for
the human to respond quickly.
Some AAMP nodes are backed by aamp-cli node serve and expose a registered
command surface instead of a free-form natural-language task runner. When
calling one of these nodes, the task.dispatch email body must be JSON and
must follow the schema below:
{
"kind": "registered-command/v1",
"command": "git.apply",
"args": {},
"inputs": [
{
"slot": "patch_file",
"attachmentName": "fix.diff"
}
],
"stream": {
"mode": "full"
}
}Rules:
kind must be exactly registered-command/v1.command must match the remote node's registered command name from its
directory card / capability card.args must conform to the schema published by that node.inputs are optional and only reference attachments already included with
the dispatch email. Use them only when the remote command card declares the
slot.If the registered command declares a file input, attach the file to the email
and reference it through inputs[].attachmentName. Example:
{
"kind": "registered-command/v1",
"command": "git.apply",
"inputs": [
{
"slot": "patch_file",
"attachmentName": "fix.diff"
}
],
"stream": {
"mode": "full"
}
}The remote node replies with a task.result whose body is JSON:
{
"kind": "registered-command-result/v1",
"command": "git.apply",
"status": "completed",
"exitCode": 0,
"summary": "Command git.apply completed successfully.",
"stdout": "",
"stderr": "",
"truncated": {
"stdout": false,
"stderr": false
},
"timing": {
"startedAt": "2026-04-27T08:00:00.000Z",
"finishedAt": "2026-04-27T08:00:00.420Z",
"durationMs": 420
}
}When truncated.stdout or truncated.stderr is true, the full output may be
returned as one or more email attachments such as git.apply-stdout.txt or
git.apply-stderr.txt. Check the result email attachments in addition to the
JSON body.
If stream.mode is full or status-only, expect the remote node to send:
task.stream.openedtodo eventstext.delta events for stdout/stderr when mode is fulltask.result or task.help_neededcard.queryBefore dispatching to an unfamiliar AAMP node, send card.query and inspect
the returned card text.
Classify the node as a registered-command node only when the card clearly
advertises the local CLI command surface. In the current implementation, the
strongest signal is a card body that starts with # Local Registered Commands.
Other supporting signals are:
## git.apply- Working directory: ...- Exec: ...Args schema or Attachment slotsIf those markers are present, treat the node as an aamp-cli node serve node
and send task.dispatch with a JSON body shaped like
registered-command/v1.
If those markers are absent, treat the node as a normal agent node and send a natural-language task request instead of registered-command JSON.
Rules:
card.query is the source of truth when available. If the directory
summary and card disagree, trust the card.Before calling a registered-command node, inspect its card to learn the
accepted command names, argument schemas, and attachment slots.
aamp.mailbox.send → SMTP delivery failed. Retry after a short delay.aamp.mailbox.register → management service unavailable.
Retry with exponential back-off.For real-time task delivery instead of polling aamp.mailbox.inbox, connect a WebSocket
to {AAMP_HOST}/jmap and subscribe to the EmailDelivery push channel.
The management service proxies this connection to the Stalwart mail server.
Use Authorization: Basic {mailboxToken} when upgrading the WebSocket connection.
Parse incoming Email/get changes and filter for messages with X-AAMP-Intent
header to detect task dispatches without polling.
© larksuite, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in packages/aamp-openclaw-plugin/skills of larksuite/aamp.
Open the folder on GitHubat commit 7fd7508
Aamp next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Aamp this skilllarksuite/aamp | 120 | — | ~2.9k | Automated safety check: Pass | MIT | |
| Configuring Horizoncoollabsio/coolify | 63k | 4 repos | ~898 | Automated safety check: Pass | MIT | |
| Nestjs Best Practicesrolling-scopes/rsschool-app | 10k | 6 repos | ~1.2k | Automated safety check: Pass | MIT | |
| Sub2API AdminWei-Shaw/sub2api | 44k | 1 repos | ~717 | Automated safety check: Pass | LGPL-3.0 | |
| Firecrawl Build Onboardingfirecrawl/firecrawl | 190k | 1 repos | ~1.4k | Automated safety check: Notes | ISC | |
| Obsidian BasesAtmosphere/atmosphere | 3.8k | 22 repos | ~3.2k | Automated safety check: Pass | Apache-2.0 |
coollabsio/coolify
A skill your agent uses whenever the user mentions Horizon by name in a Laravel context.
rolling-scopes/rsschool-app
NestJS best practices and architecture patterns for building production-ready applications.
Wei-Shaw/sub2api
Manages a Sub2API deployment from the command line: accounts, redeem and invitation codes, groups, proxies, imports, exports and raw admin API calls.
firecrawl/firecrawl
Gets Firecrawl working in a project: signs you in through the browser, saves FIRECRAWL_API_KEY to .env and picks the first SDK or REST path.
Atmosphere/atmosphere
Create and edit Obsidian Bases (.base files) with views, filters, formulas, and summaries.
coollabsio/coolify
ACTIVATE when the user works on authentication in Laravel. An agent skill from coollabsio/coolify.
larksuite/aamp
AAMP (Agent-to-Agent Mail Protocol) via aamp-cli. An agent skill from larksuite/aamp.
Categories
AAMP (Agent-to-Agent Mail Protocol) — gives this agent an email identity and lets it exchange structured tasks with other AAMP nodes via email. Aamp is an agent skill from larksuite/aamp. AAMP (Agent-to-Agent Mail Protocol) — gives this agent an email identity and lets it exchange structured tasks with other AAMP nodes via email.
Aamp fits situations like: register an identity; check for incoming tasks; reply with results.
Run `npx skills add larksuite/aamp --skill aamp -a claude-code`. Or copy the skill folder (packages/aamp-openclaw-plugin/skills in larksuite/aamp) into .claude/skills/aamp in your project. Claude Code loads it when a task matches its description.
Run `npx skills add larksuite/aamp --skill aamp -a codex`. Or copy the skill folder (packages/aamp-openclaw-plugin/skills in larksuite/aamp) into .agents/skills/aamp in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add larksuite/aamp --skill aamp -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/aamp, .gemini/skills/aamp, .github/skills/aamp and .opencode/skills/aamp in your project.
SKILL.md names no scripts, command-line tools or credentials: Aamp is instructions for the agent only.
SKILL.md names 1 domain. In commands or code: meshmail.ai; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Aamp is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.9k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Aamp: Configuring Horizon (coollabsio/coolify, 63k stars), Nestjs Best Practices (rolling-scopes/rsschool-app, 10k stars), Sub2API Admin (Wei-Shaw/sub2api, 44k stars) and Firecrawl Build Onboarding (firecrawl/firecrawl, 190k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
larksuite (a GitHub organization) maintains it in larksuite/aamp, which has 120 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on July 29, 2026.
Source: larksuite/aamp on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.