Pulse Board 📋
Operational heartbeat for your agent stack. Every cron job, one digest.
How it works
CODEBLOCK0
What this skill touches
Filesystem
| Path | Action |
|---|
| INLINECODE0 | Created by install.sh — config, logs, registry, locks |
| INLINECODE2 |
Written once by
install.sh, never overwritten on re-run |
|
~/.pulse-board/logs/pending.log | Appended by skill cron wrappers, cleared after each digest |
|
~/.pulse-board/logs/last-digest.md | Raw
pending.log snapshot — written by
digest-agent.sh, never overwritten |
|
~/.pulse-board/logs/last-delivered.md | The composed/LLM message actually sent to the channel — written by
deliver.sh |
|
~/.pulse-board/registry/<skill>.conf | Written by
plug.sh, removed by
unplug.sh |
Crontab
| Script | Action |
|---|
| INLINECODE13 | Adds two digest cron entries (pulse-board-morning, pulse-board-evening) |
| INLINECODE16 |
Adds one wrapped cron entry per skill (
# pulse-board:<skill>) |
|
unplug.sh | Removes the matching cron entry for a skill |
All crontab writes are done via python3 subprocess. Existing entries are never modified.
Secrets env file
install.sh will ask for explicit confirmation before appending anything.
It may add
LLM_API_KEY=ollama and
OPENCLAW_WORKSPACE=<path> if missing.
Network
- - Telegram: INLINECODE23
- Discord: INLINECODE24
- OpenClaw agent:
openclaw agent --agent <id> --message <prompt> --json (local gateway call)
⚠️ The raw log is included in the prompt. If your agent uses a remote/cloud LLM, log content will be transmitted off-host. Use a local-only agent if log privacy is required.
- - Log only: no network calls
Credentials
- - Bot token / webhook URL read from
pulse.yaml or env vars - Secrets env sourced at runtime by
digest-agent.sh, deliver.sh, and cron wrappers - Credentials never written to logs or included in digest output
Install
CODEBLOCK1
Plug in a skill
CODEBLOCK2
Optional flags: --label, --ok, --error, INLINECODE32
Or run plug.sh with no arguments for interactive discovery mode.
Remove a skill
CODEBLOCK3
Test
CODEBLOCK4
Log files
| File | Contains |
|---|
| INLINECODE34 | Full raw log from pending.log — preserved every run |
| INLINECODE36 |
The composed message that was sent to the channel |
The raw log is written first, before the agent call and before delivery.
deliver.sh writes only to last-delivered.md and never touches last-digest.md.
To review the raw log on demand, ask your agent:
"show me last night's full digest log" — it will read last-digest.md.
⚠️ Privacy note: when LLM composition is enabled, the raw log is passed
to your OpenClaw agent as prompt context. If that agent uses a remote/cloud
LLM, log content will leave this host. Use a local-only agent (Ollama) if
log privacy is required.
Files
| File | Purpose |
|---|
| INLINECODE41 | One-time interactive setup |
| INLINECODE42 |
Register a skill + wire cron |
|
unplug.sh | Remove a skill + cron entry |
|
log-append.sh | Called by skill cron wrappers |
|
digest-agent.sh | Runs on schedule, composes + delivers digest |
|
deliver.sh | Internal delivery handler (Telegram/Discord/log) |
Updating
CODEBLOCK5
Requirements
- - bash 4+, curl, python3 — standard on any modern Linux/macOS
- INLINECODE47 CLI in PATH (for LLM digest; falls back to mechanical if absent)
- No sudo. No root. No system path writes outside INLINECODE48
技能名称: pulse-board
详细描述:
Pulse Board 📋
你的智能体栈的操作心跳。每个定时任务,一份摘要。
工作原理
技能定时任务运行
→ log-append.sh 向 pending.log 追加一行
→ digest-agent.sh(每日两次)
读取 pending.log
将完整原始日志写入 last-digest.md
调用 openclaw 智能体撰写人类可读摘要
(若智能体调用失败,则回退为机械格式)
发送至 Telegram / Discord / 日志
清空 pending.log
清理旧详细日志
此技能涉及的内容
文件系统
| 路径 | 操作 |
|---|
| ~/.pulse-board/ | 由 install.sh 创建 — 配置、日志、注册表、锁 |
| ~/.pulse-board/config/pulse.yaml |
由 install.sh 写入一次,重新运行时不会覆盖 |
| ~/.pulse-board/logs/pending.log | 由技能定时任务包装器追加,每次摘要后清空 |
| ~/.pulse-board/logs/last-digest.md | pending.log 快照 — 由 digest-agent.sh 写入,不会被覆盖 |
| ~/.pulse-board/logs/last-delivered.md | 实际发送到频道的合成/LLM 消息 — 由 deliver.sh 写入 |
| ~/.pulse-board/registry/
.conf | 由 plug.sh 写入,由 unplug.sh 移除 |
Crontab
| 脚本 | 操作 |
|---|
| install.sh | 添加两个摘要定时任务条目(pulse-board-morning、pulse-board-evening) |
| plug.sh |
为每个技能添加一个包装后的定时任务条目(# pulse-board:) |
| unplug.sh | 移除对应技能的定时任务条目 |
所有 crontab 写入均通过 python3 subprocess 完成。现有条目不会被修改。
密钥环境文件
install.sh 在追加任何内容前会要求明确确认。
若缺失,可能会添加 LLMAPIKEY=ollama 和 OPENCLAW_WORKSPACE=<路径>。
网络
- - Telegram: POST https://api.telegram.org/bot/sendMessage
- Discord: POST <你的 webhook URL>
- OpenClaw 智能体: openclaw agent --agent --message <提示词> --json(本地网关调用)
⚠️ 原始日志包含在提示词中。如果你的智能体使用远程/云端 LLM,日志内容将被传输到主机之外。如需日志隐私保护,请使用仅限本地的智能体。
凭据
- - 机器人令牌 / webhook URL 从 pulse.yaml 或环境变量读取
- 密钥环境由 digest-agent.sh、deliver.sh 和定时任务包装器在运行时加载
- 凭据不会写入日志或包含在摘要输出中
安装
bash
chmod +x ~/.openclaw/skills/pulse-board/*.sh
bash ~/.openclaw/skills/pulse-board/install.sh
接入技能
bash
bash ~/.openclaw/skills/pulse-board/plug.sh \
--skill my-skill \
--cron /15 * \
--cmd bash ~/.openclaw/skills/my-skill/run.sh
可选参数:--label、--ok、--error、--log
或者不带参数运行 plug.sh 进入交互式发现模式。
移除技能
bash
bash ~/.openclaw/skills/pulse-board/unplug.sh --skill my-skill
测试
bash
bash ~/.openclaw/skills/pulse-board/log-append.sh \
--skill test --status OK --message Hello Pulse Board
bash ~/.openclaw/skills/pulse-board/digest-agent.sh
日志文件
| 文件 | 内容 |
|---|
| ~/.pulse-board/logs/last-digest.md | pending.log 的完整原始日志 — 每次运行均保留 |
| ~/.pulse-board/logs/last-delivered.md |
实际发送到频道的合成消息 |
原始日志在智能体调用和发送之前先写入。
deliver.sh 仅写入 last-delivered.md,从不触碰 last-digest.md。
如需按需查看原始日志,可让你的智能体:
显示昨晚的完整摘要日志 — 它将读取 last-digest.md。
⚠️ 隐私说明: 当启用 LLM 合成时,原始日志会作为提示词上下文传递给
你的 OpenClaw 智能体。如果该智能体使用远程/云端 LLM,日志内容将离开
本机。如需日志隐私保护,请使用仅限本地的智能体(Ollama)。
文件
| 文件 | 用途 |
|---|
| install.sh | 一次性交互式设置 |
| plug.sh |
注册技能 + 配置定时任务 |
| unplug.sh | 移除技能 + 定时任务条目 |
| log-append.sh | 由技能定时任务包装器调用 |
| digest-agent.sh | 按计划运行,合成并发送摘要 |
| deliver.sh | 内部发送处理器(Telegram/Discord/日志) |
更新
bash
cd ~/.openclaw/skills/pulse-board && git pull && chmod +x *.sh
要求
- - bash 4+、curl、python3 — 任何现代 Linux/macOS 系统标配
- PATH 中包含 openclaw CLI(用于 LLM 摘要;若缺失则回退为机械格式)
- 无需 sudo。无需 root。不向 ~/.pulse-board/ 之外的系统路径写入