Communitygithub.com

配置通知

通过自然语言设置 Telegram、Discord、Slack 等通知集成

配置通知 是什么?

此技能允许用户通过自然语言交互,在 OMC 环境中配置第三方通知集成(Telegram、Discord、Slack)。它通过一系列引导步骤(AskUserQuestion)完成设置,包括检测现有配置、收集必要的 API 凭证(如令牌、Webhook URL、聊天 ID)、选择触发事件(如会话结束、需要输入)、以及可选的测试通知。支持平台包括 Telegram(使用 Bot API)、Discord(支持 Webhook 和 Bot API)、Slack(仅支持 Webhook)。配置最终写入 `~/.claude/.omc-config.json` 文件,同时支持通过环境变量替代配置。该技能适用于 Claude Code 等 AI 代理工具,确保用户在会话结束、等待输入或后台任务完成时得到即时提醒。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Yeachan-Heo/oh-my-claudecode/tree/main/skills/configure-notifications

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

配置通知 是做什么的?

设置 OMC 通知集成,以便在会话结束、需要输入或完成后台任务时收到提醒。

路由

根据用户请求或参数检测所需提供商:

  • 如果触发词或参数包含 "telegram" → 遵循 Telegram 部分
  • 如果触发词或参数包含 "discord" → 遵循 Discord 部分
  • 如果触发词或参数包含 "slack" → 遵循 Slack 部分
  • 如果未指定提供商,使用 AskUserQuestion:

问题: "您想配置哪个通知服务?"

选项:

  1. Telegram - Bot 令牌 + 聊天 ID。支持移动端和桌面端。
  2. Discord - Webhook 或 Bot 令牌 + 频道 ID。
  3. Slack - 传入 Webhook URL。

Telegram 设置

设置 Telegram 通知,以便 OMC 在会话结束、需要输入或完成后台任务时向您发送消息。

此技能的工作原理

这是一个交互式的、自然语言配置技能。通过 AskUserQuestion 向用户提问来引导设置。结果写入 ${CLAUDE_CONFIG_DIR:-~/.claude}/.omc-config.json。

步骤 1:检测现有配置

CONFIG_FILE="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/.omc-config.json"

if [ -f "$CONFIG_FILE" ]; then
  HAS_TELEGRAM=$(jq -r '.notifications.telegram.enabled // false' "$CONFIG_FILE" 2>/dev/null)
  CHAT_ID=$(jq -r '.notifications.telegram.chatId // empty' "$CONFIG_FILE" 2>/dev/null)
  PARSE_MODE=$(jq -r '.notifications.telegram.parseMode // "Markdown"' "$CONFIG_FILE" 2>/dev/null)

  if [ "$HAS_TELEGRAM" = "true" ]; then
    echo "EXISTING_CONFIG=true"
    echo "CHAT_ID=$CHAT_ID"
    echo "PARSE_MODE=$PARSE_MODE"
  else
    echo "EXISTING_CONFIG=false"
  fi
else
  echo "NO_CONFIG_FILE"
fi

如果找到现有配置,向用户显示当前配置内容,并询问是否要更新或重新配置。

步骤 2:创建 Telegram Bot

如果用户没有 Bot,引导其创建:

要设置 Telegram 通知,您需要一个 Telegram Bot 令牌和您的聊天 ID。

创建 Bot(如果没有):
1. 打开 Telegram 并搜索 @BotFather
2. 发送 /newbot
3. 选择一个名称(例如 "My OMC Notifier")
4. 选择一个用户名(例如 "my_omc_bot")
5. BotFather 会给您一个令牌,格式如:123456789:ABCdefGHIjklMNOpqrsTUVwxyz

获取您的聊天 ID:
1. 与您的新 Bot 开始聊天(发送 /start)
2. 访问:https://api.telegram.org/bot<YOUR_TOKEN>/getUpdates
3. 查找 "chat":{"id":YOUR_CHAT_ID}
   - 个人聊天 ID 为正数(例如 123456789)
   - 群组聊天 ID 为负数(例如 -1001234567890)

步骤 3:收集 Bot 令牌

使用 AskUserQuestion:

问题: "粘贴您的 Telegram Bot 令牌(来自 @BotFather)"

用户将在“其他”字段中输入其令牌。

验证 令牌:

  • 必须匹配模式:数字:字母数字(例如 123456789:ABCdefGHI...)
  • 如果无效,解释格式并再次询问

步骤 4:收集聊天 ID

使用 AskUserQuestion:

问题: "粘贴您的 Telegram 聊天 ID(来自 getUpdates API 的数字)"

用户将在“其他”字段中输入其聊天 ID。

验证 聊天 ID:

  • 必须是一个数字(个人为正数,群组为负数)
  • 如果无效,提供帮助以找到它:
# 帮助用户找到他们的聊天 ID
BOT_TOKEN="USER_PROVIDED_TOKEN"
echo "正在获取最近消息以找到您的聊天 ID..."
curl -s "https://api.telegram.org/bot${BOT_TOKEN}/getUpdates" | jq '.result[-1].message.chat.id // .result[-1].message.from.id // "未找到消息 - 请先向您的 Bot 发送 /start"'

步骤 5:选择解析模式

使用 AskUserQuestion:

问题: "您更喜欢哪种消息格式?"

选项:

  1. Markdown(推荐) - 使用 Markdown 语法的粗体、斜体、代码块
  2. HTML - 使用 HTML 标签的粗体、斜体、代码

步骤 6:配置事件

使用带 multiSelect 的 AskUserQuestion:

问题: "哪些事件应触发 Telegram 通知?"

选项(multiSelect: true):

  1. 会话结束(推荐) - 当 Claude 会话完成时
  2. 需要输入 - 当 Claude 等待您的回复时(适合长时间运行的任务)
  3. 会话开始 - 当新会话开始时
  4. 会话继续 - 当持久模式保持会话存活时

默认选择:session-end + ask-user-question。

步骤 7:写入配置

读取现有配置,合并新的 Telegram 设置,然后写回:

CONFIG_FILE="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/.omc-config.json"
mkdir -p "$(dirname "$CONFIG_FILE")"

if [ -f "$CONFIG_FILE" ]; then
  EXISTING=$(cat "$CONFIG_FILE")
else
  EXISTING='{}'
fi

# BOT_TOKEN, CHAT_ID, PARSE_MODE 从用户收集
# 示例值:
echo "$EXISTING" | jq \
  --arg token "$BOT_TOKEN" \
  --arg chatId "$CHAT_ID" \
  --arg parseMode "$PARSE_MODE" \
  '.notifications = (.notifications // {enabled: true}) |
   .notifications.enabled = true |
   .notifications.telegram = {
     enabled: true,
     botToken: $token,
     chatId: $chatId,
     parseMode: $parseMode
   }' > "$CONFIG_FILE"

如果用户未选择所有事件,添加事件特定配置:

对于每个未选择的事件,禁用它:

# 示例:如果未选择 session-start,则禁用它
echo "$(cat "$CONFIG_FILE")" | jq \
  '.notifications.events = (.notifications.events // {}) |
   .notifications.events["session-start"] = {enabled: false}' > "$CONFIG_FILE"

步骤 8:测试配置

写入配置后,提供发送测试通知的选项:

使用 AskUserQuestion:

问题: "发送测试通知以验证设置?"

选项:

  1. 是的,立即测试(推荐) - 向您的 Telegram 聊天发送测试消息
  2. 不,稍后测试 - 跳过测试

如果测试:

BOT_TOKEN="USER_PROVIDED_TOKEN"
CHAT_ID="USER_PROVIDED_CHAT_ID"
PARSE_MODE="Markdown"

RESPONSE=$(curl -s -w "\n%{http_code}" \
  "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \
  -d "chat_id=${CHAT_ID}" \
  -d "parse_mode=${PARSE_MODE}" \
  -d "text=OMC 测试通知 - Telegram 已配置!")

HTTP_CODE=$(echo "$RESPONSE" | tail -1)
BODY=$(echo "$RESPONSE" | head -1)

if [ "$HTTP_CODE" = "200" ]; then
  echo "测试通知发送成功!"
else
  echo "失败(HTTP $HTTP_CODE):"
  echo "$BODY" | jq -r '.description // "未知错误"' 2>/dev/null || echo "$BODY"
fi

报告成功或失败。常见问题:

  • 401 Unauthorized:Bot 令牌无效
  • 400 Bad Request: chat not found:聊天 ID 错误,或用户尚未向 Bot 发送 /start
  • 网络错误:检查到 api.telegram.org 的连接

步骤 9:确认

显示最终配置摘要:

Telegram 通知已配置!

  Bot:       @你的_bot_用户名
  聊天 ID:   123456789
  格式:      Markdown
  事件:      session-end, ask-user-question

配置保存至:~/.claude/.omc-config.json

您也可以通过环境变量设置:
  OMC_TELEGRAM_BOT_TOKEN=123456789:ABCdefGHI...
  OMC_TELEGRAM_CHAT_ID=123456789

要重新配置:/oh-my-claudecode:configure-notifications telegram
要配置 Discord:/oh-my-claudecode:configure-notifications discord
要配置 Slack:/oh-my-claudecode:configure-notifications slack

环境变量替代方案

用户可以通过在 shell 配置文件中设置环境变量来完全跳过此向导:

export OMC_TELEGRAM_BOT_TOKEN="123456789:ABCdefGHIjklMNOpqrsTUVwxyz"
export OMC_TELEGRAM_CHAT_ID="123456789"

通知系统会自动检测环境变量,无需 .omc-config.json。


Discord 设置

设置 Discord 通知,以便 OMC 在会话结束、需要输入或完成后台任务时向您发送消息。

此技能的工作原理

这是一个交互式的、自然语言配置技能。通过 AskUserQuestion 向用户提问来引导设置。结果写入 ${CLAUDE_CONFIG_DIR:-~/.claude}/.omc-config.json。

步骤 1:检测现有配置

CONFIG_FILE="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/.omc-config.json"

if [ -f "$CONFIG_FILE" ]; then
  # 检查现有的 discord 配置
  HAS_DISCORD=$(jq -r '.notifications.discord.enabled // false' "$CONFIG_FILE" 2>/dev/null)
  HAS_DISCORD_BOT=$(jq -r '.notifications["discord-bot"].enabled // false' "$CONFIG_FILE" 2>/dev/null)
  WEBHOOK_URL=$(jq -r '.notifications.discord.webhookUrl // empty' "$CONFIG_FILE" 2>/dev/null)
  MENTION=$(jq -r '.notifications.discord.mention // empty' "$CONFIG_FILE" 2>/dev/null)

  if [ "$HAS_DISCORD" = "true" ] || [ "$HAS_DISCORD_BOT" = "true" ]; then
    echo "EXISTING_CONFIG=true"
    echo "WEBHOOK_CONFIGURED=$HAS_DISCORD"
    echo "BOT_CONFIGURED=$HAS_DISCORD_BOT"
    [ -n "$WEBHOOK_URL" ] && echo "WEBHOOK_URL=$WEBHOOK_URL"
    [ -n "$MENTION" ] && echo "MENTION=$MENTION"
  else
    echo "EXISTING_CONFIG=false"
  fi
else
  echo "NO_CONFIG_FILE"
fi

如果找到现有配置,向用户显示当前配置内容,并询问是否要更新或重新配置。

步骤 2:选择 Discord 方法

使用 AskUserQuestion:

问题: "您希望如何发送 Discord 通知?"

选项:

  1. Webhook(推荐) - 在您的 Discord 频道中创建一个 Webhook。简单,无需 Bot。只需粘贴 URL。
  2. Bot API - 使用 Discord Bot 令牌 + 频道 ID。更灵活,但需要一个 Bot 应用程序。

步骤 3A:Webhook 设置

如果用户选择 Webhook:

使用 AskUserQuestion:

问题: "粘贴您的 Discord Webhook URL。要创建一个:服务器设置 > 集成 > Webhooks > 新建 Webhook > 复制 URL"

用户将在“其他”字段中输入其 Webhook URL。

验证 URL:

  • 必须以 https://discord.com/api/webhooks/ 或 https://discordapp.com/api/webhooks/ 开头
  • 如果无效,解释格式并再次询问

步骤 3B:Bot API 设置

如果用户选择 Bot API:

提出两个问题:

  1. "粘贴您的 Discord Bot 令牌" - 来自 discord.com/developers > 您的应用 > Bot > 令牌
  2. "粘贴频道 ID" - 右键点击频道 > 复制频道 ID(需要开发者模式)

步骤 4:配置提及(用户 @ 通知)

使用 AskUserQuestion:

问题: "您希望通知中提到(@通知)某人吗?"

选项:

  1. 是的,提及一个用户 - 通过 Discord 用户 ID 标记特定用户
  2. 是的,提及一个角色 - 通过角色 ID 标记一个角色
  3. 不提及 - 仅发布消息,不 @通知任何人

如果用户希望提及一个用户:

询问:"要提及的 Discord 用户 ID 是什么?(右键点击用户 > 复制用户 ID,需要开发者模式)"

提及格式为:<@USER_ID>(例如 <@1465264645320474637>)

如果用户希望提及一个角色:

询问:"要提及的 Discord 角色 ID 是什么?(服务器设置 > 角色 > 右键点击角色 > 复制角色 ID)"

提及格式为:<@&ROLE_ID>(例如 <@&123456789>)

步骤 5:配置事件

使用带 multiSelect 的 AskUserQuestion:

问题: "哪些事件应触发 Discord 通知?"

选项(multiSelect: true):

  1. 会话结束(推荐) - 当 Claude 会话完成时
  2. 需要输入 - 当 Claude 等待您的回复时(适合长时间运行的任务)
  3. 会话开始 - 当新会话开始时
  4. 会话继续 - 当持久模式保持会话存活时

默认选择:session-end + ask-user-question。

步骤 6:可选用户名覆盖

使用 AskUserQuestion:

问题: "自定义 Bot 显示名称?(在 Discord 中显示为 Webhook 发送者名称)"

选项:

  1. OMC(默认) - 显示为 "OMC"
  2. Claude Code - 显示为 "Claude Code"
  3. 自定义 - 输入自定义名称

步骤 7:写入配置

读取现有配置,合并新的 Discord 设置,然后写回:

CONFIG_FILE="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/.omc-config.json"
mkdir -p "$(dirname "$CONFIG_FILE")"

if [ -f "$CONFIG_FILE" ]; then
  EXISTING=$(cat "$CONFIG_FILE")
else
  EXISTING='{}'
fi

对于 Webhook 方法:

使用收集的值构建通知对象,并使用 jq 合并到 .omc-config.json:

# WEBHOOK_URL, MENTION, USERNAME 从用户收集
# EVENTS 是启用的事件列表

echo "$EXISTING" | jq \
  --arg url "$WEBHOOK_URL" \
  --arg mention "$MENTION" \
  --arg username "$USERNAME" \
  '.notifications = (.notifications // {enabled: true}) |
   .notifications.enabled = true |
   .notifications.discord = {
     enabled: true,
     webhookUrl: $url,
     mention: (if $mention == "" then null else $mention end),
     username: (if $username == "" then null else $username end)
   }' > "$CONFIG_FILE"

对于 Bot API 方法:

echo "$EXISTING" | jq \
  --arg token "$BOT_TOKEN" \
  --arg channel "$CHANNEL_ID" \
  --arg mention "$MENTION" \
  '.notifications = (.notifications // {enabled: true}) |
   .notifications.enabled = true |
   .notifications["discord-bot"] = {
     enabled: true,
     botToken: $token,
     channelId: $channel,
     mention: (if $mention == "" then null else $mention end)
   }' > "$CONFIG_FILE"

如果用户未选择所有事件,添加事件特定配置:

对于每个未选择的事件,禁用它:

# 示例:如果未选择 session-start,则禁用它
echo "$(cat "$CONFIG_FILE")" | jq \
  '.notifications.events = (.notifications.events // {}) |
   .notifications.events["session-start"] = {enabled: false}' > "$CONFIG_FILE"

步骤 8:测试配置

写入配置后,提供发送测试通知的选项:

使用 AskUserQuestion:

问题: "发送测试通知以验证设置?"

选项:

  1. 是的,立即测试(推荐) - 向您的 Discord 频道发送测试消息
  2. 不,稍后测试 - 跳过测试

如果测试:

# 对于 webhook:
curl -s -o /dev/null -w "%{http_code}" \
  -H "Content-Type: application/json" \
  -d "{\"content\": \"${MENTION:+$MENTION\n}OMC 测试通知 - Discord 已配置!\"}" \
  "$WEBHOOK_URL"

报告成功或失败。如果失败,可能的原因包括:URL 无效、权限不足或频道不存在。

步骤 9:确认

显示最终配置摘要(方法决定的示例布局)。


Slack 设置

设置 Slack 通知,以便 OMC 在会话结束、需要输入或完成后台任务时向您发送消息。

此技能的工作原理

这是一个交互式的、自然语言配置技能。通过 AskUserQuestion 向用户提问来引导设置。结果写入 ${CLAUDE_CONFIG_DIR:-~/.claude}/.omc-config.json。

步骤 1:检测现有配置

CONFIG_FILE="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/.omc-config.json"

if [ -f "$CONFIG_FILE" ]; then
  HAS_SLACK=$(jq -r '.notifications.slack.enabled // false' "$CONFIG_FILE" 2>/dev/null)
  WEBHOOK_URL=$(jq -r '.notifications.slack.webhookUrl // empty' "$CONFIG_FILE" 2>/dev/null)
  CHANNEL=$(jq -r '.notifications.slack.channel // empty' "$CONFIG_FILE" 2>/dev/null)

  if [ "$HAS_SLACK" = "true" ]; then
    echo "EXISTING_CONFIG=true"
    echo "WEBHOOK_URL=$WEBHOOK_URL"
    [ -n "$CHANNEL" ] && echo "CHANNEL=$CHANNEL"
  else
    echo "EXISTING_CONFIG=false"
  fi
else
  echo "NO_CONFIG_FILE"
fi

如果找到现有配置,向用户显示当前配置内容,并询问是否要更新或重新配置。

步骤 2:收集 Webhook URL

使用 AskUserQuestion:

问题: "粘贴您的 Slack 传入 Webhook URL。要创建一个:访问 https://api.slack.com/apps > 创建新应用 > 启用传入 Webhooks > 添加新的 Webhook 到工作区"

用户将在“其他”字段中输入其 Webhook URL。

验证 URL:

  • 必须以 https://hooks.slack.com/services/ 开头
  • 如果无效,解释格式并再次询问

步骤 3:配置频道(可选)

使用 AskUserQuestion:

问题: "要发布通知的 Slack 频道?(覆盖 Webhook 的默认频道)"

选项:

  1. 使用 Webhook 默认频道 - 发布到 Webhook 配置时指定的频道
  2. 指定频道 - 手动输入频道名称(例如 #general)

如果用户选择指定频道:

确保频道名称以 # 开头。如果不是,自动添加。

步骤 4:配置事件

使用带 multiSelect 的 AskUserQuestion:

问题: "哪些事件应触发 Slack 通知?"

选项(multiSelect: true):

  1. 会话结束(推荐) - 当 Claude 会话完成时
  2. 需要输入 - 当 Claude 等待您的回复时(适合长时间运行的任务)
  3. 会话开始 - 当新会话开始时
  4. 会话继续 - 当持久模式保持会话存活时

默认选择:session-end + ask-user-question。

步骤 5:配置消息格式(可选)

使用 AskUserQuestion:

问题: "通知的文本格式偏好?"

选项:

  1. 简洁(默认) - 短消息:事件 + 简要上下文
  2. 详细 - 完整信息,包括会话 ID 和详细状态

步骤 6:写入配置

读取现有配置,合并新的 Slack 设置,然后写回:

CONFIG_FILE="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/.omc-config.json"
mkdir -p "$(dirname "$CONFIG_FILE")"

if [ -f "$CONFIG_FILE" ]; then
  EXISTING=$(cat "$CONFIG_FILE")
else
  EXISTING='{}'
fi

# WEBHOOK_URL, CHANNEL, FORMAT 从用户收集
echo "$EXISTING" | jq \
  --arg url "$WEBHOOK_URL" \
  --arg channel "$CHANNEL" \
  --arg format "$FORMAT" \
  '.notifications = (.notifications // {enabled: true}) |
   .notifications.enabled = true |
   .notifications.slack = {
     enabled: true,
     webhookUrl: $url,
     channel: (if $channel == "" then null else $channel end),
     format: $format
   }' > "$CONFIG_FILE"

如果用户未选择所有事件,添加事件特定配置:

对于每个未选择的事件,禁用它:

# 示例:如果未选择 session-start,则禁用它
echo "$(cat "$CONFIG_FILE")" | jq \
  '.notifications.events = (.notifications.events // {}) |
   .notifications.events["session-start"] = {enabled: false}' > "$CONFIG_FILE"

步骤 7:测试配置

写入配置后,提供发送测试通知的选项:

使用 AskUserQuestion:

问题: "发送测试通知以验证设置?"

选项:

  1. 是的,立即测试(推荐) - 向您的 Slack 频道发送测试消息
  2. 不,稍后测试 - 跳过测试

如果测试:

curl -s -o /dev/null -w "%{http_code}" \
  -H "Content-Type: application/json" \
  -d "{\"text\": \"OMC 测试通知 - Slack 已配置!\"}" \
  "$WEBHOOK_URL"

报告成功或失败。常见问题:

  • invalid_webhook_url:URL 无效
  • channel_not_found:指定的频道不存在
  • 权限不足:Webhook 未正确配置

步骤 8:确认

显示最终配置摘要:

Slack 通知已配置!

  Webhook: https://hooks.slack.com/services/T00/B00/xxxxx
  频道:    #general(或 Webhook 默认)
  格式:    简洁
  事件:    session-end, ask-user-question

配置保存至:~/.claude/.omc-config.json

您也可以通过环境变量设置:
  OMC_SLACK_WEBHOOK_URL=https://hooks.slack.com/services/T00/B00/xxxxx

环境变量替代方案

用户可以通过在 shell 配置文件中设置环境变量来完全跳过此向导:

export OMC_SLACK_WEBHOOK_URL="https://hooks.slack.com/services/T00/B00/xxxxx"

通知系统会自动检测环境变量,无需 .omc-config.json。


支持

  • 对于任何提供商的配置问题,请尝试重新运行 /oh-my-claudecode:configure-notifications <provider>。
  • 手动将配置写入 ~/.claude/.omc-config.json,或使用环境变量进行无文件设置。
  • 要禁用所有通知,将 .omc-config.json 中的 .notifications.enabled 设置为 false。

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

agent-doc-discipline

Writing-time discipline for documents agents consume (the five surfaces, specs, tickets, .omc/skills/) — every rule checkable and carrying a why, steps before reference, one meaning in one home, no restating what the environment already says. Mandatory at drydock seed generation and the launch C5 sediment pass; opt-in for any other agent-facing doc edit. The companion of minimal-code-discipline: that one disciplines code, this one disciplines papers.

ai-slop-cleaner

Clean AI-generated code slop with a regression-safe, deletion-first workflow and optional reviewer-only mode

ask

Process-first advisor routing for Claude, Codex, Gemini, Antigravity, Grok, or Cursor via `omc ask`, with artifact capture and no raw CLI assembly

ask-navigator

Shipyard

autopilot

Full autonomous execution from idea to working code

autoresearch

Stateful single-mission improvement loop with strict evaluator contract, markdown decision logs, and max-runtime stop behavior

cancel

Cancel any active OMC mode (autopilot, ralph, ultragoal, swarm, ultrapilot, pipeline, team) and clean up retired legacy state

debug

Diagnose the current OMC session or repo state using logs, traces, state, and focused reproduction

deepinit

Deep codebase initialization with hierarchical AGENTS.md documentation

deep-interview

Socratic deep interview with mathematical ambiguity gating before explicit execution approval

drydock

Lay the keel of the shipyard harness in any repo — the 4-pillar shared environment (Context, Rules, Tools, Standards) across 5 surfaces (CLAUDE.md, skills, design-system, mcp/cli, shared context) so that every human and agent inherits the same design language and anyone can ship. Run once per repo; re-run with --check to audit drift.

execute

Carry an approved task through to working, verified code

external-context

Invoke parallel document-specialist agents for external web searches and documentation lookup

graph

Deterministic orchestration graph runtime - declarative DAG pipelines with journal-based crash recovery

harbor

Harbor intake for external work — the captain only handles unresolved decisions. Sweeps incoming issues and PRs, verifies every claim before disposition, reuses every decision already made, and hands the maintainer a docket whose pending items each carry one question with options, recommendation, impact and evidence. Agent-autonomous for facts and for actions covered by standing authorization; signed for every new judgment. Never merges.

hud

Configure HUD display options (layout, presets, display elements)

launch

Shipyard

loft

Loft the shape before cutting steel — answer a design question that prose cannot settle by building a throwaway artifact: a pure logic module in a clickable shell, or structurally different UI variants behind one route. The captain reacts to the artifact; the answer folds into the decision; the artifact never docks. Use when a design question stalls in words, when a navigator map carries a loft ticket, or when a spec discussion reaches

minimal-code-discipline

YAGNI-ladder coding discipline for writing changes — existence-first, reuse before writing, dependency ladder, shortest correct diff, with non-negotiables that must never be minimized away

omc-doctor

Diagnose and fix oh-my-claudecode installation issues

相关技能