Agent审计
- 作者仓库星标 430
- 作者更新于 实时读取
- 作者仓库 aeon
- 领域
- 通用 · meta
- 兼容 Agent
-
- Claude Code
- Cursor
- Cline
- Codex
- Windsurf
- Gemini CLI
- +20
- 信任分
- 94 / 100 · 已通过审计
- 作者 / 版本 / 许可
- @aaronjmars · 未声明 license
- Token 消耗评级
- 低消耗
- 接入复杂程度
- 需简单配置
- 是否需要外部 API Key
- 需要 · GitHub
- 兼容的系统
- 未声明(默认跨平台)
- 底层运行要求
- 无特殊要求
- 文件与系统权限
-
- 只读
- 允许写入 / 修改
- 读取环境变量
- 网络行为
- 允许外网请求
- 安装命令数
- 26 条
档案由构建时根据 SKILL.md 与安装命令自动衍生,可能与作者实际意图存在差异。
---
name: skill-leaderboard
description: Weekly ranking of which skills are most popular across CONFIGURED Aeon forks (excludes untouched…
category: 通用
runtime: 无特殊运行时
---
# skill-leaderboard 输出预览
## PART A: 任务判断
- 适用问题:通用任务拆解、检查和交付。
- 输入要求:目标材料、限制条件、期望输出和验收方式。
- 证据边界:围绕“Why this version / Steps / 1. Determine the target repo”读取原文规则,不把推断写成作者承诺。
## PART B: 执行结果
- **01** 任务判断:确认你的需求是否属于通用任务拆解、检查和交付,并标出输入、限制和预期结果。
- **02** 执行计划:优先按“Why this version / Steps / 1. Determine the target repo”拆成步骤,说明每一步会读取什么、修改什么、产出什么。
- **03** 交付结果:给出可复制的命令、文件改动、检查清单或内容草稿,并说明如何继续迭代。
- **04** 风险边界:结合 读取文件、写入/修改文件、读取环境变量、会按任务需要访问外部网络、需要准备 GitHub API Key 给出执行前确认项。
## Running Rules
- 读取文件、写入/修改文件、读取环境变量;会按任务需要访问外部网络;需要准备 GitHub API Key。
- 先小样例验证,再放大到真实任务。
- 交付时同时给结果、检查口径和下一步迭代建议。 原文没有稳定的斜杠命令要求。安装验证后通常全局生效,直接在对话里点名这个 Skill 并描述任务即可。
告诉 Agent 目标文件或材料、期望结果、不可改范围、是否允许联网或执行命令。本 Skill 的权限画像是:读取文件、写入/修改文件、读取环境变量。
先用一个小任务确认它会围绕“Why this version / Steps / 1. Determine the target repo”工作;涉及文件或命令时,先看 diff、日志、预览或测试结果。
检查最终产物是否包含明确结果、必要证据和下一步动作;如果输出泛泛而谈,就补充输入、边界和验收标准后重跑。
---
name: skill-leaderboard
description: Weekly ranking of which skills are most popular across CONFIGURED Aeon forks (excludes untouched…
category: 通用
source: aaronjmars/aeon
---
# skill-leaderboard
## 什么时候使用
- 把通用方向的常用动作沉淀成 Agent 可调用的技能 适合处理通用任务拆解、检查、交付和复盘,核心价值是把输入、判断、执行、验证和交付边界固定下来,避免 Agent 泛泛回答。 围绕 meta 组织上下文、步骤和验收口径;使用前要准备…
- 面向通用任务拆解、检查和交付,优先处理能明确输入、步骤和验收标准的工作。
## 需要提供什么
- 目标材料、目录范围、期望结果和不可改动内容。
- 是否允许联网、执行命令、读写文件或调用外部服务。
## 执行规则
- 围绕「Why this version / Steps / 1. Determine the target repo」组织步骤,不把推断写成作者事实。
- 读取文件、写入/修改文件、读取环境变量;会按任务需要访问外部网络;需要准备 GitHub API Key。
- 先跑小样例,确认结果可检查后再扩大任务范围。
## 输出要求
- 给出最终产物、关键证据、验证方式和下一步动作。
- 信息不足时标记 unknown,不编造命令、平台或依赖。 作者原文负责流程事实;仓库文件负责来源和命令;流狐只补充适用场景、限制和质量判断。
skill "skill-leaderboard" {
输入层 -> 用户目标 + 目标文件 + 禁止范围 + 验收标准
上下文层 -> Why this version / Steps / 1. Determine the target repo
规则层 -> SKILL.md 触发条件 / 执行顺序 / 输出格式
运行层 -> 无特殊运行时 | 读取文件、写入/修改文件、读取环境变量 | 会按任务需要访问外部网络
安全层 -> 需要准备 GitHub API Key + 小任务验证 + diff / 日志复核
输出层 -> 可复制结果 + 检查清单 + 下一步迭代
} ${var} — Target repo to scan forks of (e.g. "owner/aeon"). If empty, reads
memory/watched-repos.mdand uses the first entry.
Today is ${today}. Generate a weekly leaderboard of which Aeon skills the configured fleet is actually running — and what upstream should do about it.
Why this version
Upstream aeon.yml ships with effectively only heartbeat: enabled: true. Every fresh fork inherits that default. If we score "skills enabled" across all active forks, the leaderboard is a tautology (heartbeat always wins, everything else hovers near 0) and operator learns nothing. The lever is to score against configured forks only — forks whose aeon.yml diverges from upstream defaults — and to convert the result into three actionable recommendations: which skills to promote, which fleet patterns to copy upstream, which skills to sunset.
Steps
1. Determine the target repo
If ${var} is set, use that as TARGET_REPO. Otherwise read memory/watched-repos.md and use the first non-comment, non-empty line. If neither yields a value, log SKILL_LEADERBOARD_NO_TARGET to memory/logs/${today}.md and stop (no notification).
2. Snapshot upstream defaults
Read this running instance's local aeon.yml once. Build UPSTREAM_DEFAULTS: a dict {skill_name -> {enabled, model_or_null, var_or_empty, schedule_or_null}} covering every skill entry under the skills: block. Also build UPSTREAM_SKILLS: the set of skill directory names from skills/ (use ls skills/). These are the comparison baselines.
3. Fetch active forks
CUTOFF=$(date -u -d "30 days ago" +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || date -u -v-30d +%Y-%m-%dT%H:%M:%SZ)
gh api "repos/${TARGET_REPO}/forks?per_page=100" --paginate \
--jq "[.[] | select(.pushed_at > \"$CUTOFF\") | {owner: .owner.login, full_name: .full_name, pushed_at, stargazers_count, created_at}]"
If zero active forks: log SKILL_LEADERBOARD_NO_FORKS and stop (no notification).
4. Per-fork single-call enumeration
For each active fork, run one recursive git-tree call to enumerate files (cheaper than per-path contents):
gh api "repos/${FORK_FULL}/git/trees/HEAD?recursive=1" --jq '[.tree[] | select(.type == "blob") | .path]'
Handle errors:
- 404 / 409 (empty repo): mark
status: "no_tree", skip aeon.yml and skills/ extraction, continue. - 403 with
X-RateLimit-Remaining: 0: sleep 60s, retry once. If still failing, markstatus: "rate_limited"and continue with partial fleet.
Then fetch the fork's aeon.yml only if the tree contains it:
gh api "repos/${FORK_FULL}/contents/aeon.yml" --jq '.content' | base64 -d
If the path is in the tree but the contents call 404s, mark status: "yml_unreadable" and continue.
Extract from each readable aeon.yml:
- For every skill entry under
skills:—enabled,model(if set),var(if set),schedule(if differs from any upstream default for that skill). - Detect "fork-only skills": directory names under
skills/in the fork's tree that are NOT inUPSTREAM_SKILLS.
5. Classify each fork
For each fork, compute a divergence signal vector vs UPSTREAM_DEFAULTS:
- enabled_diff: count of skills where the fork's
enabledvalue differs from upstream default - var_set: count of skills with
var:set to a non-empty value where upstream's was empty - model_override: count of skills with a
model:value differing from upstream - schedule_override: count of skills with a
schedule:value differing from upstream - fork_only_skills: count from step 4
Tier the fork:
- CONFIGURED: any of the above is ≥1. (i.e., the fork actively diverged from defaults)
- TEMPLATE: aeon.yml is readable but every diff signal is 0. Untouched template — exclude from leaderboard math.
- UNREADABLE: no_tree / no aeon.yml / yml_unreadable / rate_limited. Tracked in the source-status footer.
6. Aggregate against the CONFIGURED denominator
Let N_CONFIGURED = count of forks tiered CONFIGURED. If N_CONFIGURED < 2: log SKILL_LEADERBOARD_TEMPLATE_FLEET with the active/template/unreadable counts, write a stub article noting the conversion rate, and skip the notification (no signal worth pushing). Stop.
For each skill name (union of upstream skills and fork-only skills) compute:
forks_enabled: number of CONFIGURED forks where it'senabled: truepct_of_configured:forks_enabled / N_CONFIGUREDwith_var: count of CONFIGURED forks that overridevar:with_model: count that overridemodel:with_schedule: count that overrideschedule:customization_depthper-fork-instance: enabled (1) + var (1) + model (1) + schedule (1) → sum across forks; this becomes the tiebreakeris_fork_only: true if the skill name is in some fork's tree but not inUPSTREAM_SKILLS
Rank by (forks_enabled desc, customization_depth desc, name asc).
7. Load prior snapshot (week-over-week)
Read memory/topics/skill-leaderboard-state.json if it exists. Schema:
{
"last_run": "YYYY-MM-DD",
"n_active_forks": N,
"n_configured": N,
"ranking": [{"skill": "name", "forks_enabled": N, "rank": N}, ...]
}
If the file exists and last_run is within the last 14 days, compute:
- Rising: skills that moved up ≥3 ranks
- Falling: skills that moved down ≥3 ranks
- New entries: skills now ranked that weren't last run
- Dropouts: skills last run that aren't ranked now (forks_enabled went to 0)
If the file is missing or stale (>14 days), set deltas to "first ranked snapshot — no comparison".
8. Compute the three actionable categories
Every tier below is a heuristic — operator overrides take precedence. Thresholds are starting points, not hard rules; the operator's call always wins. When in doubt, classify as Match rather than forcing Promote or Sunset.
- Consensus skills:
pct_of_configured > 0.50(heuristic — operator overrides take precedence). The fleet has converged on these — upstream should treat them as canonical examples and ensure they're well-documented. - Promote candidates:
pct_of_configured ≥ 0.25AND upstream default isenabled: falseAND the skill is not aworkflow_dispatch-only skill (heuristic — operator overrides take precedence). The fleet found these worth running; upstream may want to flip the default or feature them more prominently. - Match candidates: skills where ≥2 CONFIGURED forks override
model:to the same value (e.g., both pickclaude-sonnet-4-6) (heuristic — operator overrides take precedence). The fleet has independently found a cheaper model sufficient — upstream should consider matching the override. - Sunset candidates: skills present in
UPSTREAM_SKILLSwithforks_enabled == 0ANDwith_var == 0AND not a meta/dev skill (heuristic — operator overrides take precedence; skip skills taggedmetaordev— those are operator-tools, fork adoption isn't the point). Review for removal or better discoverability. - Fleet-only skills: any
is_fork_only: trueskill enabled in ≥1 fork. Surface for review — the fleet built something upstream doesn't have.
9. Write the article
To articles/skill-leaderboard-${today}.md:
# Skill Leaderboard — ${today}
**Verdict:** ${one-line verdict — see step 10 format below}
*Scanned ${N_ACTIVE} active forks of ${TARGET_REPO} (pushed in last 30 days). ${N_CONFIGURED} are configured (aeon.yml diverges from upstream defaults). Leaderboard scored against the configured ${N_CONFIGURED}.*
## Top Skills (configured fleet)
| Rank | Skill | Forks | % Configured | var | model | sched | Δ vs last week |
|------|-------|-------|--------------|-----|-------|-------|----------------|
| 1 | name | N | XX% | N | N | N | — / ↑N / ↓N / NEW |
| ... |
(Top 15. If <15 ranked, list all.)
## What the fleet is telling us
### Promote
${list of Promote candidates with one-line "why" each, OR "none this week"}
### Match
${list of Match candidates: "skill X — N forks override model to claude-sonnet-4-6", OR "none this week"}
### Sunset (review for removal or better docs)
${list of Sunset candidates, capped at 5, OR "none — every shipped skill has at least one configured-fork enable"}
### Fleet-only skills
${list of fork-only skill names with the fork that built each, OR "none this week"}
## Week-over-week
${"First ranked snapshot — no comparison" OR list of Rising / Falling / New / Dropouts}
## Fleet composition
| Tier | Count | % |
|------|-------|---|
| Configured | N_CONFIGURED | XX% |
| Template (untouched aeon.yml) | N_TEMPLATE | XX% |
| Unreadable (no tree / no yml / rate-limited) | N_UNREADABLE | XX% |
| **Total active forks** | N_ACTIVE | 100% |
## Source status
- Trees fetched: N_TREES_OK / N_ACTIVE
- aeon.yml readable: (N_CONFIGURED + N_TEMPLATE) / N_ACTIVE
- Rate-limited: N_RATE_LIMITED
- Fork-only skill files inspected: N_FORK_ONLY_FILES
---
*Source: GitHub API — forks of ${TARGET_REPO}. Methodology: a fork counts as "configured" if its `aeon.yml` differs from upstream defaults on `enabled`, `model`, `var`, or `schedule` for any skill. Untouched templates are excluded from leaderboard math.*
10. Build the verdict line
Pick the strongest single claim, in this priority:
- If a Promote candidate exists with
pct_of_configured ≥ 0.40:"${N_CONFIGURED} configured forks; ${skill} hit ${pct}% — promote candidate" - Else if any Rising skill moved ≥5 ranks:
"${skill} jumped from rank ${old} to rank ${new} this week" - Else if a Fleet-only skill exists:
"${fork_owner}/aeon shipped ${skill} — not in upstream" - Else if any Match candidate exists:
"${N} forks independently override ${skill} to ${model} — consider matching" - Else:
"Configured-fleet conversion rate: ${N_CONFIGURED}/${N_ACTIVE} (${pct}%); top: ${skill} (${N} forks)"
11. Send notification
Via ./notify:
*Skill Leaderboard — ${today}*
${verdict_line}
Top 5 across ${N_CONFIGURED} configured forks (of ${N_ACTIVE} active):
1. ${skill} — N forks (XX%) ${rising_arrow_or_blank}
2. ${skill} — N forks (XX%) ${rising_arrow_or_blank}
3. ${skill} — N forks (XX%) ${rising_arrow_or_blank}
4. ${skill} — N forks (XX%) ${rising_arrow_or_blank}
5. ${skill} — N forks (XX%) ${rising_arrow_or_blank}
${one of: "Promote: ${skill} (XX% adoption)" | "Match: ${N} forks override ${skill} → ${model}" | "Fleet-only: ${owner}/${skill}" | omit if none of the above}
Full report: https://github.com/${GITHUB_REPOSITORY}/blob/main/articles/skill-leaderboard-${today}.md
Use the $GITHUB_REPOSITORY env var (GitHub Actions sets it to owner/repo) to build the URL — NOT the watched repo. The article lives in this running instance's repo.
Notification is sent only when N_CONFIGURED >= 2 (gated in step 6). Otherwise the run is silent.
12. Persist the snapshot
Write memory/topics/skill-leaderboard-state.json:
{
"last_run": "${today}",
"target_repo": "${TARGET_REPO}",
"n_active_forks": N_ACTIVE,
"n_configured": N_CONFIGURED,
"n_template": N_TEMPLATE,
"n_unreadable": N_UNREADABLE,
"ranking": [
{"skill": "name", "forks_enabled": N, "pct_of_configured": 0.NN, "rank": N, "customization_depth": N, "is_fork_only": false}
]
}
Overwrite each run. This is the source for next week's deltas — do not depend on parsing the prior article (format may shift, the JSON is the contract).
13. Log
Append to memory/logs/${today}.md:
## Skill Leaderboard
- **Active forks scanned:** N (of M total)
- **Configured forks:** N (XX% conversion rate)
- **Template forks:** N
- **Unreadable forks:** N
- **Top skill:** ${skill} (N forks, XX%)
- **Verdict:** ${verdict_line}
- **Promote/Match/Sunset/Fleet-only:** counts
- **Notification sent:** yes/no
- **Status:** SKILL_LEADERBOARD_OK | SKILL_LEADERBOARD_TEMPLATE_FLEET | SKILL_LEADERBOARD_NO_FORKS | SKILL_LEADERBOARD_NO_TARGET
Sandbox note
All GitHub API calls use gh api which handles auth internally — no env-var expansion in headers needed. If gh api returns 403 with X-RateLimit-Remaining: 0, back off 60s and retry once; on continued failure, record status: "rate_limited" for that fork and proceed with partial fleet (the verdict and source-status footer surface the gap). No new env vars or secrets required beyond the default GITHUB_TOKEN.
Constraints
- Never send the notification if
N_CONFIGURED < 2— the leaderboard is meaningless without a configured denominator and trains the operator to ignore. - Never count
heartbeatenabled-counts as signal in the verdict (every CONFIGURED fork inherits it from upstream default; it's a tautology). It can still appear in the table. - Do not parse last week's article for week-over-week — use
memory/topics/skill-leaderboard-state.jsononly. - Skills tagged
metaordevare excluded from the Sunset list (operator-tools, fork adoption is not the success metric). - Skills with
schedule: "workflow_dispatch"are excluded from Promote (on-demand by design — adoption % is misleading).
先判断是否适合
作者设计意图
作者的方法与取舍
边界和复核