Loading...
Loading...
Compare original and translation side by side
/start/getMeycyc init{{USER_LANGUAGE}}ruenkkUSER.mdru/getMeycyc init{{USER_LANGUAGE}}ruenkkUSER.mdru| Don't ask | Why | What to do instead |
|---|---|---|
| Telegram chat_id | Auto-detected in Step 4 from | Poll |
| VM name | Default is | Set silently. Tell user the name only in the final summary. |
| SSH IP restriction | Default is "current laptop IP, lock SSH to it". Detected via | Set silently. |
| Zone / region / subnet / image / VM shape | All hard-coded for YC Kazakhstan (kz1-a, ubuntu-2404-lts, standard-v3, 2 vCPU / 4 GB / 30 GB). | Don't surface to user. |
| Linux username on the VM | Always | Use it without asking. |
| Anthropic / OpenRouter / OpenAI billing balance | Caught upfront in Step 1 by a probe call. If insufficient, fail fast with a one-line message — don't ask "are you sure you topped up?". | Probe call before VM create. |
| 请勿询问 | 原因 | 替代方案 |
|---|---|---|
| Telegram chat_id | 用户按下/start后,可在步骤4中通过 | 在步骤4中每2秒轮询 |
| 虚拟机名称 | 默认名称为 | 静默设置。仅在最终总结中告知用户名称。 |
| SSH IP限制 | 默认设置为“当前笔记本IP,仅允许该IP访问SSH”。通过 | 静默设置。 |
| 可用区/区域/子网/镜像/虚拟机规格 | 均为Yandex Cloud哈萨克斯坦区域硬编码配置(kz1-a、ubuntu-2404-lts、standard-v3、2 vCPU / 4 GB内存 / 30 GB存储)。 | 不向用户展示。 |
| 虚拟机上的Linux用户名 | 固定为 | 直接使用,无需询问。 |
| Anthropic / OpenRouter / OpenAI计费余额 | 在步骤1中通过探测调用提前检测。若余额不足,直接用单行消息快速失败——不要询问“你确定已充值?”。 | 创建虚拟机前执行探测调用。 |
openclaw/install.shprepare-yc-workshopopenclaw/install.shprepare-yc-workshop| Mode | When | What the user supplies | Skill does |
|---|---|---|---|
| Plan A — own YC account (default) | The user has (or is willing to create) a Yandex Cloud Kazakhstan account. | OAuth token from | |
| Plan B — workshop bundle | The user is at a workshop, the organizer DM'd them a | Path to the | Parses the bundle, configures |
$schemaopenclaw-workshop-bundle@bundle-*.json~/Downloads| 模式 | 适用场景 | 用户需提供的内容 | 技能执行操作 |
|---|---|---|---|
| 方案A——自有YC账户(默认) | 用户拥有(或愿意创建)Yandex Cloud哈萨克斯坦账户。 | | 在向导专属配置文件中执行等效 |
| 方案B——工作坊密钥包 | 用户正在参加工作坊,组织者已通过私信发送 | 组织者发送的 | 解析密钥包,使用嵌入的服务账户密钥 + cloud-id + folder-id配置 |
$schemaopenclaw-workshop-bundle@~/Downloadsbundle-*.json| # | Input | How user gets it (paste this verbatim in your prompt) |
|---|---|---|
| 1 | Telegram bot token | Open @BotFather in Telegram → send |
| 2 | LLM access — one of three options | See the table below. The user picks ONE option, the wizard auto-detects which one from the format of what they paste. |
| 序号 | 输入内容 | 用户获取方式(提示语直接复制使用) |
|---|---|---|
| 1 | Telegram机器人令牌 | 在Telegram中打开@BotFather → 发送 |
| 2 | LLM访问方式——三种选项之一 | 见下表。用户选择其中一种,向导根据用户粘贴内容的格式自动检测。 |
| Option | What user pastes | Detection signal | Cost / requirements |
|---|---|---|---|
| A. Anthropic API key | Key starting with | Prefix | ≥$5 credit on console.anthropic.com/settings/billing. Best raw quality. Pay-as-you-go (~$3 per million input tokens for Sonnet 4.6). |
| B. OpenRouter API key | Key starting with | Prefix | ≥$5 credit on OpenRouter. Unified access to Anthropic + OpenAI + 200 other models through one key, ~5% markup over native. Good if user wants to A/B different models later. |
| C. OpenAI Codex via ChatGPT | The literal word | Token doesn't start with | Active ChatGPT Plus ($20/mo) or Pro ($200/mo) subscription. After VM bootstrap, the wizard prompts the user once on auth.openai.com with a device code — no API key needed, no metered billing. Plus gives |
| Decided silently | Value | How |
|---|---|---|
| VM name | | If |
| Zone | | Only zone in YC Kazakhstan. |
| Subnet | | Auto-provisioned in any new KZ folder. |
| OS image | | From |
| VM shape | | Matches the reference deployment. |
| Public IP | yes, ephemeral IPv4 NAT | Simplest path for SSH from anywhere. |
| Linux user | | Created by cloud-init. |
| SSH key | | |
| SSH ingress | | |
| Outbound | open to anywhere | OpenClaw needs Anthropic, Telegram, OpenAI, OpenRouter, etc. — locking down by domain is fragile. |
| Telegram chat_id | auto-detected after first | Poll |
| Primary model | Depends on chosen LLM option, see table below | |
| Fallback models | Depends on chosen LLM option, see table below |
| 选项 | 用户粘贴内容 | 检测标识 | 成本/要求 |
|---|---|---|---|
| A. Anthropic API密钥 | 来自console.anthropic.com/settings/keys、以 | 前缀 | console.anthropic.com/settings/billing账户余额≥5美元。原始质量最佳。按需付费(Sonnet 4.6模型约每百万输入令牌3美元)。 |
| B. OpenRouter API密钥 | 来自openrouter.ai/keys、以 | 前缀 | OpenRouter账户余额≥5美元。通过一个密钥统一访问Anthropic + OpenAI + 其他200多种模型,比原生价格高约5%。适合之后想要对比测试不同模型的用户。 |
| C. 通过ChatGPT使用OpenAI Codex | 输入字面单词 | 令牌不以 | 有效的**ChatGPT Plus(每月20美元)或Pro(每月200美元)**订阅。虚拟机引导完成后,向导会在auth.openai.com上提示用户输入一次设备代码——无需API密钥,无需计量计费。Plus订阅可使用 |
| 自动决定项 | 值 | 实现方式 |
|---|---|---|
| 虚拟机名称 | | 若 |
| 可用区 | | Yandex Cloud哈萨克斯坦区域唯一可用区。 |
| 子网 | | 任何新的KZ文件夹中都会自动预配置。 |
| 操作系统镜像 | | 来自 |
| 虚拟机规格 | | 与参考部署一致。 |
| 公网IP | 是,临时IPv4 NAT | 从任意位置访问SSH的最简单方式。 |
| Linux用户 | | 由cloud-init创建。 |
| SSH密钥 | | 若不存在,执行 |
| SSH入站规则 | | 通过 |
| 出站规则 | 允许访问任意地址 | OpenClaw需要访问Anthropic、Telegram、OpenAI、OpenRouter等——按域名锁定过于脆弱。 |
| Telegram chat_id | 首次按下/start后自动检测 | 轮询 |
| 主模型 | 取决于所选LLM选项,见下表 | |
| 备用模型 | 取决于所选LLM选项,见下表 |
| Option | | |
|---|---|---|
| A. Anthropic | | |
| B. OpenRouter | | |
| C. OpenAI Codex | | |
gpt-5.5openclaw models listgpt-4o| 选项 | | |
|---|---|---|
| A. Anthropic | | |
| B. OpenRouter | | |
| C. OpenAI Codex | | |
openclaw models listgpt-5.5gpt-4oycapi.yandexcloud.kz:443api.cloud.yandex.net:443yc config set endpoint api.yandexcloud.kz:443cloud-idfolder-idyc compute / vpc / resource-manageriamquota-managerresource-managercomputevpcdnsmanaged-kubernetesyc billingyc billing account listyc config profile create/activate$schemaopenclaw-workshop-bundle@MODE=plan-bBUNDLE_PATH=<path>bundle-NN.json$schemaMODE=plan-bbundle-*.json$PWD~/Downloads~/Desktop$schemaopenclaw-workshop-bundle@bundle-NN.json<path>MODE=plan-bMODE=plan-aSCHEMA=$(jq -r '."$schema" // empty' "$BUNDLE_PATH" 2>/dev/null)
[[ "$SCHEMA" =~ ^openclaw-workshop-bundle@ ]] \
|| { say "Это не похоже на workshop-bundle от организатора. Проверь, что прислали правильный файл."; stop; }ycapi.yandexcloud.kz:443api.cloud.yandex.net:443yc config set endpoint api.yandexcloud.kz:443cloud-idfolder-idyc compute / vpc / resource-manageriamquota-managerresource-managercomputevpcdnsmanaged-kubernetesyc billingyc billing account listyc config profile create/activate$schemaopenclaw-workshop-bundle@MODE=plan-bBUNDLE_PATH=<path>bundle-NN.json$schemaMODE=plan-b$PWD~/Downloads~/Desktopbundle-*.json$schemaopenclaw-workshop-bundle@bundle-NN.json<path>MODE=plan-bMODE=plan-aSCHEMA=$(jq -r '."$schema" // empty' "$BUNDLE_PATH" 2>/dev/null)
[[ "$SCHEMA" =~ ^openclaw-workshop-bundle@ ]] \
|| { say "Это не похоже на workshop-bundle от организатора. Проверь, что прислали правильный файл."; stop; }
On any validation failure for Plan B, tell the user in one sentence what's wrong, advise asking the organizer, and stop — don't silently fall back to Plan A. Falling back would burn 10 minutes asking for OAuth they don't have.
**If `MODE=plan-b`**: configure `yc` from the bundle and skip directly to Step 0a, then `f`, then `g` (skipping `c`, `d`, `e`):
```bash
若方案B验证失败,用一句话告知用户问题所在,建议联系组织者,然后停止——请勿静默回退到方案A。回退会浪费10分钟询问用户没有的OAuth信息。
**若`MODE=plan-b`**:从密钥包配置`yc`,直接跳至步骤0a,然后是0f、0g(跳过c、d、e):
```bashyc config set service-account-keyyc config set service-account-key
Plan-B-specific failure modes:
- **Schema older than `@1`** → bundle predates this version of the skill. Ask user to refresh from organizer; don't try to be smart.
- **Schema newer than what this skill recognises** → also ask for guidance from organizer (they updated `prepare-yc-workshop` past us). Bundle may still work — try the steps above and surface YC errors plainly.
- **`yc compute zone list` returns empty** → key was revoked or folder deleted. Tell the user: "Кажется, организатор уже свернул облако воркшопа. Свяжись с ним."
- **`yc compute zone list` returns `ru-central1-*`** instead of `kz1-a` → bundle's `endpoint` field was wrong. Surface plainly; this is an organizer-side bug.
**On `MODE=plan-b`, skip Step 0c, 0d, 0e entirely** and proceed to 0a → 0b → 0f → 0g. The bundle already contains a valid token-equivalent + cloud-id + folder-id, so re-asking for OAuth would be cruel and pointless.
**On `MODE=plan-a`, proceed normally** through Step 0a-g as written.
---
**a. Companion skill `openclaw-guide` must be loaded.** Probe the agent's skill loader. If it's not present, run `npx skills add CodeAlive-AI/ceo-ai-os@openclaw-guide -g` silently. If `npx` is unavailable, tell the user (one sentence) to install both skills manually, then stop.
**b. `yc` CLI installed.** `yc --version`. If missing: silently `curl -fsSL https://storage.yandexcloud.net/yandexcloud-yc/install.sh | bash -s -- -i $HOME/yandex-cloud -n` and add `~/yandex-cloud/bin` to PATH for this session.
**(c, d, e are Plan A only — skip on `MODE=plan-b`, which configured the profile from the bundle in Step 0.5.)**
**c. Activate a dedicated Kazakhstan profile.** Use a wizard-owned profile so we don't disturb the user's existing setup:
```bash
PROFILE_NAME=openclaw-kz
CURRENT_PROFILE=$(yc config profile list 2>/dev/null | awk '/ACTIVE/{print $1}')
方案B特定失败场景:
- **Schema版本早于`@1`** → 密钥包早于本技能版本。请用户向组织者获取更新版本;请勿自行尝试兼容。
- **Schema版本晚于本技能支持的版本** → 同样请用户联系组织者(他们已更新`prepare-yc-workshop`至本技能之后的版本)。密钥包可能仍可使用——尝试执行上述步骤,直接展示YC错误信息。
- **`yc compute zone list`返回空** → 密钥已被撤销或文件夹已删除。告知用户:“Кажется, организатор уже свернул облако воркшопа. Свяжись с ним.”
- **`yc compute zone list`返回`ru-central1-*`而非`kz1-a`** → 密钥包的`endpoint`字段错误。直接展示问题;这是组织者端的错误。
**若`MODE=plan-b`,完全跳过步骤0c、0d、0e**,继续执行0a → 0b → 0f → 0g。密钥包已包含有效的令牌等效物 + cloud-id + folder-id,因此再次询问OAuth是不合理且无意义的。
**若`MODE=plan-a`,正常执行**步骤0a-g。
---
**a. 必须加载配套技能`openclaw-guide`**。探测Agent的技能加载器。若未加载,静默执行`npx skills add CodeAlive-AI/ceo-ai-os@openclaw-guide -g`。若`npx`不可用,用一句话告知用户手动安装两个技能,然后停止。
**b. 已安装`yc` CLI**。执行`yc --version`。若未安装:静默执行`curl -fsSL https://storage.yandexcloud.net/yandexcloud-yc/install.sh | bash -s -- -i $HOME/yandex-cloud -n`,并将`~/yandex-cloud/bin`添加至本次会话的PATH。
**(c、d、e仅适用于方案A——`MODE=plan-b`时跳过,因为步骤0.5已从密钥包配置好配置文件。)**
**c. 激活专属哈萨克斯坦配置文件**。使用向导专属配置文件,避免干扰用户现有设置:
```bash
PROFILE_NAME=openclaw-kz
CURRENT_PROFILE=$(yc config profile list 2>/dev/null | awk '/ACTIVE/{print $1}')
After this block, the active profile is either the user's pre-existing KZ-pointing profile (preserve their settings — they know what they're doing) or our fresh `openclaw-kz` profile (we'll fill it in steps d-f).
**d. OAuth token + endpoint on the active profile.** Check `yc config get token` and `yc config get endpoint`:
- Both already set, endpoint is KZ → ✅ skip ahead.
- Endpoint set to KZ but no token → ask the user once (see below).
- Token set but wrong endpoint → silently `yc config set endpoint api.yandexcloud.kz:443`.
- Nothing set (fresh profile) → ask the user once for an OAuth token.
The OAuth ask is **the only mandatory user prompt in Step 0**. Say exactly:
> Для работы с Yandex Cloud Kazakhstan нужен OAuth-токен (один раз). Открой в браузере:
>
> https://oauth.yandex.kz/authorize?response_type=token&client_id=1a6990aa636648e9b2ef855fa7bec2fb
>
> Войди под своим Yandex ID, разреши доступ. После редиректа браузер покажет URL вида `https://oauth.yandex.kz/verification_code#access_token=y0_XXXXXX…&token_type=bearer&expires_in=...`. Скопируй значение `access_token=…` (длинная строка между `=` и `&`) и пришли мне.
After receiving the token: `yc config set token <token>`, then set the endpoint **and** the zone in the same breath:
```bash
yc config set endpoint api.yandexcloud.kz:443
yc config set compute-default-zone kz1-acompute-default-zoneyc config set endpointyc compute *--zoneru-central1-aCLOUD_ID=$(yc config get cloud-id 2>/dev/null || true)
if [[ -z "$CLOUD_ID" ]]; then
CLOUD_ID=$(yc resource-manager cloud list --format json | jq -r '.[0].id // empty')
[[ -n "$CLOUD_ID" ]] && yc config set cloud-id "$CLOUD_ID"
fi
FOLDER_ID=$(yc config get folder-id 2>/dev/null || true)
if [[ -z "$FOLDER_ID" ]]; then
FOLDER_ID=$(yc resource-manager folder list --cloud-id "$CLOUD_ID" --format json | jq -r '.[0].id // empty')
[[ -n "$FOLDER_ID" ]] && yc config set folder-id "$FOLDER_ID"
ficloud listcloud list<NAME>yc billing account listls ~/.ssh/id_ed25519.pubssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N "" -C "openclaw-yc-$(date +%Y%m%d)"yc compute instance get --name openclaw-bot 2>/dev/nullopenclaw-bot-XXXX
执行完此模块后,活动配置文件要么是用户预先存在的指向KZ区域的配置文件(保留用户设置——用户清楚自己的操作),要么是全新的`openclaw-kz`配置文件(将在步骤d-f中填充)。
**d. 活动配置文件的OAuth令牌 + 端点**。检查`yc config get token`和`yc config get endpoint`:
- 两者均已设置,且端点为KZ → ✅ 跳过后续步骤。
- 端点已设置为KZ但无令牌 → 询问用户一次(见下文)。
- 令牌已设置但端点错误 → 静默执行`yc config set endpoint api.yandexcloud.kz:443`。
- 均未设置(全新配置文件) → 询问用户一次获取OAuth令牌。
OAuth询问是**步骤0中唯一必须的用户提示**。请严格按以下内容表述:
> Для работы с Yandex Cloud Kazakhstan нужен OAuth-токен (один раз). Открой в браузере:
>
> https://oauth.yandex.kz/authorize?response_type=token&client_id=1a6990aa636648e9b2ef855fa7bec2fb
>
> Войди под своим Yandex ID, разреши доступ. После редиректа браузер покажет URL вида `https://oauth.yandex.kz/verification_code#access_token=y0_XXXXXX…&token_type=bearer&expires_in=...`. Скопируй значение `access_token=…` (длинная строка между `=` и `&`) и пришли мне.
收到令牌后:执行`yc config set token <token>`,同时设置端点**和**可用区:
```bash
yc config set endpoint api.yandexcloud.kz:443
yc config set compute-default-zone kz1-acompute-default-zoneyc config set endpoint--zoneyc compute *ru-central1-aCLOUD_ID=$(yc config get cloud-id 2>/dev/null || true)
if [[ -z "$CLOUD_ID" ]]; then
CLOUD_ID=$(yc resource-manager cloud list --format json | jq -r '.[0].id // empty')
[[ -n "$CLOUD_ID" ]] && yc config set cloud-id "$CLOUD_ID"
fi
FOLDER_ID=$(yc config get folder-id 2>/dev/null || true)
if [[ -z "$FOLDER_ID" ]]; then
FOLDER_ID=$(yc resource-manager folder list --cloud-id "$CLOUD_ID" --format json | jq -r '.[0].id // empty')
[[ -n "$FOLDER_ID" ]] && yc config set folder-id "$FOLDER_ID"
ficloud listcloud list<NAME>yc billing account listls ~/.ssh/id_ed25519.pubssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N "" -C "openclaw-yc-$(date +%Y%m%d)"yc compute instance get --name openclaw-bot 2>/dev/nullopenclaw-bot-XXXXСейчас поставлю тебе OpenClaw-бота в Yandex Cloud. От тебя нужны две вещи (~5 минут).1) Telegram bot token. Открой @BotFather в Telegram → отправь→ придумай имя (любое) → придумай username, заканчивающийся на/newbot→ BotFather пришлёт токен. Пришли его мне.bot2) Доступ к LLM — выбери ОДИН из трёх вариантов:A) Anthropic API ключ (рекомендую первым, лучшее качество) Открой https://console.anthropic.com/settings/keys → Create Key. Ключ начинается на. На https://console.anthropic.com/settings/billing должно быть ≥$5.sk-ant-B) OpenRouter API ключ (один ключ к Anthropic + OpenAI + 200 моделям) Открой https://openrouter.ai/keys → Create Key. Начинается на. Нужен баланс ≥$5 на openrouter.ai/credits.sk-or-C) OpenAI Codex через ChatGPT подписку (бесплатно если уже платишь Plus или Pro) Не нужен ключ. Просто напиши слово «Codex». После установки бота я попрошу ввести 8-символьный код на auth.openai.com — один раз.Пришли мне токен Telegram и один из трёх (ключ или слово «Codex»). Хоть в одном сообщении, хоть по отдельности. Я никуда не сохраняю и не показываю значения обратно.
case "$LLM_INPUT" in
sk-ant-*)
LLM_PROVIDER=anthropic ;;
sk-or-*)
LLM_PROVIDER=openrouter ;;
Codex|codex|CODEX|ChatGPT|chatgpt|OpenAI*|"openai codex"|OAuth|oauth)
LLM_PROVIDER=openai-codex
LLM_API_KEY="" # OAuth flow — no key at this stage
;;
*)
say "Не распознал — это Anthropic-ключ (начинается на sk-ant-), OpenRouter-ключ (sk-or-) или слово 'Codex'?" && reprompt
;;
esacundefinedСейчас поставлю тебе OpenClaw-бота в Yandex Cloud. От тебя нужны две вещи (~5 минут).1) Telegram bot token. Открой @BotFather в Telegram → отправь→ придумай имя (любое) → придумай username, заканчивающийся на/newbot→ BotFather пришлёт токен. Пришли его мне.bot2) Доступ к LLM — выбери ОДИН из трёх вариантов:A) Anthropic API ключ (рекомендую первым, лучшее качество) Открой https://console.anthropic.com/settings/keys → Create Key. Ключ начинается на. На https://console.anthropic.com/settings/billing должно быть ≥$5.sk-ant-B) OpenRouter API ключ (один ключ к Anthropic + OpenAI + 200 моделям) Открой https://openrouter.ai/keys → Create Key. Начинается на. Нужен баланс ≥$5 на openrouter.ai/credits.sk-or-C) OpenAI Codex через ChatGPT подписку (бесплатно если уже платишь Plus или Pro) Не нужен ключ. Просто напиши слово «Codex». После установки бота я попрошу ввести 8-символьный код на auth.openai.com — один раз.Пришли мне токен Telegram и один из трёх (ключ или слово «Codex»). Хоть в одном сообщении, хоть по отдельности. Я никуда не сохраняю и не показываю значения обратно.
case "$LLM_INPUT" in
sk-ant-*)
LLM_PROVIDER=anthropic ;;
sk-or-*)
LLM_PROVIDER=openrouter ;;
Codex|codex|CODEX|ChatGPT|chatgpt|OpenAI*|"openai codex"|OAuth|oauth)
LLM_PROVIDER=openai-codex
LLM_API_KEY="" # OAuth流程——此阶段无需密钥
;;
*)
say "Не распознал — это Anthropic-ключ (начинается на sk-ant-), OpenRouter-ключ (sk-or-) или слово 'Codex'?" && reprompt
;;
esacundefined
`BOT_USERNAME` (e.g. `your_ceo_bot`) is captured here for the one-click chat link in Step 5.
`BOT_USERNAME`(例如`your_ceo_bot`)在此处捕获,用于步骤5中的一键聊天链接。NETWORK_ID=$(yc vpc network get --name default --format json 2>/dev/null | jq -r .id 2>/dev/null)
if [[ -z "$NETWORK_ID" ]]; then
NETWORK_ID=$(yc vpc network create --name default --format json | jq -r .id)
fi
SUBNET_ID=$(yc vpc subnet get --name default-kz1-a --format json 2>/dev/null | jq -r .id 2>/dev/null)
if [[ -z "$SUBNET_ID" ]]; then
# Pick a /24 from 10.130.x.x that doesn't collide with the user's other subnets
SUBNET_ID=$(yc vpc subnet create \
--name default-kz1-a \
--network-id "$NETWORK_ID" \
--zone kz1-a \
--range 10.130.0.0/24 \
--format json | jq -r .id)
fiMY_IP=$(curl -fsS --max-time 5 https://api.ipify.org 2>/dev/null \
|| curl -fsS --max-time 5 https://icanhazip.com 2>/dev/null \
|| echo "") # empty → fall back to 0.0.0.0/0 (fail2ban catches the rest)TELEGRAM_CHAT_ID{{TELEGRAM_BOT_TOKEN}}{{SSH_PUBLIC_KEY}}~/.ssh/id_ed25519.pub{{LLM_ENV_LINE}}| Provider | Substituted line |
|---|---|
| anthropic | |
| openrouter | |
| openai-codex | (empty string — no env var at this stage; OAuth fills the profile after Step 4.5) |
/tmp/openclaw-cloud-init.yamlSSH_CIDR="${MY_IP:+${MY_IP}/32}"
SSH_CIDR="${SSH_CIDR:-0.0.0.0/0}"
SG_ID=$(yc vpc security-group create \
--name "${VM_NAME}-sg" \
--network-id "$NETWORK_ID" \
--rule "direction=ingress,port=22,protocol=tcp,v4-cidrs=[${SSH_CIDR}]" \
--rule "direction=egress,from-port=0,to-port=65535,protocol=any,v4-cidrs=[0.0.0.0/0]" \
--format json | jq -r .id)--network-id--network-namestandard-v3standard-v2PLATFORM=standard-v3
yc compute instance create \
--name "${VM_NAME}" \
--zone kz1-a \
--platform "$PLATFORM" \
--cores 2 --memory 4 \
--network-interface "subnet-id=${SUBNET_ID},nat-ip-version=ipv4,security-group-ids=${SG_ID}" \
--create-boot-disk "type=network-ssd,size=30,image-folder-id=standard-images,image-family=ubuntu-2404-lts" \
--ssh-key ~/.ssh/id_ed25519.pub \
--metadata-from-file user-data=/tmp/openclaw-cloud-init.yaml \
--hostname "${VM_NAME}" \
--format json > /tmp/openclaw-vm.json 2>/tmp/openclaw-vm.errNETWORK_ID=$(yc vpc network get --name default --format json 2>/dev/null | jq -r .id 2>/dev/null)
if [[ -z "$NETWORK_ID" ]]; then
NETWORK_ID=$(yc vpc network create --name default --format json | jq -r .id)
fi
SUBNET_ID=$(yc vpc subnet get --name default-kz1-a --format json 2>/dev/null | jq -r .id 2>/dev/null)
if [[ -z "$SUBNET_ID" ]]; then
# 从10.130.x.x中选择一个不与用户其他子网冲突的/24网段
SUBNET_ID=$(yc vpc subnet create \
--name default-kz1-a \
--network-id "$NETWORK_ID" \
--zone kz1-a \
--range 10.130.0.0/24 \
--format json | jq -r .id)
fiMY_IP=$(curl -fsS --max-time 5 https://api.ipify.org 2>/dev/null \
|| curl -fsS --max-time 5 https://icanhazip.com 2>/dev/null \
|| echo "") # 空值 → 回退为0.0.0.0/0(fail2ban处理其余防护)TELEGRAM_CHAT_ID{{TELEGRAM_BOT_TOKEN}}{{SSH_PUBLIC_KEY}}~/.ssh/id_ed25519.pub{{LLM_ENV_LINE}}| 提供商 | 替换后的行 |
|---|---|
| anthropic | |
| openrouter | |
| openai-codex | (空字符串——此阶段无需环境变量;OAuth会在步骤4.5后填充配置文件) |
/tmp/openclaw-cloud-init.yamlSSH_CIDR="${MY_IP:+${MY_IP}/32}"
SSH_CIDR="${SSH_CIDR:-0.0.0.0/0}"
SG_ID=$(yc vpc security-group create \
--name "${VM_NAME}-sg" \
--network-id "$NETWORK_ID" \
--rule "direction=ingress,port=22,protocol=tcp,v4-cidrs=[${SSH_CIDR}]" \
--rule "direction=egress,from-port=0,to-port=65535,protocol=any,v4-cidrs=[0.0.0.0/0]" \
--format json | jq -r .id)--network-id--network-namestandard-v3standard-v2PLATFORM=standard-v3
yc compute instance create \
--name "${VM_NAME}" \
--zone kz1-a \
--platform "$PLATFORM" \
--cores 2 --memory 4 \
--network-interface "subnet-id=${SUBNET_ID},nat-ip-version=ipv4,security-group-ids=${SG_ID}" \
--create-boot-disk "type=network-ssd,size=30,image-folder-id=standard-images,image-family=ubuntu-2404-lts" \
--ssh-key ~/.ssh/id_ed25519.pub \
--metadata-from-file user-data=/tmp/openclaw-cloud-init.yaml \
--hostname "${VM_NAME}" \
--format json > /tmp/openclaw-vm.json 2>/tmp/openclaw-vm.err
Capture `external_ipv4_address` from `/tmp/openclaw-vm.json` (`.network_interfaces[0].primary_v4_address.one_to_one_nat.address`). Then one sentence to the user:
> VM создана. Ставлю OpenClaw — займёт около 10 минут. Можешь пока заварить чай.
If the instance create errors with `billing account is not active` or `billing_disabled` — that's the one billing case we couldn't detect in Step 0 (because there's no `yc billing` on KZ). Tell the user: "Похоже, в Yandex Cloud Kazakhstan не активирован биллинг. Открой https://kz.console.yandex.cloud/billing — там подсказка. Когда активируешь, запусти меня снова — VM подхвачу автоматически." Stop.
从`/tmp/openclaw-vm.json`中捕获`external_ipv4_address`(`.network_interfaces[0].primary_v4_address.one_to_one_nat.address`)。然后向用户发送一句话:
> VM создана. Ставлю OpenClaw — займёт около 10 минут. Можешь пока заварить чай.
若实例创建时出现`billing account is not active`或`billing_disabled`错误——这是步骤0中无法检测到的唯一计费情况(因为KZ区域没有`yc billing`)。告知用户:“Похоже, в Yandex Cloud Kazakhstan не активирован биллинг. Открой https://kz.console.yandex.cloud/billing — там подсказка. Когда активируешь, запусти меня снова — VM подхвачу автоматически.” 停止执行。ssh -o StrictHostKeyChecking=accept-new -o ConnectTimeout=5 openclaw@$IP \
'test -f /var/lib/openclaw-bootstrap-done && echo READY || echo PENDING'tail -1 /var/log/openclaw-bootstrap.log| If the log mentions | Tell the user |
|---|---|
| firewall / hardening | "Настраиваю файрвол и SSH" |
| nodesource / Node | "Ставлю Node.js" |
| "Качаю OpenClaw" |
| ceo-ai-os / install.sh | "Загружаю CEO-скиллы" |
| openclaw onboard / config | "Подключаю Telegram и LLM" |
| systemd / health | "Запускаю бот" |
references/04-troubleshooting.mdssh -o StrictHostKeyChecking=accept-new -o ConnectTimeout=5 openclaw@$IP \
'test -f /var/lib/openclaw-bootstrap-done && echo READY || echo PENDING'tail -1 /var/log/openclaw-bootstrap.log| 日志提及内容 | 告知用户 |
|---|---|
| firewall / hardening | "Настраиваю файрвол и SSH" |
| nodesource / Node | "Ставлю Node.js" |
| "Качаю OpenClaw" |
| ceo-ai-os / install.sh | "Загружаю CEO-скиллы" |
| openclaw onboard / config | "Подключаю Telegram и LLM" |
| systemd / health | "Запускаю бот" |
references/04-troubleshooting.mdLLM_PROVIDER=openai-codexLLM_PROVIDER=openai-codexanthropicopenroutergateway.envopenai-codexssh -tt -o ServerAliveInterval=30 openclaw@$IP \
"openclaw models auth login --provider openai-codex --device-code" \
| tee /tmp/openclaw-oauth.loghttps://auth.openai.com/codex/devicehttps://auth.openai.com/deviceABCD-1234/tmp/openclaw-oauth.logПоследний шаг — подключи бота к ChatGPT.Открой в браузере: https://auth.openai.com/codex/deviceВведи код: ABCD-1234Войди под аккаунтом ChatGPT (Plus или Pro) и разреши доступ. Жду до 15 минут.
auth-profiles.json[shown on the local device only]/tmp/openclaw-oauth.logssh -ttssh openclaw@$IPopenclaw models auth login --provider openai-codex --device-codeundefinedanthropicopenroutergateway.envopenai-codexssh -tt -o ServerAliveInterval=30 openclaw@$IP \
"openclaw models auth login --provider openai-codex --device-code" \
| tee /tmp/openclaw-oauth.loghttps://auth.openai.com/codex/devicehttps://auth.openai.com/deviceABCD-1234/tmp/openclaw-oauth.logПоследний шаг — подключи бота к ChatGPT.Открой в браузере: https://auth.openai.com/codex/deviceВведи код: ABCD-1234Войди под аккаунтом ChatGPT (Plus или Pro) и разреши доступ. Жду до 15 минут.
auth-profiles.json[shown on the local device only]/tmp/openclaw-oauth.logssh -ttssh openclaw@$IPopenclaw models auth login --provider openai-codex --device-codeundefined
If after 15 minutes the SSH session timed out and `auth-profiles.json` still has no `openai-codex` profile: tell the user "не получилось войти в ChatGPT, давай попробуем ещё раз" and re-run the SSH `openclaw models auth login` command. Don't kill the VM — only the OAuth step needs to be retried.
若15分钟后SSH会话超时,且`auth-profiles.json`仍无`openai-codex`配置文件:告知用户“не получилось войти в ChatGPT, давай попробуем ещё раз”,并重新执行SSH `openclaw models auth login`命令。请勿销毁虚拟机——仅需重试OAuth步骤。/var/lib/openclaw-bootstrap-donepairingopenclaw pairing approve/var/lib/openclaw-bootstrap-donepairingopenclaw pairing approve/startdmPolicy=pairingissuePairingChallenge()openclaw pairing approve telegram ABCD-1234openclaw pairing list telegram --format json/startdmPolicy=pairingissuePairingChallenge()openclaw pairing approve telegram ABCD-1234openclaw pairing list telegram --format jsonБот готов. Открой его в Telegram: https://t.me/{{BOT_USERNAME}} и нажми./startБот пришлёт тебе короткое сообщение с кодом — ничего с ним делать не надо, я подтвержу доступ автоматически за пару секунд. После этого можешь начать переписываться с ботом как обычно.
Бот готов. Открой его в Telegram: https://t.me/{{BOT_USERNAME}} и нажми./startБот пришлёт тебе короткое сообщение с кодом — ничего с ним делать не надо, я подтвержу доступ автоматически за пару секунд. После этого можешь начать переписываться с ботом как обычно.
undefinedundefinedundefinedundefinedopenclaw pairing list telegram --format jsonsrc/gateway/protocol/schema/devices.tssenderIdrequestIdchatIdcode.chatId == $CHAT_IDxargs approveundefinedopenclaw pairing list telegram --format jsonsrc/gateway/protocol/schema/devices.tssenderIdrequestIdchatIdcode.chatId == $CHAT_IDxargs approveundefinedundefinedundefinedssh openclaw@$IP "
openclaw config set channels.telegram.dmPolicy allowlist
openclaw config set channels.telegram.allowFrom '[${CHAT_ID}]'
echo 'TELEGRAM_CHAT_ID=${CHAT_ID}' >> /home/openclaw/.openclaw/gateway.env
systemctl --user restart openclaw-gateway
"/healthfor i in $(seq 1 30); do
ssh openclaw@$IP 'curl -fsS -m 3 http://127.0.0.1:18789/health' >/dev/null 2>&1 && break
sleep 2
done/startssh openclaw@$IP "
openclaw config set channels.telegram.dmPolicy allowlist
openclaw config set channels.telegram.allowFrom '[${CHAT_ID}]'
echo 'TELEGRAM_CHAT_ID=${CHAT_ID}' >> /home/openclaw/.openclaw/gateway.env
systemctl --user restart openclaw-gateway
"/healthfor i in $(seq 1 30); do
ssh openclaw@$IP 'curl -fsS -m 3 http://127.0.0.1:18789/health' >/dev/null 2>&1 && break
sleep 2
doneUSER_LANGUAGEundefinedUSER_LANGUAGEundefinedundefinedundefinedssh openclaw@$IP "
timeout 90 journalctl --user -u openclaw-gateway -f --no-pager 2>/dev/null \
| grep -m1 -E 'telegram.*sent|outgoing.*telegram|sendMessage.*ok'
"references/04-troubleshooting.mdgetUpdatesLAST_OFFSET=$(curl -fsS "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/getUpdates?offset=-1" \
| jq -r '.result[-1].update_id // 0')
for i in $(seq 1 45); do
REPLY=$(curl -fsS "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/getUpdates?offset=$((LAST_OFFSET+1))&timeout=2" \
| jq -r '.result[]? | select(.message.from.is_bot==true) | .message.text' \
| head -n1)
[[ -n "$REPLY" ]] && break
sleep 2
done
[[ -z "$REPLY" ]] && fail "Не вижу ответа бота в getUpdates через 90с"getUpdatesБот должен был тебе ответить в Telegram. Ответил?
references/04-troubleshooting.mdssh openclaw@$IP "
timeout 90 journalctl --user -u openclaw-gateway -f --no-pager 2>/dev/null \
| grep -m1 -E 'telegram.*sent|outgoing.*telegram|sendMessage.*ok'
"references/04-troubleshooting.mdgetUpdatesLAST_OFFSET=$(curl -fsS "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/getUpdates?offset=-1" \
| jq -r '.result[-1].update_id // 0')
for i in $(seq 1 45); do
REPLY=$(curl -fsS "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/getUpdates?offset=$((LAST_OFFSET+1))&timeout=2" \
| jq -r '.result[]? | select(.message.from.is_bot==true) | .message.text' \
| head -n1)
[[ -n "$REPLY" ]] && break
sleep 2
done
[[ -z "$REPLY" ]] && fail "Не вижу ответа бота в getUpdates через 90с"getUpdatesБот должен был тебе ответить в Telegram. Ответил?
references/04-troubleshooting.mdLOCALE_PACK="/usr/local/share/openclaw-locale-${USER_LANGUAGE}.md"
ssh openclaw@$IP "
test -f $LOCALE_PACK && cat $LOCALE_PACK >> ~/.openclaw/workspace/USER.md
# Trigger session reset so the bot re-reads USER.md
openclaw sessions reset --channel telegram --to ${CHAT_ID} 2>/dev/null || true
"LOCALE_PACK="/usr/local/share/openclaw-locale-${USER_LANGUAGE}.md"
ssh openclaw@$IP "
test -f $LOCALE_PACK && cat $LOCALE_PACK >> ~/.openclaw/workspace/USER.md
# 触发会话重置,让机器人重新读取USER.md
openclaw sessions reset --channel telegram --to ${CHAT_ID} 2>/dev/null || true
"openclaw-user-onboardingopenclaw-user-onboardingopenclaw-user-onboardingUSER.md| Variable | Source in this wizard |
|---|---|
| Step 2e |
| Step 4 (auto-detected from |
| Step 1 (Telegram token the user pasted) |
| Step 0 (detected from user's first messages) |
| |
Бот живой. Последний шаг — расскажи о себе коротко, чтобы я с первого сообщения был полезным.
openclaw-user-onboardingUSER.md~/.openclaw/workspace/USER.mdopenclaw:openclawopenclaw-user-onboardingopenclaw-user-onboardingopenclaw-user-onboardingUSER.md| 变量 | 来源 |
|---|---|
| 步骤2e中的 |
| 步骤4(从 |
| 步骤1(用户粘贴的Telegram令牌) |
| 步骤0(从用户最初几条消息检测) |
| |
Бот живой. Последний шаг — расскажи о себе коротко, чтобы я с первого сообщения был полезным.
openclaw-user-onboardingUSER.md~/.openclaw/workspace/USER.mdopenclaw:openclawopenclaw-user-onboardingopenclaw-user-onboardingLLMOpenClaw запущен в Yandex Cloud Kazakhstan.
VM : openclaw-bot (kz1-a, 2 vCPU / 4 GB / 30 GB SSD)
IP : 84.x.x.x
Бот : @your_bot_name
LLM : <one of three lines below>
Workspace : CEO AI OS (48 CEO-скиллов)
Стоимость : ~3–5 ₸/час, ~100 ₸/день (VM) + LLM по тарифу провайдера| Provider | Line |
|---|---|
| anthropic | |
| openrouter | |
| openai-codex | |
If the verification ping doesn't get a reply within 60 seconds, run `references/04-troubleshooting.md` §4 silently — don't claim success.LLMOpenClaw запущен в Yandex Cloud Kazakhstan.
VM : openclaw-bot (kz1-a, 2 vCPU / 4 GB / 30 GB SSD)
IP : 84.x.x.x
Бот : @your_bot_name
LLM : <以下三行之一>
Workspace : CEO AI OS (48 CEO-скиллов)
Стоимость : ~3–5 ₸/час, ~100 ₸/день (VM) + LLM по тарифу провайдера| 提供商 | 行内容 |
|---|---|
| anthropic | |
| openrouter | |
| openai-codex | |
若验证消息60秒内未收到回复,静默执行`references/04-troubleshooting.md` §4——请勿声称部署成功。| Detected condition | Silent fix |
|---|---|
| Install to |
Active | Create/activate a dedicated |
| User opens with "у меня workshop-ключ" but no bundle path | Ask once: "Где лежит файл? Можешь перетащить в чат". Then validate |
Plan B bundle has | Warn once: "Bundle от организатора новее, чем я умею. Попробую как есть." Try the standard Plan B steps. Surface any |
Plan B | Tell the user: "Кажется, организатор свернул облако. Напиши ему." Don't retry. |
| Endpoint set to KZ but cloud-id/folder-id are empty or RU-flavoured | Re-resolve via |
Multiple clouds returned by | Use the first; tell the user one line "использую облако |
| Create the default network silently, then create |
Subnet | Create it under the (existing or fresh) default network. |
| Retry once with |
| Always use |
| Generate a new one with no passphrase. |
| Caller IP can't be detected | Fall back to |
| Retry once after 30 seconds. If still fails, escalate. |
Gateway | Keep polling — composio plugin can take that long. Only escalate after 4 minutes. |
| Pairing approval returns "code not found" | Wait 3 seconds, re-list pairing requests. Telegram sometimes lags. |
| The schema field is |
| Bot replies in wrong language after locale pack applied | |
| Bot doesn't reply to verification ping within 30s | Restart adapter once before declaring failure. |
| 检测到的情况 | 静默修复 |
|---|---|
| 安装至 |
活动 | 创建/激活专属 |
| 用户以“у меня workshop-ключ”开头但未提供密钥包路径 | 询问一次:“Где лежит файл? Можешь перетащить в чат”。然后验证 |
方案B密钥包的 | 警告一次:“Bundle от организатора новее, чем я умею. Попробую как есть.” 尝试标准方案B步骤。直接展示任何 |
方案B中 | 告知用户:“Кажется, организатор свернул облако. Напиши ему.” 请勿重试。 |
| 端点已设置为KZ,但cloud-id/folder-id为空或属于RU区域 | 通过活动配置文件的 |
| 使用第一个;用一句话告知用户“использую облако |
| 静默创建默认网络,然后创建网段为 |
| 在(现有或新建的)默认网络下创建。 |
| 用 |
| 始终使用之前解析的 |
| 生成新的无密码密钥。 |
| 无法检测调用者IP | 回退为 |
| 30秒后重试一次。若仍失败,升级处理。 |
前90秒网关 | 持续轮询——composio插件可能需要这么长时间。仅在4分钟后升级处理。 |
| 配对批准返回“code not found” | 等待3秒,重新列出配对请求。Telegram有时会延迟。 |
| Schema字段是 |
| 应用区域包后机器人回复语言错误 | 通过SSH重新执行 |
| 验证消息30秒内未收到机器人回复 | 重启适配器一次,然后再宣布失败。 |
endpoint=api.yandexcloud.kz:443cloud-idfolder-idyc compute / vpc / resource-manageryc billingyc billing account listUnknown command 'billing account list'yc compute instance createyc resource-manager cloud list--network-name defaultyc vpc network get --name default--network-iddefault-kz1-aendpoint=api.yandexcloud.kz:443cloud-idfolder-idyc compute / vpc / resource-manageryc billingyc billing account listUnknown command 'billing account list'yc compute instance createyc resource-manager cloud list--network-name defaultyc vpc network get --name default--network-iddefault-kz1-a| Symptom | Where to look |
|---|---|
| |
| |
| |
| |
| Already handled by auto-recovery (retry with |
Cloud-init log shows | |
| |
User pressed | |
| Bot pairs but doesn't reply | |
SSH | |
/var/log/openclaw-bootstrap.logjournalctl --user -u openclaw-gateway -n 200| 症状 | 排查方向 |
|---|---|
向导配置文件设置后, | |
| |
| |
| |
| 已通过自动恢复处理(用 |
Cloud-init日志显示 | |
4分钟后 | |
用户按下/start但 | |
| 机器人已配对但不回复 | |
SSH报错 | |
/var/log/openclaw-bootstrap.logjournalctl --user -u openclaw-gateway -n 200references/01-prerequisites.mdreferences/02-network-and-security.mdreferences/03-openclaw-config.mdreferences/04-troubleshooting.mdreferences/05-workshop-key-mode.mdscripts/cloud-init.yamlreferences/01-prerequisites.mdreferences/02-network-and-security.mdreferences/03-openclaw-config.mdreferences/04-troubleshooting.mdreferences/05-workshop-key-mode.mdscripts/cloud-init.yaml| Skill | Required? | Role |
|---|---|---|
| required | Loaded by Step 0a; owns all post-install consultation (channels, use cases, debugging). |
| recommended | Auto-invoked at Step 5.5 to collect five user facts and write USER.md. If missing, Step 5.5 falls back to a placeholder USER.md and surfaces "поставь openclaw-user-onboarding и скажи 'онбординг'" in the final summary. |
| organizer-only | Matching organizer-side skill that produces the bundle files consumed by this skill's Plan B. Participants don't need it. |
| 技能 | 是否必需 | 角色 |
|---|---|---|
| 必需 | 步骤0a加载;负责所有安装后咨询(渠道、用例、调试)。 |
| 推荐 | 步骤5.5自动调用,收集用户五项信息并写入USER.md。若缺失,步骤5.5回退为占位符USER.md,并在最终总结中提及“поставь openclaw-user-onboarding и скажи 'онбординг'”。 |
| 仅组织者使用 | 对应的组织者端技能,生成本技能方案B中使用的密钥包。参与者无需使用。 |
openclaw-guideopenclaw-guideopenclaw-guideopenclaw-guide/references/06-troubleshooting.mdopenclaw-guide/references/use-cases.mdopenclaw-guide/references/channels.mdnpx skills add CodeAlive-AI/ceo-ai-os@install-openclaw-to-yc -g
npx skills add CodeAlive-AI/ceo-ai-os@openclaw-guide -gnpxhttps://github.com/CodeAlive-AI/ceo-ai-osskills/install-openclaw-to-ycskills/openclaw-guideopenclaw-guideopenclaw-guide/references/06-troubleshooting.mdopenclaw-guide/references/use-cases.mdopenclaw-guide/references/channels.mdnpx skills add CodeAlive-AI/ceo-ai-os@install-openclaw-to-yc -g
npx skills add CodeAlive-AI/ceo-ai-os@openclaw-guide -gnpxhttps://github.com/CodeAlive-AI/ceo-ai-osskills/install-openclaw-to-ycskills/openclaw-guide| Trigger ("user later asks for X") | Skill to suggest | One-line pitch |
|---|---|---|
| "I want a daily morning brief" | | Cron-driven morning + evening summary of metrics, calendar, and yesterday's wins. |
| "Help me prep for a strategic decision" | | Structured deliberation with explicit options, kill criteria, and a 7-day review. |
| "Research this company before my meeting" | | Exa-powered company profile (positioning, traction, team) in <30 s. |
| "Find people who fit ICP X" | | Multi-source lead discovery with enrichment. |
| "Watch what competitors are doing" | | Daily radar over competitor sites, blog, GitHub, hiring. |
| "I want to use CodeAlive search inside the bot" | (see | Adds |
https://github.com/CodeAlive-AI/ceo-ai-os/tree/main/skillsnpx skills add CodeAlive-AI/ceo-ai-os@<skill-name> -g| 触发条件(“用户之后询问X”) | 建议安装的技能 | 一句话介绍 |
|---|---|---|
| "I want a daily morning brief" | | 由Cron驱动的早晚总结,包含指标、日历和昨日成果。 |
| "Help me prep for a strategic decision" | | 结构化审议,包含明确选项、淘汰标准和7天回顾。 |
| "Research this company before my meeting" | | 基于Exa的公司概况(定位、业绩、团队),生成时间<30秒。 |
| "Find people who fit ICP X" | | 多渠道线索发现及信息补充。 |
| "Watch what competitors are doing" | | 每日监控竞争对手网站、博客、GitHub、招聘信息。 |
| "I want to use CodeAlive search inside the bot" | (见 | 为机器人添加 |
https://github.com/CodeAlive-AI/ceo-ai-os/tree/main/skillsnpx skills add CodeAlive-AI/ceo-ai-os@<skill-name> -gopenclaw-guide/references/<file>.md| User asks about | Read first |
|---|---|
| Adding WhatsApp / Slack / Discord / iMessage | |
| Setting up a daily brief, research workflow, decision playbook | |
| Adding CodeAlive search to the bot | |
| Bot stopped responding, OAuth re-auth, memory full | |
| Cron / heartbeat / scheduled jobs | |
openclaw-guide/references/<file>.md| 用户询问内容 | 先阅读 |
|---|---|
| 添加WhatsApp / Slack / Discord / iMessage | |
| 设置每日简报、研究工作流、决策手册 | |
| 为机器人添加CodeAlive搜索 | |
| 机器人停止响应、OAuth重新认证、内存已满 | |
| Cron / 心跳 / 定时任务 | |
openclaw-guide/references/channels.mdopenclaw-guide/references/use-cases.mdreferences/04-troubleshooting.mdopenclaw-guide/references/channels.mdopenclaw-guide/references/use-cases.mdreferences/04-troubleshooting.md