Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add aaronjmars/aeon-agent --skill github-monitorgit clone --depth 1 https://github.com/aaronjmars/aeon-agentWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/aaronjmars/aeon-agent/github-monitor)<a href="https://agentmods.dev/skills/aaronjmars/aeon-agent/github-monitor"><img src="https://agentmods.dev/badge/skills/aaronjmars/aeon-agent/github-monitor/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/aaronjmars/aeon-agent/github-monitor"><img src="https://agentmods.dev/badge/skills/aaronjmars/aeon-agent/github-monitor.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00048 | $0.07782 |
| Opus 5 | $0.00024 | $0.03891 |
| Sonnet 5 | $0.00010 | $0.01556 |
| Haiku 4.5 | $0.00005 | $0.00778 |
Grade A, and why
github-monitor scanned grade A with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 11d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Makes network callslowCapability
Not a fault in itself. Listed so you know the mod talks to something, and to what.
- **`monitor`, `issues`, `prs` views** — use the `gh` CLI, which authenticates via the workflow's `GITHUB_TOKEN` / `GH_TOKEN` and works inside a GitHub Actions run (no curl fallback needed). `monitor` uses `gh pr/issue/r This is a copy
100% identical to github-monitor — 0 lines differ, which has more behind it and is treated as the original. This page carries a canonical link to it rather than competing with it.
How it starts
The opening of the file, as written. The whole thing — 611 lines — stays where its author put it; the contents beside it link to each section on GitHub.
${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.scopeacceptsowner/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>→ appendowner/repotomemory/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)
- Read
memory/MEMORY.mdfor high-level context. - Read the last 2 days of
memory/logs/— used for dedup in themonitor,issues, andreleasesviews. - Parse
${var}into aVIEWand aSCOPE:
RAW="$(printf '%s' "${var}" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
# Config capture (Telegram force-reply): var="add-repo:<owner/repo>" appends to the watchlist,
# confirms, and ends — it is NOT a view, so it must be intercepted before the VIEW parse below.
case "$RAW" in
add-repo:*)
CAND="$(printf '%s' "${RAW#add-repo:}" \
| sed -e 's#^https\?://github.com/##' -e 's/^@//' -e 's/\.git$//' \
-e 's/^[[:space:]]*//' -e 's/[[:space:]].*$//')"
if ! printf '%s' "$CAND" | grep -qE '^[A-Za-z0-9._-]+/[A-Za-z0-9._-]+$'; then
./notify "Couldn't read \"$CAND\" as a repo. Reply with owner/repo (e.g. acme/api)."
# log: - view: add-repo (var="${var}") → BAD_VALUE
exit 0
fi
mkdir -p memory; touch memory/watched-repos.md
if grep -qiE "^[[:space:]]*-[[:space:]]*${CAND}[[:space:]]*$" memory/watched-repos.md; then
./notify "Already watching $CAND."
else
printf -- '- %s\n' "$CAND" >> memory/watched-repos.md
./notify "Now watching $CAND — it'll show up in the next GitHub Monitor run."
fi
# log under ### github-monitor: - view: add-repo (var="${var}") → $CAND
exit 0 ;;
esac
if [ -z "$RAW" ]; then
VIEW=monitor; SCOPE=""
else
VIEW_TOKEN="$(printf '%s' "$RAW" | awk '{print tolower($1)}')"
SCOPE="$(printf '%s' "$RAW" | sed -E 's/^[^[:space:]]+[[:space:]]*//')" # everything after the first word
case "$VIEW_TOKEN" in
issues|releases|prs) VIEW="$VIEW_TOKEN" ;;
*) VIEW=monitor; SCOPE="$RAW" ;; # bare owner/repo scopes the combined monitor
esac
fi
- 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.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 11d ago First seen · 611 lines · 48 tokens per session scan A 63a6b87c0268
github-monitor is a skill published in the GitHub repository aaronjmars/aeon-agent (11 stars, last pushed yesterday), licensed MIT. It adds 48 tokens to every session and 7,782 once invoked, about $0.0002 per session on Opus 5. A static security scan graded it A with 1 finding (makes network calls). It is 100% identical to github-monitor, differing in 0 lines, and is treated as a copy.
Other skills, from other repositories
release-engineering
Plan and verify software releases with versioning, changelogs, release branches, feature flags, canaries, migration gates, rollback, deployment checks, and release readiness. Use when preparing a release, shipping a risky PR, coordinating app/backend/database rollout, recovering from a bad deploy, or defining release…
version-bumper
Suggest the next semantic version and release tag from Conventional Commits in git history. Script bumper.py reads git log subjects (fallback: COMMITS env or --commits FILE for testability), classifies commit types (feat->MINOR, fix/perf/refactor->PATCH, ! or BREAKING CHANGE->MAJOR) and prints latesttag, nextversion…
changelog-generator
A generator for a CHANGELOG, a file that records what changed between software releases. It reads git history and groups Conventional Commits, a standard commit-message format, into sections such as Added, Fixed, and Changed.
ship
Commit, push, create PR(s), and auto-finalize — full automation pipeline. Handles uncommitted changes and recently created PRs.
Changelog Curator
Maintains and formats a CHANGELOG.md following Keep a Changelog conventions from git history or PR list.
Release Notes Generator
Generates clear, user-friendly release notes from a git log or list of PRs.