Fox creature — daily audit & rule enforcement
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 12
- Forks
- 1
- Avg merge
- 7h 13m
- Merged PRs (30d)
- 31
Description
The kingdom needs a watcher
The raccoon audit (session 70, Mar 15) found 10 issues across identity, rules, state, and wiring. The root cause is the same everywhere: rules live in memories, enforcement lives nowhere. Each session is born amnesiac and must voluntarily follow conventions from 69 sessions of history.
Fox fixes this. Not a dashboard — a creature that runs once or twice daily, inspects the kingdom, and reports what's drifting.
What fox audits
1. Rule enforcement
- PRs targeting main instead of staging (query
gh pr list --base main) - Sessions running outside worktrees when PR-bound work is happening
- Platform code edited from wolt-scoped sessions
2. Identity coherence
- Wolts without CLAUDE.md (fujiwolt, howlie currently missing)
- Session names not matching the dispatching wolt
- Bot tool path vs daemon path divergence (wolf split-brain)
3. State hygiene
- Stale
.state/current-url-*.jsonfiles (65 currently, no GC) - Dead redirect files (16 currently)
- Chat history pollution (system probe messages)
- Duplicate cron entries across wolts
4. Wiring consistency
- wolf.json read by bot tools vs wolf daemon (same resolution path?)
- WOLT_NAME used for session naming vs actual dispatching wolt
- Dispatch rules injected per-session vs persisted in CLAUDE.md
How it runs
- Creature type: fox (new singleton type)
- Schedule: twice daily via wolf cron (morning + evening)
- Output: structured report (JSON + human-readable) to
.state/fox/ - Notification: summary to Telegram if issues found, silent if clean
- Command:
fox --auditfor on-demand runs
Discovered issues to fix (from raccoon audit)
| # | Issue | Severity | Fix |
|---|---|---|---|
| 1 | Wolf split-brain: bot reads neowolt's wolf.json, daemon reads howlie's | critical | Unify resolution path in core.py |
| 2 | PRs target staging — memory-only enforcement | critical | Branch protection rules or --base default |
| 3 | Session names always "neowolt-*" | warning | Per-dispatch WOLT_NAME override |
| 4 | fujiwolt has no CLAUDE.md | warning | Create minimal CLAUDE.md per creature-wolt |
| 5 | Worktree rule skipped | warning | Fox flags direct-checkout feature branches |
| 6 | update-check duplicated in neowolt + howlie | warning | Remove from neowolt's wolf.json |
| 7 | 65 stale session URL files, no GC | warning | Fox cleans dead files on audit |
| 8 | Chat history pollution (test probes) | warning | Sanitize or rotate old probe entries |
| 9 | Dispatch rules session-injected, not persisted | info | Persist in per-wolt CLAUDE.md |
| 10 | memory/ still not renamed to cache/ | info | Blocked on #50 |
Related issues
- #49 — PAT in git remote URL
- #50 — Rename wolt/memory to cache/context
🦝 Audited by raccoon · 🦊 Built by fox
🤖 Generated with Claude Code
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reading core.py and the existing wolf.json resolution paths, then inspect how wolf cron dispatches creature types and how CLAUDE.md and WOLT_NAME are used. Trace the existing state and notification conventions before defining fox --audit. Done means a twice-daily fox run produces JSON and human-readable output in .state/fox/, notifies Telegram only for findings, and covers the listed audit checks.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- devops, tooling
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 25/100