๐ค Clawdbot ไปฃ็ ๆถๆๆทฑๅบฆ่งฃๆ
ไธใๆฆ่ฟฐ
Clawdbot ๆฏไธไธช AI ๅฉๆๆกๆถ๏ผๅฎๅฐฑๅไธไธชใๆบ่ฝไธญ่ฝฌ็ซใ๏ผ่ฟๆฅ็ไฝ ๏ผ้่ฟ TelegramใDiscord ็ญๆธ ้๏ผๅ AI ๅคง่๏ผClaudeใGPT ็ญๆจกๅ๏ผใๅฎไธไป ่ฝ็่งฃไฝ ็ๆถๆฏ๏ผ่ฟ่ฝ่ฐ็จๅ็งๅทฅๅ ทๆฅๅฎๆไปปๅกใ
็จ้ไฟ็่ฏ่ฏด๏ผ
> Clawdbot ๅฐฑๅไธไธชๅ จ่ฝ็ฎกๅฎถ๏ผไฝ ้่ฟๅพฎไฟก/Telegram ๅๆถๆฏ็ปไป๏ผไปไผ่ฐๅจๅ็ง่ตๆบ๏ผๆง่กๅฝไปคใ่ฏปๅๆไปถใๆ็ดข็ฝ้กต๏ผๆฅๅธฎไฝ ๅฎๆไปปๅก๏ผ็ถๅๆ็ปๆๅ่ฏไฝ ใ
ไบใๆดไฝๆถๆๅพ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ็จๆทไบคไบๅฑ โ
โ โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ โ
โ โ Telegram โ โ Discord โ โ Signal โ โ WhatsApp โ ... โ
โ โโโโโโฌโโโโโโ โโโโโโฌโโโโโโ โโโโโโฌโโโโโโ โโโโโโฌโโโโโโ โ
โ โ โ โ โ โ
โ โโโโโโโโโโโโโโโดโโโโโโโฌโโโโโโโดโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Gateway ็ฝๅ
ณๅฑ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ HTTP/WebSocket ๆๅกๅจ (้ป่ฎค็ซฏๅฃ 18789) โ โ
โ โ โข ๆถๆฏ่ทฏ็ฑ โข ไผ่ฏ็ฎก็ โข ๅฅๅบทๆฃๆฅ โข ้
็ฝฎ้่ฝฝ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โผ โผ โผ โ
โ โโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ โ
โ โ Channelโ โ Sessions โ โ Cron โ โ
โ โ Managerโ โ Manager โ โ Schedulerโ โ
โ โโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Agent ๆบ่ฝไฝๅฑ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ PI (Provider Interface) - AI ๆจกๅไบคไบๅผๆ โ โ
โ โ โข ๆๅปบๆ็คบ่ฏ (System Prompt) โ โ
โ โ โข ๆตๅผๅๅบๅค็ โ โ
โ โ โข ๅทฅๅ
ท่ฐ็จ็ผๆ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โผ โผ โผ โ
โ โโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ โ
โ โ Tools โ โ Subagent โ โ Skills โ โ
โ โ System โ โ Registry โ โ Loader โ โ
โ โโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ AI ๆจกๅๅฑ โ
โ โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ โ
โ โ Claude โ โ GPT-4 โ โ Gemini โ โ ๆฌๅฐๆจกๅ โ ... โ
โ โ(Anthropic)โ โ (OpenAI) โ โ (Google) โ โ (Ollama) โ โ
โ โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
ไธใๆ ธๅฟ็ปไปถ่ฏฆ่งฃ
1. ๐ช Gateway๏ผ็ฝๅ ณ๏ผ- ็ณป็ป็ๅคง้จ
ๆไปถไฝ็ฝฎ๏ผ /dist/gateway/
Gateway ๆฏๆดไธช็ณป็ป็ใๆๆฅไธญๅฟใ๏ผ่ด่ดฃ๏ผ
- ๆฅๆถๆฅ่ชๅไธชๆธ ้็ๆถๆฏ
- ็ฎก็ๆๆไผ่ฏ๏ผSession๏ผ
- ๅๅไปปๅก็ป Agent
- ่ฟๅ AI ็ๅๅค
ๆ ธๅฟไปฃ็ ็คบไพ๏ผserver.impl.js๏ผ๏ผ
// Gateway ๅฏๅจๆถๅ็ไบๆ
export async function startGatewayServer(port = 18789, opts = {}) {
// 1. ๅ ่ฝฝ้
็ฝฎ
let configSnapshot = await readConfigFileSnapshot();
// 2. ๅๅงๅๅญ Agent ๆณจๅ่กจ
initSubagentRegistry();
// 3. ๅ ่ฝฝๆไปถ๏ผๅ็งๆธ ้ใๅทฅๅ
ท๏ผ
const { pluginRegistry, gatewayMethods } = loadGatewayPlugins({
cfg: cfgAtStart,
workspaceDir: defaultWorkspaceDir,
// ...
});
// 4. ๅๅปบ Channel ็ฎก็ๅจ
const channelManager = createChannelManager({ /* ... */ });
// 5. ๅฏๅจ HTTP/WebSocket ๆๅกๅจ
// ...
}
้ไฟ็่งฃ๏ผ
> Gateway ๅฐฑๅ้ ๅบ็ๅๅฐ๏ผๆๆๅฎขไบบ๏ผๆถๆฏ๏ผ้ฝ่ฆๅ ็ป่ฟๅๅฐ็ป่ฎฐ๏ผ็ถๅๅๅฐๅณๅฎๆไฝ ๅ้ ๅฐๅชไธชๆฟ้ด๏ผไผ่ฏ๏ผ๏ผๅๅซๆๅกๅ๏ผAgent๏ผๆฅๆๅกไฝ ใ
2. ๐ฑ Channel๏ผๆธ ้๏ผ- ๆถๆฏ็ๅ ฅๅฃ
ๆไปถไฝ็ฝฎ๏ผ /dist/channels/ ๅ /dist/telegram/
Channel ๆฏๆถๆฏ่ฟๅ ฅ็ณป็ป็ๅ ฅๅฃ๏ผๆฏ็ง่ๅคฉๅนณๅฐ้ฝๆๅฏนๅบ็ Channel ๆไปถ๏ผ
channels/
โโโ plugins/
โ โโโ telegram.js # Telegram ๆไปถ
โ โโโ discord.js # Discord ๆไปถ
โ โโโ signal.js # Signal ๆไปถ
โ โโโ whatsapp.js # WhatsApp ๆไปถ
โ โโโ slack.js # Slack ๆไปถ
ไปฅ Telegram ไธบไพ๏ผtelegram/bot.js๏ผ๏ผ
export function createTelegramBot(opts) {
// ไฝฟ็จ grammy ๅบๅๅปบ Telegram Bot
const bot = new Bot(opts.token);
// ้
็ฝฎๆถๆฏ้ๆต
bot.api.config.use(apiThrottler());
// ๆ่ๅคฉ ID ้กบๅบๅค็ๆถๆฏ
bot.use(sequentialize(getTelegramSequentialKey));
// ๆณจๅๆถๆฏๅค็ๅจ
registerTelegramHandlers({
bot,
processMessage, // ๆ ธๅฟๅค็ๅฝๆฐ
// ...
});
return bot;
}
ๆถๆฏๅค็ๆต็จ๏ผbot-handlers.js๏ผ๏ผ
// ๅฝๆถๅฐ Telegram ๆถๆฏๆถ
bot.on("message", async (ctx) => {
// 1. ๆฃๆฅๆฏๅฆ้ๅคๆถๆฏ
if (shouldSkipUpdate(ctx)) return;
// 2. ๆฃๆฅๅ้่
ๆฏๅฆๆๆ้
if (!isSenderAllowed(senderId, allowFrom)) return;
// 3. ๅค็ๅชไฝ๏ผๅพ็ใๆไปถ็ญ๏ผ
const media = await resolveMedia(ctx, mediaMaxBytes);
// 4. ไบค็ปๆถๆฏๅค็ๅจ
await processMessage(ctx, media);
});
้ไฟ็่งฃ๏ผ
> Channel ๅฐฑๅไธๅ็้จ๏ผTelegram ้จใDiscord ้จ๏ผ๏ผๆฏไธช้จ้ฝๆ่ชๅทฑ็้จๅซ๏ผไฝ่ฟๆฅไนๅ้ฝ่ตฐๅไธๆก่ทฏๅป่ง AI ็ฎกๅฎถใ
3. ๐ง Agent๏ผๆบ่ฝไฝ๏ผ- AI ็ๅคง่
ๆไปถไฝ็ฝฎ๏ผ /dist/agents/
Agent ๆฏๅฎ้ ไธ AI ๆจกๅๅฏน่ฏ็็ปไปถ๏ผๆ ธๅฟ่่ดฃ๏ผ
- ๆๅปบ System Prompt๏ผๅ่ฏ AI ๅฎๆฏ่ฐใ่ฝๅไปไน๏ผ
- ๅ้ๆถๆฏ็ป AI ๆจกๅ
- ๅค็ AI ็ๆตๅผๅๅบ
- ๆง่ก AI ่ฏทๆฑ็ๅทฅๅ ท่ฐ็จ
System Prompt ๆๅปบ๏ผsystem-prompt.js๏ผ๏ผ
// AI ็ใ่บซไปฝ่ฏใๅใ่ฝๅ่ฏดๆไนฆใ
function buildSystemPrompt(params) {
const sections = [
// 1. ๅบ็ก่บซไปฝ
buildUserIdentitySection(ownerLine),
// 2. ๅฏ็จๆ่ฝ
buildSkillsSection(params),
// 3. ๆถๆฏๅ้่ฝๅ
buildMessagingSection(params),
// 4. ๅทฅๅ
ทไฝฟ็จ่ฏดๆ
buildToolsSection(params),
// 5. ๅฝๅๆถ้ด
buildTimeSection(params),
];
return sections.flat().join('\n');
}
ๆตๅผๅๅบ่ฎข้ ๏ผpi-embedded-subscribe.js๏ผ๏ผ
export function subscribeEmbeddedPiSession(params) {
const state = {
assistantTexts: [], // AI ็ๅๅคๆๆฌ
toolMetas: [], // ๅทฅๅ
ท่ฐ็จไฟกๆฏ
deltaBuffer: "", // ๆตๅผๆๆฌ็ผๅฒ
// ...
};
// ๅค็ AI ่ฟๅ็ๆฏไธชๆๆฌ็ๆฎต
const pushAssistantText = (text) => {
if (!text) return;
assistantTexts.push(text);
};
// ๅค็ๅทฅๅ
ท่ฐ็จ
const handleToolCall = (toolCall) => {
toolMetas.push({
name: toolCall.name,
input: toolCall.input,
// ...
});
};
// ...
}
้ไฟ็่งฃ๏ผ
> Agent ๅฐฑๅ AI ็ใ็ฟป่ฏๅฎใ๏ผๆไฝ ็ๆถๆฏ็ฟป่ฏๆ AI ่ฝ็่งฃ็ๆ ผๅผ๏ผๅๆ AI ็ๅๅค็ฟป่ฏๆไฝ ่ฝ็ๆ็ๆถๆฏใ
4. ๐ง Tools๏ผๅทฅๅ ท๏ผ- AI ็ๅๆ
ๆไปถไฝ็ฝฎ๏ผ /dist/agents/pi-tools.js ๅ /dist/agents/bash-tools.exec.js
Tools ๆฏ AI ่ฝๅค่ฐ็จ็ๅ็งๅ่ฝ๏ผๅ ๆฌ๏ผ
exec- ๆง่ก Shell ๅฝไปคread/write/edit- ๆไปถๆไฝweb_search- ็ฝ้กตๆ็ดขbrowser- ๆต่งๅจๆงๅถmessage- ๅ้ๆถๆฏ
ๅทฅๅ ทๅฎไน็คบไพ๏ผbash-tools.exec.js๏ผ๏ผ
const execSchema = Type.Object({
command: Type.String({
description: "Shell command to execute"
}),
workdir: Type.Optional(Type.String({
description: "Working directory"
})),
timeout: Type.Optional(Type.Number({
description: "Timeout in seconds"
})),
// ...
});
// ๆง่กๅฝไปค็ๆ ธๅฟ้ป่พ
async function runExecTool(params) {
const { command, workdir, timeout } = params;
// 1. ๅฎๅ
จๆฃๆฅ
if (requiresExecApproval(command, security)) {
await requestApproval(command);
}
// 2. ๆง่กๅฝไปค
const result = await spawnWithFallback({
command,
cwd: workdir,
timeout: timeout * 1000,
});
// 3. ่ฟๅ่พๅบ
return {
output: result.stdout,
exitCode: result.exitCode,
};
}
ๅทฅๅ ท็ญ็ฅๆงๅถ๏ผpi-tools.policy.js๏ผ๏ผ
// ๆ นๆฎ้
็ฝฎๅณๅฎๅชไบๅทฅๅ
ทๅฏ็จ
export function filterToolsByPolicy(tools, policies) {
return tools.filter(tool => {
// ๆฃๆฅๅ
จๅฑ็ญ็ฅ
if (!isToolAllowedByPolicies(tool.name, policies)) {
return false;
}
return true;
});
}
้ไฟ็่งฃ๏ผ
> Tools ๅฐฑๅ็ฎกๅฎถ็ๅ็งๆ่ฝโโไผๅ้ฅญ๏ผexec๏ผใไผๆด็ๆไปถ๏ผread/write๏ผใไผไธ็ฝๆฅ่ตๆ๏ผweb_search๏ผใAI ๅณๅฎ่ฆๅไปไน๏ผ็ถๅ่ฐ็จๅฏนๅบ็ๆ่ฝๆฅๅฎๆใ
5. ๐ Session๏ผไผ่ฏ๏ผ- ๅฏน่ฏ็่ฎฐๅฟ
ๆไปถไฝ็ฝฎ๏ผ /dist/sessions/ ๅ /dist/gateway/session-utils.js
Session ็ฎก็ๅฏน่ฏ็ไธไธๆๅๅๅฒ๏ผ
Session Key ็็ปๆ๏ผsession-key.js๏ผ๏ผ
// Session Key ็ๆ ผๅผ็คบไพ๏ผ
// - agent:main:main โ ไธป Agent ็ไธปไผ่ฏ
// - agent:main:telegram:dm:123456 โ Telegram ็ง่ไผ่ฏ
// - agent:main:subagent:abc123 โ ๅญ Agent ไผ่ฏ
export function buildAgentMainSessionKey(params) {
const agentId = normalizeAgentId(params.agentId); // "main"
const mainKey = normalizeMainKey(params.mainKey); // "main"
return `agent:${agentId}:${mainKey}`; // "agent:main:main"
}
export function buildAgentPeerSessionKey(params) {
// ไธบๆฏไธช่ๅคฉๅฏน่ฑกๅๅปบ็ฌ็ซไผ่ฏ
return `agent:${agentId}:${channel}:dm:${peerId}`;
}
้ไฟ็่งฃ๏ผ
> Session ๅฐฑๅไฝ ๅ็ฎกๅฎถ็ๅฏน่ฏ่ฎฐๅฝๆฌ๏ผ็ฎกๅฎถ็ฅ้ไฝ ไธๆฌก่ไบไปไน๏ผ่ฝๆฅ็ไนๅ็่ฏ้ข็ปง็ปญ่ใ
6. ๐ถ Subagent๏ผๅญๆบ่ฝไฝ๏ผ- ๅ่บซๆฏ
ๆไปถไฝ็ฝฎ๏ผ /dist/agents/subagent-registry.js
ๅฝไปปๅกๅคๆๆถ๏ผไธป Agent ๅฏไปฅๆดพ็ๅญ Agent ๆฅๅนถ่กๅค็๏ผ
// ๅญ Agent ๆณจๅ่กจ
const subagentRuns = new Map();
// ๆณจๅๆฐ็ๅญ Agent
export function registerSubagentRun(params) {
const runId = generateRunId();
subagentRuns.set(runId, {
runId,
childSessionKey: params.childSessionKey,
requesterSessionKey: params.requesterSessionKey,
task: params.task, // ๅญ Agent ็ไปปๅกๆ่ฟฐ
startedAt: Date.now(),
outcome: null, // ๅฎๆๅ็็ปๆ
});
return runId;
}
// ็ญๅพ
ๅญ Agent ๅฎๆ
async function waitForSubagentCompletion(runId, timeoutMs) {
const entry = subagentRuns.get(runId);
if (!entry) return;
// ็ๅฌ Agent ไบไปถ
onAgentEvent((evt) => {
if (evt.runId === runId && evt.data?.phase === 'done') {
// ๅญ Agent ๅฎๆ๏ผ้็ฅไธป Agent
announceSubagentCompletion(entry);
}
});
}
้ไฟ็่งฃ๏ผ
> Subagent ๅฐฑๅไธป็ฎกๅฎถๅซๆฅ็ๅธฎๆ๏ผไธป็ฎกๅฎถ่ฏด"ไฝ ๅป่ฐๆฅ่ฟไธช้ฎ้ข"๏ผๅธฎๆๅฎๆๅๅๅไธป็ฎกๅฎถๆฑๆฅใ
ๅใๅ ณ้ฎๆต็จ่ฏฆ่งฃ
ๆต็จ1๏ผไธๆก Telegram ๆถๆฏ็ๅฎๆดๆ ็จ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ็จๆทๅจ Telegram ๅ้: "ๅธฎๆ็็ๅฝๅ็ฎๅฝๆไปไนๆไปถ" โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 1. Telegram Bot ๆฅๆถๆถๆฏ โ
โ bot.on("message", async (ctx) => { ... }) โ
โ โข ๆๅๆถๆฏๆๆฌใๅ้่
IDใ่ๅคฉID โ
โ โข ๆฃๆฅๅ้่
ๆ้ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 2. ๆๅปบ Session Key โ
โ sessionKey = "agent:main:telegram:dm:123456" โ
โ โข ๅ ่ฝฝ่ฏฅไผ่ฏ็ๅๅฒๆถๆฏ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 3. ๅ้ๅฐ Gateway โ
โ gateway.call("chat.send", { โ
โ sessionKey: "agent:main:telegram:dm:123456", โ
โ message: "ๅธฎๆ็็ๅฝๅ็ฎๅฝๆไปไนๆไปถ", โ
โ channel: "telegram" โ
โ }) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 4. Agent ๆๅปบ่ฏทๆฑ โ
โ โข ็ๆ System Prompt๏ผๅ
ๅซๅฏ็จๅทฅๅ
ทๅ่กจ๏ผ โ
โ โข ๆผๆฅๅๅฒๆถๆฏ โ
โ โข ๆทปๅ ็จๆทๆฐๆถๆฏ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 5. ่ฐ็จ AI ๆจกๅ๏ผๅฆ Claude๏ผ โ
โ API ่ฏทๆฑๅ
ๅซ: โ
โ โข system: "You are Claude Code, Anthropic's CLI..." โ
โ โข messages: [ไนๅ็ๅฏน่ฏ + ๆฐๆถๆฏ] โ
โ โข tools: [exec, read, write, ...] โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 6. AI ่ฟๅๅทฅๅ
ท่ฐ็จ่ฏทๆฑ โ
โ { โ
โ "type": "tool_use", โ
โ "name": "exec", โ
โ "input": { "command": "ls -la" } โ
โ } โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 7. ๆง่กๅทฅๅ
ท่ฐ็จ โ
โ const result = await execTool({ command: "ls -la" }); โ
โ // ่ฟๅ: "total 32\ndrwxr-xr-x 5 user user 4096..." โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 8. ๆๅทฅๅ
ท็ปๆ่ฟๅ็ป AI โ
โ AI ็ๅฐ็ฎๅฝๅ่กจๅ๏ผ็ๆ่ช็ถ่ฏญ่จๅๅค: โ
โ "ๅฝๅ็ฎๅฝๆไปฅไธๆไปถๅๆไปถๅคน๏ผ..." โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 9. ๅๅคๅ้ๅฐ Telegram โ
โ await sendMessageTelegram(chatId, "ๅฝๅ็ฎๅฝๆไปฅไธๆไปถ..."); โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
ๆต็จ2๏ผๅทฅๅ ท่ฐ็จ็ๅฎ็ฐๆบๅถ
// 1. AI ๅจๅๅคไธญๅ
ๅซๅทฅๅ
ท่ฐ็จ
// AI Response:
{
"content": [
{
"type": "tool_use",
"id": "toolu_01XYZ",
"name": "exec",
"input": { "command": "ls -la" }
}
]
}
// 2. ็ณป็ป่งฃๆๅทฅๅ
ท่ฐ็จ
const toolCall = response.content.find(c => c.type === "tool_use");
const { name, input, id } = toolCall;
// 3. ๆพๅฐๅฏนๅบ็ๅทฅๅ
ทๅฎ็ฐ
const tool = tools.find(t => t.name === name);
// 4. ๆง่กๅทฅๅ
ท
const result = await tool.execute(input);
// 5. ๆ้ ๅทฅๅ
ท็ปๆ
const toolResult = {
type: "tool_result",
tool_use_id: id,
content: result.output
};
// 6. ๆ็ปๆๅๅ็ป AI ็ปง็ปญๅฏน่ฏ
messages.push({ role: "user", content: [toolResult] });
// ๅๆฌก่ฐ็จ AI API...
ๆต็จ3๏ผๅญ Agent ็ๆดพๅไธๅๆถ
// ไธป Agent ๅณๅฎๆดพๅๅญไปปๅก
// System Prompt ไธญ็ๆๅฏผ๏ผ
// "If a task is complex, spawn a sub-agent to handle it..."
// 1. ไธป Agent ่ฐ็จ sessions_spawn ๅทฅๅ
ทๆดพๅๅญ Agent
await sessions_spawn({
task: "ๅๆ่ฟไธชไปฃ็ ๅบ็ๆถๆ",
label: "code-analysis"
});
// 2. ็ณป็ปๅๅปบๆฐ็ Session
const childSessionKey = `agent:main:subagent:${generateId()}`;
// 3. ๆณจๅๅญ Agent
registerSubagentRun({
runId,
childSessionKey,
requesterSessionKey: parentSessionKey,
task: "ๅๆ่ฟไธชไปฃ็ ๅบ็ๆถๆ",
startedAt: Date.now()
});
// 4. ๅญ Agent ็ฌ็ซ่ฟ่ก
// ๆ่ชๅทฑ็ๅฏน่ฏๅๅฒ๏ผๆ่ชๅทฑ็ๅทฅๅ
ท่ฎฟ้ฎๆ้
// 5. ๅญ Agent ๅฎๆๅ๏ผ็ณป็ป้็ฅไธป Agent
onAgentEvent((evt) => {
if (evt.data?.phase === 'done') {
// ๅ้ๅฎๆ้็ฅ็ปไธป Agent
notifyParentAgent({
message: `ๅญไปปๅกใ${label}ใๅทฒๅฎๆ๏ผ็ปๆ๏ผ...`
});
}
});
ไบใๆฐๆฎๆตๆป็ป
็จๆทๆถๆฏ
โ
โผ
[Channel Plugin] โโ่งฃๆๆถๆฏโโโถ [Gateway] โโ่ทฏ็ฑโโโถ [Session Manager]
โ โ
โ โผ
โ ๅ ่ฝฝๅฏน่ฏๅๅฒ
โ โ
โผ โ
[Agent] โโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโ
โผ โผ โผ
ๆๅปบ System ๅๅค Messages ๅ ่ฝฝ Tools
Prompt โ โ
โ โ โ
โโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโ
โ
โผ
[AI Model API]
โ
โโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโ
โผ โผ โผ
็บฏๆๆฌๅๅค ๅทฅๅ
ท่ฐ็จ่ฏทๆฑ ๆ่่ฟ็จ
โ โ โ
โ โผ โ
โ [Tool Executor] โ
โ โ โ
โ โผ โ
โ ๅทฅๅ
ทๆง่ก็ปๆ โ
โ โ โ
โโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโ
โ
โผ
[Response Handler]
โ
โผ
ๅ้ๅฐ็จๆทๆธ ้
ๅ ญใ็ฎๅฝ็ปๆ้ๆฅ่กจ
/usr/lib/node_modules/clawdbot/dist/
โ
โโโ gateway/ # ๐ช ็ฝๅ
ณๅฑ - ็ณป็ปๅ
ฅๅฃ
โ โโโ server.impl.js # ็ฝๅ
ณๆๅกๅจไธปๅฎ็ฐ
โ โโโ server-chat.js # ่ๅคฉๅค็
โ โโโ server-channels.js # ๆธ ้็ฎก็
โ โโโ session-utils.js # ไผ่ฏๅทฅๅ
ท
โ
โโโ agents/ # ๐ง ๆบ่ฝไฝๅฑ - AI ไบคไบ
โ โโโ system-prompt.js # ็ณป็ปๆ็คบ่ฏๆๅปบ
โ โโโ pi-embedded-subscribe.js # AI ๅๅบ่ฎข้
โ โโโ pi-tools.js # ๅทฅๅ
ทๅฎไน
โ โโโ bash-tools.exec.js # exec ๅทฅๅ
ทๅฎ็ฐ
โ โโโ subagent-registry.js # ๅญ Agent ็ฎก็
โ
โโโ channels/ # ๐ฑ ๆธ ้ๅฑ - ๆถๆฏๅ
ฅๅฃ
โ โโโ plugins/
โ โโโ telegram.js # Telegram ๆไปถ
โ โโโ discord.js # Discord ๆไปถ
โ โโโ ...
โ
โโโ telegram/ # Telegram ไธ็จๆจกๅ
โ โโโ bot.js # Bot ๅๅปบ
โ โโโ bot-handlers.js # ๆถๆฏๅค็ๅจ
โ โโโ send.js # ๆถๆฏๅ้
โ
โโโ sessions/ # ๐ ไผ่ฏ็ฎก็
โ โโโ session-key-utils.js
โ
โโโ routing/ # ่ทฏ็ฑ้ป่พ
โ โโโ session-key.js # Session Key ๆๅปบ
โ
โโโ config/ # โ๏ธ ้
็ฝฎ็ฎก็
โ โโโ config.js
โ
โโโ cli/ # ๅฝไปค่ก็้ข
โ โโโ program/
โ
โโโ cron/ # โฐ ๅฎๆถไปปๅก
โ
โโโ skills/ # ๐ฏ ๆ่ฝ็ณป็ป
ไธใๆป็ป
Clawdbot ็ๆถๆๅฏไปฅ็จไธๅฅ่ฏๆฆๆฌ๏ผ
> ใๅคๅ ฅๅฃใๅๆ ธๅฟใๅคๅทฅๅ ทใ
- ๅคๅ ฅๅฃ๏ผๆฏๆ TelegramใDiscordใSignal ็ญๅค็งๆถๆฏๆธ ้
- ๅๆ ธๅฟ๏ผๆๆๆถๆฏ้ฝ้่ฟ Gateway ่ทฏ็ฑๅฐ Agent ๅค็
- ๅคๅทฅๅ ท๏ผAI ๅฏไปฅ่ฐ็จๅ็งๅทฅๅ ท๏ผๆง่กๅฝไปคใ่ฏปๅๆไปถใๆ็ดข็ฝ้กต็ญ๏ผๆฅๅฎๆไปปๅก
่ฟ็งๆถๆ็ไผ็นๆฏ๏ผ
1. ๆๆฉๅฑ๏ผๆฐๅขไธไธชๆธ ้ๅช้่ฆๅไธไธช Channel ๆไปถ
2. ็ปไธ็ฎก็๏ผๆๆๅฏน่ฏ้ฝ้่ฟ Session ็ปไธ็ฎก็
3. ่ฝๅไธฐๅฏ๏ผ้่ฟ Tools ็ณป็ป๏ผAI ๅ ไนๅฏไปฅๅไปปไฝไบ
4. ๅฎๅ จๅฏๆง๏ผๅทฅๅ ท่ฐ็จๆ็ญ็ฅๆงๅถ๏ผๆๆๆไฝ้่ฆๅฎกๆน
ๆฅๅ็ๆๆถ้ด๏ผ2026-01-28