Drift ack
A drop-in self-improving memory + operations harness for AI agents (OpenClaw / Hermes / Claude Code / Codex). Layered memory, autonomous drift-fixing loop, evals, and one-command DR. Templates + scripts, no secrets.
npx -y skills add Walliiee/agent-harness --skill drift-ackAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Record a decision against a Drift incident. Triggers ONLY on bare A/B/C/no/edit replies in the Drift Telegram topic. Natural-language Drift conversation goes to the main agent directly.
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
4.9 KB, ~1.2k tokens by cl100k_base, as published. Nobody here has run it
drift-ack
When this skill activates, you've received a structured ack reply in the Drift Telegram topic. Your job is to record the user's decision against the matching incident — nothing else.
Telegram configuration (env vars)
This skill addresses a Telegram chat/topic via env vars that default empty. When unset, all Telegram notify/send steps are NO-OPs (the skill simply skips them):
TELEGRAM_DRIFT_CHAT_ID— the Drift chat ID (default empty).TELEGRAM_DRIFT_TOPIC_ID— the Drift topic/thread ID (default empty).
If TELEGRAM_DRIFT_CHAT_ID is empty, there is no Drift topic to listen on — this skill does not activate, and any "post to Drift" step below is skipped silently.
Trigger conditions (must ALL be true — strict regex match)
- The inbound message arrived via Telegram channel.
TELEGRAM_DRIFT_CHAT_IDis set (non-empty), and the channel context matches the Drift topic: chat${TELEGRAM_DRIFT_CHAT_ID:-}, thread${TELEGRAM_DRIFT_TOPIC_ID:-}.- The message body, after
.strip(), matches EXACTLY one of:^[A-Za-z]$— single letter (A, B, C, …)^no$— case-insensitive^edit(\s+.+)?$— the wordedit, optionally followed by a note
Do NOT invoke this skill if:
- The message is longer or freer than the above (e.g., "do B", "approve A", "let's go with B and also...", "B because I want the model change"). Let the main agent handle conversationally; the main agent can call
${OPENCLAW_HOME}/bin/drift-ackdirectly as a normal Bash tool call when it judges a decision was made. - The message has any other intent (questions, clarifications, comments). Let the main agent handle.
- You're outside the Drift topic. Let the main agent handle.
This skill is the fast path for terse acks. Anything ambiguous belongs to the main agent.
Workflow
1. Extract
From the inbound message context, capture:
<choice>— the letter/word the user typed (A, B, C, no, edit).<reply_to_msg_id>— thereply_to_message_idof the Drift notification the user replied to.<note>— foredit, the rest of the message after the word "edit".
Normalize: uppercase letters, lowercase no/edit.
If <reply_to_msg_id> is absent (user typed A as a fresh message, not a reply): do NOT invoke drift-ack with --allow-latest. Instead, if TELEGRAM_DRIFT_CHAT_ID is set, post one line in the Drift topic: ⚠️ {choice}: which incident? Reply to the specific Drift card (long-press → Reply). and stop (if it is empty, just stop). The CLI's "latest proposed" guess is unreliable when multiple incidents are open.
2. Run drift-ack (through skill-wrapper for ledger tracking)
Execute exactly one command (only when <reply_to_msg_id> is present):
${OPENCLAW_HOME}/bin/skill-wrapper --skill drift-ack --agent main --trigger interactive -- ${OPENCLAW_HOME}/bin/drift-ack <choice> [<note>] --reply-to-msg-id <reply_to_msg_id>
- If
<choice>isedit, include the<note>argument. - The
skill-wrapperprefix writes askill: drift-ackrow to${OPENCLAW_HOME}/skill-runs/so autonomous-loop activations are auditable. Don't skip it.
3. Stop
The CLI posts a confirmation to Drift on its own. Do not send any additional reply. Do not summarize, narrate, or explain. The skill's whole job is to dispatch.
If the CLI returns non-zero, and TELEGRAM_DRIFT_CHAT_ID is set, report the error briefly in the Drift topic: "drift-ack failed: <stderr-excerpt>". If the chat ID is empty, log the error to stderr instead.
Reference
- CLI:
${OPENCLAW_HOME}/bin/drift-ack - Drift topic spec: chat
${TELEGRAM_DRIFT_CHAT_ID:-}, thread${TELEGRAM_DRIFT_TOPIC_ID:-}, accountmain - Incident ledger:
${OPENCLAW_HOME}/incidents/ - Choice taxonomy:
A|B|C→ statusapproved-<letter>, option queued for apply (phase 3b will execute)no→ statusrejectededit ...→ statusedit-requested, note recorded
Note on the wider Drift flow
The main agent also has access to ${OPENCLAW_HOME}/bin/drift-ack as a normal Bash tool. When the user types something richer than a bare letter (e.g., "let's go with B but switch to glmpro instead of haiku"), the main agent should:
- Apply the change directly (config edit / cron edit / etc.).
- Run
drift-ack edit "<one-line summary of what was actually done>"so the incident ledger records the choice asedit-requestedwith the real action taken. - If
TELEGRAM_DRIFT_CHAT_IDis set, send a visible reply in the Drift topic viamessage.send; otherwise skip the send.
This skill exists only to keep that path fast and unambiguous for the bare-letter case.