* feat: add tag/untag/check-prior commands for triage dedup
- Add 'tags' column to notifications table (comma-separated)
- argus notif tag <id> <tag> — add tags like triaged, hostile, follow-up
- argus notif untag <id> <tag> — remove tags
- argus notif check-prior <url> — check if URL was previously triaged
(exit 0 = prior found, exit 1 = first touch)
- Show tags in notif list output with 🏷 prefix
- Add processing + tags columns to migration function
- Bump version to 0.5.0
Motivation: postmortem/2026-03-26-duplicate-triage-2504.md
Prevents duplicate triage comments by providing a fast local
dedup check before hitting the GitHub API.
* fix: re-open dismissed notifications on new GitHub activity
Previously, notif pull skipped any notification ID already in the DB,
even if GitHub re-triggered it (new @mention, comment, etc).
This caused mentions to be silently swallowed - 5 notifications
were stuck dismissed for up to 4 days.
Now: if a dismissed notification appears in the GitHub API again
(meaning it has new unread activity), undismiss it and update the
reason field. Reports re-opened count in pull output.
* fix: avoid sqlite3.Row.get in notif audit escalation
---------
Co-authored-by: Nazim <nazim@openclaw.ai>
- Notifications table: show ALL (not just pending), add ACTION TAKEN column
showing dismiss reason or pending status. Dismissed rows slightly dimmed.
- Activity section: filters out 'dismiss' entries, only shows real actions
(reviews, comments, fixes)
Prevents accumulation of ~5000 unread notifications on GitHub,
which caused argus notif pull to paginate through all of them
on every poll (taking 10-20s instead of <1s).
Each notification is marked as read via PATCH /notifications/threads/{id}
immediately after being inserted into the DB. Best-effort — failures
don't break the pull.
- Header shows 'last poll Xm ago — N new' like Forgejo dashboard
- Notifications table: TIME (relative), ISSUE, REASON (badge), TITLE, FILTER
- Own PRs tagged with 🔵, CI status shown
- Default view: pending only (non-dismissed)
- filter_reason column visible in table
- Add filter_rules table for configurable dismiss/keep rules
- Batch own-PR lookup via GitHub search API (1 call vs N)
- CI status check only for own PRs (targeted, not blanket)
- filter_reason column on every notification explaining why kept/dismissed
- --no-filter flag to bypass filtering
- notif filter list/add/rm subcommands for rule management
- notif list --dismissed/--own flags
- gh_api --paginate support (was capped at 50)
- Auto-migration for existing databases
- Version bump to 0.4.0
Step-by-step guide agents can follow:
1. Install argus
2. Create Forgejo token (shows how to find password)
3. Configure tea
4. Watch repos & test
5. Add to HEARTBEAT.md
6. Optional: start service
Plus daily usage commands and triage workflow.
- argus repo list: show watched repositories
- argus repo watch <owner/repo>: subscribe to notifications
- argus repo unwatch <owner/repo>: unsubscribe
Works with both gh (GitHub) and tea (Forgejo) backends.
Bump to v0.3.0
- CLI with notification, activity, and escalation commands
- SQLite database with schema
- Datasette + static HTML dashboard
- Systemd service for background operation
- Install/uninstall scripts
- SKILL.md and procedures for sub-agent usage