Skill for developing AI agent engine components in internal/agent/. Covers the ReAct loop, swarm delegation, planning, verification, memory reflection, and cron automation.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Skill for developing messaging channel adapters via WASM Plugins and managing routing, session state, pairing codes, and accounts in internal/channels/.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
설치 방법 보기설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.
Use this skill when developing or extending messaging platform integrations in ActonOS. External chat adapters (Telegram, Discord, Slack, WhatsApp, Zalo) are developed as WASM Plugins using the ActonOS Plugin SDK, while internal/channels/ manages host routing, session isolation, pairing, and multi-account dispatching.
internal/channels/
├── adapter.go # Core ChannelAdapter interface, InboundMessage, OutboundMessage contracts
├── manager.go # ChannelManager: multi-account lifecycle, account sync, dynamic poller registration
├── router.go # MessageRouter: inbound dispatch, @agent mention parsing, routing modes
├── pairing.go # PairingManager: 6-digit security pairing codes & authorization ledger
├── session.go # Session state store per sender/channel/agent (conv_{channel}_{sender}_{agentID})
├── webhook.go # Generic webhook router & verification handler
└── *_test.go # Channel test suites
internal/plugin/
└── bridge_channel.go # WasmChannelBridge: bridges WASM plugin instances to ChannelAdapter
adapter.go)Every channel integration (bridged from WASM) satisfies the ChannelAdapter interface:
type ChannelAdapter interface {
// Name returns the unique channel type identifier (e.g. "telegram", "whatsapp", "discord")
Name() string
// Start initializes listeners, webhooks, or polling loops
Start(ctx context.Context) error
// Stop cleanly shuts down channel connections
Stop() error
// SendMessage delivers a response back to the user on that platform
SendMessage(ctx context.Context, msg OutboundMessage) error
}
type InboundMessage struct {
ChannelID string `json:"channel_id"`
SenderID string `json:"sender_id"`
SenderName string `json:"sender_name"`
TargetAgent string `json:"target_agent"` // Extracted @agent_mention or bound agent
Content string `json:"content"`
Metadata map[string]string `json:"metadata,omitempty"`
}
type OutboundMessage struct {
ChannelID string `json:"channel_id"`
Recipient string `json:"recipient"`
Content string `json:"content"`
}
Channel adapters run inside the Wazero WebAssembly sandbox. To create a new channel:
Scaffold with acton-plugin:
acton-plugin new channel-slack --type=channel
Implement sdk.ChannelAdapter in Go / TinyGo:
type SlackChannel struct {
sdk.BaseChannel
}
func (s *SlackChannel) SendMessage(ctx sdk.Context, msg sdk.OutboundMessage) error {
token, _ := ctx.Vault().GetSecret("slack_bot_token")
// Use ctx.HTTP().Post or WebSocket to deliver message
return nil
}
func (s *SlackChannel) PollMessages(ctx sdk.Context) ([]sdk.InboundMessage, error) {
// Poll updates or consume stream from WebSocket
return inbounds, nil
}
Declare Manifest & Permissions (manifest.json):
{
"id": "channel-slack",
"name": "Slack Bot Gateway",
"version": "1.0.0",
"capabilities": ["channel"],
"permissions": {
"net_outbound": ["slack.com", "*.slack.com"],
"secrets": ["slack_bot_token"]
}
}
Package Bundle:
acton-plugin build
acton-plugin pack -out dist/channel-slack.actonpkg
router.go)Incoming messages pass through MessageRouter.handleInboundMessage():
ExtractAgentMention): Extracts @agent_name or /agent <name> from prompt text, cleaning the input before passing to LLM.exclusive: Only the assigned agent can respond.mention: Routes to explicitly mentioned @agent in group chats; falls back to default agent in private DMs.fallback: Routes to Nova (agent_system_core) if no matching agent is bound.conv_{channel}_{sender}_{agentID} so different agents maintain separate memory diaries with the same user.pairing.go)To prevent unauthorized strangers from triggering agents on public channels:
SenderID messages the bot, the system generates a 6-digit temporary pairing code.POST /api/integrations/pairing/verify.PairingManager records the sender as authorized.manager.go)Channels support multiple concurrent bot accounts (e.g., Support Bot, DevOps Bot):
POST /api/integrations/channels and synchronized into active pollers via ChannelManager.SyncAccounts().target_channel, target_account_id, and target_recipient.GetAccountStatuses() exposes connection health and error diagnostics.ToolRegistry.Execute to enforce authorization, approval requirements, and sandbox constraints.아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.
로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.
Skill for developing AI agent engine components in internal/agent/. Covers the ReAct loop, swarm delegation, planning, verification, memory reflection, and cron automation.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Skill for developing REST API endpoints in internal/server/. Covers routing, request validation, WebSocket streaming, and API conventions.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Skill for building ActonOS: Web UI → Go binary → Docker image → ISO. Covers the entire build pipeline.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Skill for developing the ActonOS React 19 + Tailwind v4 frontend adhering to the official DESIGN.md specification. Covers design tokens, component decomposition, zero-hardcoded-text i18n, and go:embed delivery.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Skill for creating ActonOS releases. Covers version bumping, changelog management, git tagging, Docker image publishing, and ISO creation.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Skill for initial ActonOS project setup, environment verification, and dependency installation.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.