github-monitor
Watch your GitHub repos across four views - a combined urgency monitor (stale PRs, new issues, releases), a new-issue triage queue, a release upgrade digest…
Skill by aeonfun
Chalk Labs
Need help deploying github-monitor?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/aeonfun-github-monitor
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md and code. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/github-monitor
What's inside
- Skill name
github-monitor- Description
- Watch your GitHub repos across four views - a combined urgency monitor (stale PRs, new issues, releases), a new-issue triage queue, a release upgrade digest, or your own opened-PR tracker.
- License
- MIT
- Metadata
- var: · title: GitHub Monitor · commits: false · category: dev
- Instructions
- 598 lines in SKILL.md · view on GitHub
Before installing
- Instructions call the network
Agent Skills spec issues
- body: 598 lines (spec recommends under 500)
Files (1)
- SKILL.md
SKILL.md (first lines)
> **${var}** — View selector + optional scope.
> - **empty** → combined **monitor** over every repo in `memory/watched-repos.md`.
> - **`owner/repo`** (a bare repo, no view keyword) → combined **monitor** scoped to that one repo.
> - **`issues [scope]`** → new-issue triage queue. `scope` accepts `owner/repo`, `org:foo`, `user:bar`, or a bare login; empty = all repos owned by the authenticated user.
> - **`releases [repo,repo,…]`** → release upgrade-triage digest. Comma-separated repo list; empty = the built-in watch list.
> - **`prs`** → status tracker for PRs this aeon instance opened across external repos.
> - **`add-repo:<owner/repo>`** → append `owner/repo` to `memory/watched-repos.md`, confirm, and end (the shape the Telegram force-reply sends — see the config-capture note in Shared setup). No view runs.
This skill is four focused views of the same GitHub surface. The combined monitor is the default; `issues`, `releases`, and `prs` each drill into one dimension with the sibling view's own filtering, ranking, and output format. Only the `monitor` and `issues` views take a repo scope; `releases` takes a repo list; `prs` takes no scope (it reads its config from `aeon.yml`/env).
---
## Shared setup (every view)
1. Read `memory/MEMORY.md` for high-level context.
2. Read the last 2 days of `memory/logs/` — used for dedup in the `monitor`, `issues`, and `releases` views.
3. Parse `${var}` into a `VIEW` and a `SCOPE` in your head, not in a shell script (see **Shell shape** below). `RAW` = `${var}` with leading and trailing whitespace trimmed.
**Config capture (Telegram force-reply)** - `RAW` starting with `add-repo:` appends to the watchlist, confirms, and ends. It is NOT a view, so it is handled before the VIEW parse:
- `CAND` = the text after `add-repo:`, with a leading `github.com/` prefix (and any `http://` or `https://` scheme before it) removed, a leading `@` removed, a trailing `.git` removed, leading whitespace trimmed, and everything from the first remaining whitespace on dropped.
- If `CAND` does not match `^[A-Za-z0-9._-]+/[A-Za-z0-9._-]+$`: send `./notify "Couldn't read \"<CAND>\" as a repo. Reply with owner/repo (e.g. acme/api)."`, log `- view: add-repo (var="${var}") → BAD_VALUE` under `### github-monitor`, and stop.
- Otherwise read `memory/watched-repos.md` (missing = empty). If a line matches `- <CAND>` (case-insensitive, surrounding whitespace ignored): send `./notify "Already watching <CAND>."`. Else append the line `- <CAND>` with Edit (Write if the file is new), then send `./notify "Now watching <CAND> - it'll show up in the next GitHub Monitor run."`.
- Log under `### github-monitor`: `- view: add-repo (var="${var}") → <CAND>`, and stop.
**View parse:**
- `RAW` empty: `VIEW=monitor`, `SCOPE` empty.
- Else `VIEW_TOKEN` = the first word of `RAW`, lowercased; `SCOPE` = everything after the first word (leading whitespace trimmed).
- `VIEW_TOKEN` is `issues`, `releases` or `prs`: `VIEW` = `VIEW_TOKEN`.
- Anything else: `VIEW=monitor`, `SCOPE` = `RAW` (a bare owner/repo scopes the combined monitor).
**Shell shape.** Each Bash call is one allowed command (pipes are fine). The run refuses a call that sets a variable (`RAW="$(...)"`, `ME=$(...)`), uses `if` / `case` / `[ ... ]`, redirects into a file with `>` or `>>` (/tmp included), puts a `$name` in a jq filter (`--arg prefix ... '$prefix'`), or joins commands with `;`, `&&` or `||`, and each refusal costs a model turn. So the var parse above happens in your head, file changes go through Edit/Write (a command's output reaches a /tmp file through a piped `node -e` writer), values go into jq filters as literal strings (`startswith("<BRANCH_PREFIX>")`), every `date` or `gh api user` lookup is its own call whose printed value you write into later commands literally (`<YESTERDAY>`, `<ME>`), and each per-repo `gh` call has the repo written in literally (`<REPO>`), one call per repo.
4. Dispatch to the matching view section below. Run exactly one view per invocation.
**Selector examples:** `""` → monitor/all · `anza-xyz/agave` → monitor/one-repo · `issues` → issues/all · `issues org:anthropics` → issues/org · `releases` → releases/watch-list · `releases anthropics/claude-code,openai/openai-python` → releases/custom · `prs` → PR tracker.
**Logging convention (all views):** every view appends to `memory/logs/${today}.md` under the single heading `### github-monitor`, and its **first bullet is a discriminator** naming the view that ran: `- view: <monitor|issues|releases|prs> (var="${var}")`. Keep the view-specific bullets exactly as described in each section — the identifiers/URLs they write are what the next run dedups against.
---
## View: monitor (default — empty var, or a bare `owner/repo` scope)
Tiered urgency scan of PRs, new issues, and new releases across watched repos, with concrete next actions.
### Config
Read repos from `memory/watched-repos.md`. If the file is missing or empty, offer to add the first repo via a Telegram force-reply, then log `GITHUB_MONITOR_EMPTY_CONFIG` (under `### github-monitor`) and end. Send the offer **only** if no `add-repo` prompt was already offered in the last 2 days of `memory/logs/` (dedup so an unconfigured fork isn't nagged every run):
```bash
./notify "No repos on the watchlist yet. Which repo should I watch? Reply with owner/repo." \
--force-reply --placeholder "owner/repo" \
--context "github-monitor::add-repo"
```
The reply routes back as `var=add-repo:<owner/repo>`, handled by the config-capture branch in Shared setup. Record `FORCE_REPLY_OFFERED: add-repo` in the log when you send it.
```markdown
# memory/watched-repos.md
- owner/repo
- another-owner/another-repo
```
If `SCOPE` is set (a bare `owner/repo`), monitor **only** that repo. Otherwise monitor every entry in `watched-repos.md`.
### 1. Collect
For each repo, run these three `gh` calls, each its own Bash call with the repo written in literally as `<REPO>`. Capture the JSON; do not trust any shell expansion of untrusted fields.
**Open PRs** (full shape — the extra fields power the tier classifier):
```bash
gh pr list -R <REPO> --state open --limit 30 \
--json number,title,url,updatedAt,isDraft,reviewDecision,reviewRequests,statusCheckRollup,labels,author
```
**Issues opened in the last 24h**:
```bash
gh issue list -R <REPO> --state open --limit 20 \
--json number,title,url,createdAt,labels,author
```
Filter client-side to items where `createdAt` is within the last 24h.
**Releases published in the last 24h** (skip drafts and prereleases):
```bash
gh release list -R <REPO> --limit 5 --exclude-drafts --exclude-pre-releases \
--json tagName,publishedAt,name,url
```
Filter client-side to items where `publishedAt` is within the last 24h.
If any single `gh` call fails (network, auth, 404), record it as `gh_error(<code>)` for that repo and keep going — one repo's failure must not abort the whole run.
### 2. Classify into tiers
Walk every collected item and assign it to exactly one tier. Drop items that match no tier.
**Tier precedence (when multiple criteria qualify, pick the highest):** `ACT NOW > REVIEW > INFO`. Evaluate ACT NOW rules first; if any match, lock the tier and skip further checks for that item. Only fall through to REVIEW if no ACT NOW rule matched, and to INFO only if neither matched.
**ACT NOW** — needs a human decision today:
- Open PR, not draft, with any `statusCheckRollup[].conclusion == "FAILURE"`
- Open PR, not draft, `reviewRequests` non-empty, `updatedAt` older than 72h (reviewer ghosted)
- New issue whose labels match any of: `security`, `critical`, `p0`, `regression`, `outage`, `incident`
- Release whose `tagName` is a major bump vs. the previously logged tag (e.g. `v2.0.0` after `v1.*`)
**REVIEW** — worth a look, not urgent:
- Open PR, not draft, `reviewDecision == "REVIEW_REQUIRED"`, `updatedAt` 48–72h ago
- Open PR, not draft, `mergeStateStatus`/merge conflict markers flagged in `statusCheckRollup`
- New issue labelled `bug` or `p1`
- Release that is a minor or patch bump
**INFO** — background signal:
- Other open, non-draft PRs with `updatedAt` older than 48h
- New issue with no priority label
- Anything else passing the 24/48h windows
Drafts are never ACT NOW or REVIEW — at most INFO, and only if stale >7d. Do not alert on draft PRs just because they're idle.
Cap each tier at 5 items. If a tier would exceed 5, keep the top 5 by (tier rank, then most recently active) and append `…and N more` as the last bullet.
### 3. DedupFrom aeonfun/aeon, MIT.
More from aeonfun/aeon
- 0.722score
anatomy
aeonfun
Build crafted, highly detailed, interactive isometric SVG figures that explain a technical idea as a real physical object (a test rig, a dial gauge, a cabinet…
SkillAFreshness: A★ 782Claude Code +9 - 0.719score
base-mcp
aeonfun
Access a Base Account via the Base MCP server (mcp.base.org) - wallet, portfolio, sending, swapping, signing, x402 payments, batched calls, and transaction…
SkillAFreshness: A★ 782Claude Code +9 - 0.718score
aeon
aeonfun
Set up and run an Aeon agent instance - get started from scratch, pick which skills to turn on or install more from packs, reschedule or change what runs…
SkillAFreshness: A★ 782Claude Code +9 - 0.717score
hunter-22
aeonfun
Scan the ClawHunter agent bounty marketplace for opportunities that genuinely match this agent's real capabilities (code, security research, writing) and…
SkillAFreshness: A★ 782Claude Code +9 - 0.717score
get-started
aeonfun
First-run setup for the Aeon plugin.
SkillAFreshness: A★ 782Claude Code +9 - 0.715score
seo-audit
aeonfun
Daily on-page and technical SEO audit of every page on a site - discovers URLs from the sitemap, scores each page, adds cross-page checks (duplicate titles…
SkillAFreshness: A★ 782Claude Code +9 - 0.714score
fetch-tweets
aeonfun
Search and curate X/Twitter behind one selector - keyword, topic roundup, a single or tracked-account digest, an X list, or the AI-agent buzz preset -…
SkillAFreshness: A★ 782Claude Code +9 - 0.714score
github-trending
aeonfun
Curated trending across GitHub repos and the Hugging Face Hub (models, datasets, spaces) - filtered, clustered, and labeled by momentum with a one-line…
SkillAFreshness: A★ 782Claude Code +9 - 0.714score
bd-radar
aeonfun
Business-development radar across your product family - find who's building, forking, integrating, and mentioning your products, ranked into a…
SkillAFreshness: A★ 782Claude Code +9 - 0.714score
digest
aeonfun
Generate and send a digest on a configurable topic, optionally pulling RSS/Atom feeds as an input source alongside web + X signal
SkillAFreshness: A★ 782Claude Code +9 - 0.714score
feedback-builder
aeonfun
Point Aeon at a service's /feedback endpoint - pull what agents reported (bugs, missing features), triage and cluster it, then build the best accepted request…
SkillAFreshness: A★ 782Claude Code +9 - 0.714score
heartbeat
aeonfun
Ambient fleet-health check that surfaces anything worth attention (default), or an on-demand priority brief - the 3 things to focus on, why now, and what…
SkillAFreshness: A★ 782Claude Code +9
Signals
- Stars
- 782
- Forks
- 292
- Open issues
- 0
- Last commit (this folder)
- Aug 4, 2026 (3 months ago)
- Last release
- Jul 9, 2026 (3 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/aeonfun/aeon
- Website
- www.aeon.fun/
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from aeonfun
- 0.722score
anatomy
aeonfun
Build crafted, highly detailed, interactive isometric SVG figures that explain a technical idea as a real physical object (a test rig, a dial gauge, a cabinet…
SkillAFreshness: A★ 782Claude Code +9 - 0.719score
base-mcp
aeonfun
Access a Base Account via the Base MCP server (mcp.base.org) - wallet, portfolio, sending, swapping, signing, x402 payments, batched calls, and transaction…
SkillAFreshness: A★ 782Claude Code +9 - 0.718score
aeon
aeonfun
Set up and run an Aeon agent instance - get started from scratch, pick which skills to turn on or install more from packs, reschedule or change what runs…
SkillAFreshness: A★ 782Claude Code +9 - 0.717score
get-started
aeonfun
First-run setup for the Aeon plugin.
SkillAFreshness: A★ 782Claude Code +9 - 0.717score
hunter-22
aeonfun
Scan the ClawHunter agent bounty marketplace for opportunities that genuinely match this agent's real capabilities (code, security research, writing) and…
SkillAFreshness: A★ 782Claude Code +9 - 0.715score
seo-audit
aeonfun
Daily on-page and technical SEO audit of every page on a site - discovers URLs from the sitemap, scores each page, adds cross-page checks (duplicate titles…
SkillAFreshness: A★ 782Claude Code +9
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get github-monitor running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
github-monitor skill. Agent Mart. https://agentmart.dev/skills/aeonfun-github-monitor (last updated 2026-10-24)