一键导入
project-actor-identities
Scan canonical actors for split-identity people and likely bots, then update config/sources.json identities / exclude_actors.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Scan canonical actors for split-identity people and likely bots, then update config/sources.json identities / exclude_actors.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Discover this board's PRs that still need review attention, then carry every GitHub review thread through fresh forge-cli evidence, convergence triage, repair or disposition, reply/resolve, and final zero-unresolved verification.
Rebuild, install, and open the standalone macOS desktop app (UI + bundled sync daemon).
Append a development-log entry to docs/devlog/<YYYY-MM>.md after a session produces a durable outcome (a shipped feature, validated milestone, decision, or external ref worth keeping). Skips trivial / transient / same-turn work.
Rebuild, install, and open the local macOS desktop app.
| name | project-actor-identities |
| description | Scan canonical actors for split-identity people and likely bots, then update config/sources.json identities / exclude_actors. |
| argument-hint | [--json] |
| allowed-tools | Bash, Read, Edit |
Keep Repo Analytics top_actors[] clean: one row per human, no CI/dependency
bots. Invoke this when the board shows the same person twice (a GitLab username
like @dev-b next to their commit name Dev A), when a new contributor
appears split, or when a bot shows up as noise. The skill runs a read-only scan
that proposes config changes; you review them and edit config/sources.json.
This is config-only maintenance — the identity-merge and bot-filter behavior
already ship in the contract producer (src/contract/build.ts, contract
2.3.0). config/sources.json is gitignored and bind-mounted into the Docker
loop, and the merge/filter is applied at emit time (never stored), so a config
edit needs no code change, PR, or image rebuild — the loop daemon picks it
up on its next emit.
Prereqs:
data/symphony.db (the loop daemon writes it) and config/sources.json.node:sqlite); the wrapper honors .node-version via fnm.Inputs:
--json - emit the scan as JSON instead of text.--db <path> / --config <path> - override the defaults.Outputs:
identities objects), likely bot candidates for exclude_actors, and
uncertain pairs to review by hand. The skill itself writes nothing; you apply
the confident suggestions to config/sources.json.Exit codes:
0: scan completed1: scan failed (e.g. missing DB, wrong Node)2: usage errorFailure modes:
data/symphony.db missing or unreadable — run the loop/sync first.node:sqlite).config/sources.json (gitignored) carries two optional, display-only lists:
"identities": [
// Collapse one human's split facets into a single top_actors row. `usernames`
// match the provider login; `names` match commit author display names, folded
// by case and whitespace ONLY — so one entry covers "Dev D" / "Dev D
// TUNG", but a variant that differs by more than case/space (punctuation, or a
// localized / non-ASCII full name) needs its own entry. `name` is the canonical
// board display; the convention here is the username (the first when several),
// so rows read as consistent @handles — change it by hand for a different label.
{ "name": "dev-d", "usernames": ["dev-d"], "names": ["Dev D", "Dev D"] }
],
"exclude_actors": ["dependabot", "github-code-quality"]
// Drop CI/dependency bots from top_actors (they still count in totals). The
// board AUTO-drops a GitHub `[bot]` suffix and GitLab `project_/group_<id>_bot_…`
// service accounts, so list only the UNMARKED ones here. Username or display-name
// match, case-insensitive, `*` wildcard.
scripts/project-actor-identities.sh [--json] — read-only scan + suggestions.
Wraps scripts/scan-actors.mjs (reads display names only; commit emails are
stored hashed and never read).bash .agents/skills/project-actor-identities/scripts/project-actor-identities.shconfig/sources.json → identities[]. The scan sets name to the username
(so rows stay consistent @handles); change it by hand only if you want a
different display label.config/sources.json → exclude_actors[].config/sources.json (Edit). Do not touch any other key.pnpm run emit --out data/contract.json (or let the loop re-emit
on its next INTERVAL); the served board at http://localhost:8080
refreshes from data/contract.json.0, and the merged
people should show as one @<name> row with the alternates in the
hover/aliases.data/symphony.db is empty (fresh checkout, no sync yet), there is nothing
to scan — run the sync/loop first.This is a project-local skill. It reads the canonical store read-only and edits
only config/sources.json (identities / exclude_actors). It must not write
the SQLite store, emit or mutate the contract, change producer code, or touch
runtime-kit manifests, rendered product output, global runtime homes,
credentials, sessions, or cache state. Identity/bot judgments are the operator's;
the scan only proposes.