Skip to content

feat(skills): add walking-mode-monitor skill for dog-walk QA sessions#414

Open
Nathan Schram (nathanschram) wants to merge 2 commits into
devfrom
feature/walking-mode-monitor
Open

feat(skills): add walking-mode-monitor skill for dog-walk QA sessions#414
Nathan Schram (nathanschram) wants to merge 2 commits into
devfrom
feature/walking-mode-monitor

Conversation

@nathanschram
Copy link
Copy Markdown
Member

Summary

New Claude Code skill walking-mode-monitor that encodes a monitoring-only QA workflow for Untether staging. Invoked every 15 min during dog walks via an outer shell script on lba-1. The skill reads logs, categorises observations, dedupes against session state + existing GH issues, and files new issues with label auto:walking-mode.

Three-layer "monitoring-only" guardrail

  1. Claude tool allow-list (frontmatter): [Read, Glob, Grep, Bash, WebFetch]. Edit/Write/NotebookEdit/Task rejected at the harness level.
  2. Bash allow/deny lists in skill body: explicit deny on git push|merge|commit, gh pr merge|release, systemctl restart|stop|start, launchctl, sudo, package installers.
  3. Prompt INVARIANT repeated at the top of the skill, making the no-fix constraint impossible to miss.

What ships in this PR

  • .claude/skills/walking-mode-monitor/SKILL.md — canonical skill doc with all three guardrails, tick workflow, dedup algorithm, GH issue template with secret-redaction rules, wrap-up + dry-run + flag-only modes, Bash allow/deny reference, self-check checklist.

What ships outside this PR (lba-1 operator config)

  • ~/.local/bin/walking-mode-monitor.sh — outer shell scheduler. Not in repo (intentional — it's lba-1-local operator config, like untether-issue-watcher).
  • GitHub label auto:walking-mode — already created via gh label create (one-off).

How it's invoked

ssh lba-1
tmux new -s walk 'walking-mode-monitor.sh 90'   # 90 min walk

Each tick cold-starts claude -p "Walking-mode tick N for session <id>...". Cold start avoids context bloat; dedup lives in ~/.untether-walking-mode/<id>/session.json. timeout 600 per tick caps runaway cost.

Calibration plan

First 2–3 walks: soft categories (inefficiency, ux-ui, upstream) run in flag-only mode (logged but not filed). Hard categories (bug, blocked-tool) file immediately. Promote after signal quality confirmed.

Interaction with existing tooling

  • Complementary to untether-issue-watcher (which files auto:error-report issues for deterministic error events). Walking-mode handles judgment-required observations. Skill dedupes across both labels.
  • No Untether code changes. No src/** or tests/** impact.

Plan

~/.claude/plans/untether-you-are-running-snoopy-quail.md has the full context + design rationale.

Test plan

  • Skill file syntax valid (markdown + YAML frontmatter)
  • GH label auto:walking-mode created
  • Outer script syntax-checked (bash -n) and clamp-boundary-tested
  • Claude CLI + gh CLI verified on lba-1
  • CI green on this PR
  • Dry-run invocation against a known log window
  • 15-min test walk with 1 tick + wrap-up
  • 60-min dogfood walk
  • Retro after 3 walks

🤖 Generated with Claude Code

New Claude Code skill that encodes a monitoring-only QA workflow run
during dog walks (1-2 hours, 15-min ticks) on lba-1 VPS. Each tick
reads Untether staging logs + Claude Code session logs, categorises
observations (bug / blocked-tool / inefficiency / ux-ui / upstream),
dedupes against session state + existing GitHub issues, and files
new issues with label `auto:walking-mode` and full context.

The skill is strictly monitoring-and-filing-only. Three overlapping
guardrails:

1. Claude Code tool allow-list (frontmatter: Read, Glob, Grep, Bash,
   WebFetch) — harness rejects Edit/Write/NotebookEdit before Claude
   can invoke them.
2. Bash sub-command allow/deny lists documented in the skill body —
   explicit deny on git-mutating commands, gh pr merge/release,
   systemctl restart/stop/start, launchctl, sudo, package installers.
3. Prompt-boilerplate INVARIANT reminder at the top of every tick.

Outer shell scheduler `~/.local/bin/walking-mode-monitor.sh` (not in
repo — lba-1 operator config) spawns `claude -p` cold each tick,
`timeout 600` per tick, state in `~/.untether-walking-mode/<id>/`.

Calibration: first 2-3 walks run soft categories (inefficiency,
ux-ui, upstream) in flag-only mode via `$STATE_DIR/flag-only-all`
marker; hard categories (bug, blocked-tool) file immediately.

GitHub label `auto:walking-mode` created separately. Sibling to
existing `auto:error-report` label used by untether-issue-watcher
for deterministic error events; walking-mode is complementary and
cross-dedupes against it.

Plan: ~/.claude/plans/untether-you-are-running-snoopy-quail.md

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 22, 2026

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 57fa31e8-84dd-45f2-aeea-a89eff36f836

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/walking-mode-monitor

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

…itoring reference

Key change: walking-mode-monitor no longer needs an outer shell script.
The skill now handles its own bootstrap (state dir + session.json on
first invocation) and self-pacing (ScheduleWakeup between ticks; no
ScheduleWakeup on the wrap-up tick). `claude /loop` is the scheduler.

Shell script ~/.local/bin/walking-mode-monitor.sh is retired (renamed
.deprecated on lba-1).

SKILL.md changes:
- Frontmatter allowed_tools now includes ScheduleWakeup.
- Invocation is `claude /loop "start walking-mode for 90 min..."`.
- Bootstrap step added: first invocation creates state dir + session.json.
- Per-tick step 7 now self-schedules: ScheduleWakeup if >15 min left,
  else run wrap-up directly.
- Wrap-up now archives state and exits without ScheduleWakeup (loop
  terminates naturally).
- Dry-run / flag-only / stop / error-handling all use the new flow.

New reference doc `docs/reference/automated-monitoring.md`:
- Pattern-level quick-ref for all Claude Code observe-and-file sessions.
- Walking-mode is the first example; structured to accept future
  sessions (daily security audit, nightly cost digest, release smoke).
- Covers shared invariants, invocation, how to add new sessions,
  troubleshooting, interaction with untether-issue-watcher, cost notes.

CLAUDE.md updates:
- "Automated monitoring" row added to Reference docs table.
- Walking-mode row added to Skills table.

Plan: ~/.claude/plans/untether-you-are-running-snoopy-quail.md

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant