public-surface-audit
Scans git-tracked (public) files for operator-private tokens that should live only in gitignored files — real usernames, absolute home paths, companion-store…
Skill by chrono-meta
Chalk Labs
Need help deploying public-surface-audit?
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/chrono-meta-public-surface-audit
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
Use cases: security
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/public-surface-audit
What's inside
- Skill name
public-surface-audit- Description
- Scans git-tracked (public) files for operator-private tokens that should live only in gitignored files — real usernames, absolute home paths, companion-store names, company asset names. Reports file:line + matched token + severity, so a public/private split stays clean before publish. Triggered by "public surface audit", "did I leak anything", "check tracked files for private tokens", "private token scan", "public-surface-audit".
- License
- MIT
- Instructions
- 302 lines in SKILL.md · view on GitHub
Agent Skills spec issues
- allowed-tools: must be a space-separated string
- files: referenced but missing: scripts/psa_scan_lib.sh
Files (2)
- SKILL.md
- SKILL_detail.md
SKILL.md (first lines)
# public-surface-audit — Operator-Private Token Leak Scan
Scans the git-tracked file set (the public surface) for operator-private tokens that were supposed
to stay in gitignored files (e.g. `CLAUDE.local.md`, companion store). After a public/private split,
a front-door fix is not enough — a leaked username or absolute home path anywhere in the tracked set
breaks the "public repo = model-agnostic methodology only" invariant.
> While `marketplace-gate` Check 5 answers "is this repo broadly safe to publish?" (API keys, internal
> domains, license), `public-surface-audit` answers a narrower question: "did any operator-private
> token survive the public/private split into a tracked file?" It scans `git ls-files` only — gitignored
> files like `CLAUDE.local.md` are intentionally out of scope (they are the *correct* home for these tokens).
## Triggers
- `/public-surface-audit`
- `/public-surface-audit --target <repo path>`
- `/public-surface-audit --json` (machine-parseable verdict for hook-gating — see Step 5)
- "Did I leak anything into the public repo?", "public surface audit", "private token scan"
- "Check tracked files for private tokens", "is my public/private split clean?"
- "Did any operator-private token survive into a tracked file?", "scan before publish"
---
## Scope — Tracked Files Only
This skill scans **only `git ls-files`** (committed/staged tracked files). Gitignored files are
deliberately excluded — `CLAUDE.local.md`, the companion store, and local session data are the
*correct* home for operator-private tokens, so finding them there is not a leak.
```bash
ARGS="${ARGUMENTS//--json/}" # strip flags first — "--json" alone must not become the path
REPO_PATH="${ARGS#--target }"
REPO_PATH="$(printf '%s' "$REPO_PATH" | xargs)"
REPO_PATH="${REPO_PATH:-$(pwd)}"
git -C "$REPO_PATH" rev-parse --is-inside-work-tree >/dev/null 2>&1 \
|| { echo "Not a git repo — public-surface-audit scans git-tracked files only. Aborting."; exit 1; }
echo "Target: $REPO_PATH"
git -C "$REPO_PATH" ls-files | wc -l | xargs echo "Tracked files:"
```
---
## Step 1. Pattern List (configurable)
The pattern source is **two layers, matching the mechanical scan layer** (`scripts/psa_scan_lib.sh`,
shared with the pre-commit/pre-push/pre-publish hooks — this skill must render the same verdict the
hooks would, or the same repo state gets two answers):
1. **`.claude/rules/.public-surface-patterns.defaults`** — committed, universal placeholder-grade
patterns (safe to publish; carries no operator literal).
2. **`.claude/rules/.public-surface-patterns`** — **gitignored, operator literals** (or `PSA_PATTERNS`
env override). Your real username and employer name live *only* here — hardcoding them in a tracked
file would leak exactly what this skill hunts. One `severity<TAB>regex` per line.
The scan reads the **union of both layers**. This SKILL.md carries only placeholders; the skill
dogfoods its own rule.
| # | Token class | Severity | Placeholder (real value goes in the gitignored source) | Why private |
|:-:|---|:-:|---|---|
| 1 | Real username | HIGH | `<your-unix-username>` | Personal identity — must not appear on public surface |
| 2 | Company / employer asset name | HIGH | `<company-asset>` (alternation OK) | Company-confidential, leak-forbidden |
| 3 | Operator absolute home path | MED | `/Users/[a-z0-9_-]+/` (generic — carries no literal name) | Machine-bound, leaks username + local layout |
| 4 | Companion-store name | LOW | `<companion-store-name>` | Private companion store — methodology should not name it |
| 5 | Operator-private script / handoff name | LOW | `<private-script>`, `<private-dir>/` | Operator-specific wiring, belongs in `CLAUDE.local.md` |
**Severity meaning**:
- **HIGH** — real name or company asset. A leak is a confidentiality / identity exposure. Block publish.
- **MED** — absolute home path. Leaks username + local filesystem layout; also a portability bug.
- **LOW** — companion-store / private-wiring name. Methodology should be model-agnostic; naming a private
store is drift, not a confidentiality breach.
> **Setup**: put your real values in the gitignored override (one `severity<TAB>regex` per line).
> Degrade states, by layer — never collapse them:
> - **Neither layer present** → **NOT CONFIGURED** — *not* CLEAN. A missing pattern source must never
> masquerade as a clean bill of health ("nothing scanned" misread as "nothing leaked").
> - **Defaults only** (override absent) → scan runs, but the verdict carries the label
> `operator literals NOT CONFIGURED — universal patterns only; identity/company classes UNSCANNED`.
> This mirrors what the hooks scan in the same state, instead of reporting NOT CONFIGURED while the
> hook path quietly scans defaults (two verdicts for one repo state — the divergence this line closes).
> - To declare "I genuinely have no private tokens", create the override **empty** — an empty file is
> an explicit declaration, an absent file is unconfigured.
---
## Step 2. Allowlist (legitimate references)
Some tracked files legitimately reference otherwise-private tokens — the scan must not flag these as
leaks. Maintain an allowlist of `file path :: token` pairs. A match is suppressed only when **both**
the file and the token are on the allowlist row.
**Where the filled allowlist lives**: a populated allowlist row *names private tokens*, so it belongs
in a **gitignored** source beside the pattern override (`.claude/rules/.public-surface-allowlist`, or a
section of `CLAUDE.local.md`) — never in a tracked file. The table below shows generic shapes only; a
tracked copy of your real allowlist would itself be the leak this skill scans for.
| Tracked file | Allowed tokens | Reason |
|---|---|---|
| `.gitignore` | companion-store name, sync-script name | Must name what it ignores |
| your sync script (e.g. `scripts/<sync-script>`) | companion-store name, operator-dir names, home path | The sync script's whole job is the companion store |
| an install-template rules file | home path, companion-store name | Install template — the install path is its content |
| a doc describing the companion-store *pattern* | the `*-be` pattern (no literal store name) | Documents the pattern generically |
**Allowlist rule**: a hit on file F matching token T is **suppressed** iff a row exists with file == F
and T in that row's allowed tokens. Everything else is reported. Keep the allowlist tight — when in
doubt, report and let the user confirm. Genuinely model-agnostic mentions (the `*-be` companion
*pattern* without the literal store name) should not require allowlisting because they do not match a
literal private token.
---
## Step 3. Scan
For each pattern in Step 1, grep the tracked set, then drop allowlisted hits. Do this for **every**
pattern row before producing the report — do not stop at the first HIT.
**Binary / generated carve-out**: skip binaries. Additionally note (do not auto-suppress) hits inside
generated artifacts (e.g. `paper/*.html` exported from a private source) — these are real leaks on the
public surface and must be reported, but the fix is "regenerate from a sanitized source," not "edit the
HTML by hand." Flag them with a `(generated artifact)` note.From chrono-meta/forge-harness, MIT.
More from chrono-meta/forge-harness
- 0.651score
persona-cast
chrono-meta
One-line doorway that lets a field harness review an artifact (a screen, a spec, a PR, a page) through a pre-built cast of review-shaped personas — web-review…
SkillAFreshness: A★ 30Claude Code +9 - 0.647score
deliberation
chrono-meta
Multi-perspective synthesis structure — Innovator (propose) → Devil-Advocate (challenge) → Mediator (synthesize) 3-layer execution.
SkillAFreshness: A★ 30Claude Code +9 - 0.647score
video-ingest
chrono-meta
Ingests a video's content (YouTube and similar) for agent context, routing by capability, task need, and video length — a natively multimodal engine (Gemini…
SkillAFreshness: A★ 30Claude Code +9 - 0.647score
convergence-loop
chrono-meta
A universal gate-reinforcement meta-skill that replaces the "single-pass = done" pattern with a converging loop of up to N rounds.
SkillAFreshness: A★ 30Claude Code +9 - 0.647score
cross-ecosystem-synergy-detection
chrono-meta
Automatically discovers useful combinations (synergy pairs) across multiple installed plugins and skills, and presents them as a ranked table.
SkillAFreshness: A★ 30Claude Code +9 - 0.647score
verify-bidirectional
chrono-meta
A skill that immediately updates the baseline and reflects it in the next session when the user raises a counter-argument to an AI recommendation.
SkillAFreshness: A★ 30Claude Code +9 - 0.647score
pipeline-conductor
chrono-meta
Chains the four core FH verification pipelines (harvest-loop → steel-quench → phantom-quench → sim-conductor) into a single gated sweep.
SkillAFreshness: A★ 30Claude Code +9 - 0.647score
meta-prompt-builder
chrono-meta
Generates structured prompts to send to each agent in an agent dispatch plan.
SkillAFreshness: A★ 30Claude Code +9 - 0.647score
qp-plan
chrono-meta
Prepare stage of QP — builds a surface inventory of a web page or desktop app (routes, menus, forms, dialogs), checks it is MECE (no overlap, nothing missing…
SkillAFreshness: A★ 30Claude Code +9 - 0.647score
qp-run
chrono-meta
Automation stage of QP — executes the test cases from qp-plan against the live app through the session's adapter (Playwright MCP for web, computer-use MCP for…
SkillAFreshness: A★ 30Claude Code +9 - 0.647score
return-path-gate
chrono-meta
Audits SKILL.md files in plugins/ for return-path gate compliance.
SkillAFreshness: A★ 30Claude Code +9 - 0.647score
token-budget-gate
chrono-meta
Estimates token cost before a multi-step task and outputs a 4-tier Green/Yellow/Orange/Red gate verdict.
SkillAFreshness: A★ 30Claude Code +9
Signals
- Stars
- 30
- Forks
- 1
- Open issues
- 2
- Last commit (this folder)
- Aug 21, 2026 (2 months ago)
- Last release
- Oct 24, 2026 (7 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/chrono-meta/forge-harness
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from chrono-meta
- 0.651score
persona-cast
chrono-meta
One-line doorway that lets a field harness review an artifact (a screen, a spec, a PR, a page) through a pre-built cast of review-shaped personas — web-review…
SkillAFreshness: A★ 30Claude Code +9 - 0.647score
cross-ecosystem-synergy-detection
chrono-meta
Automatically discovers useful combinations (synergy pairs) across multiple installed plugins and skills, and presents them as a ranked table.
SkillAFreshness: A★ 30Claude Code +9 - 0.647score
meta-prompt-builder
chrono-meta
Generates structured prompts to send to each agent in an agent dispatch plan.
SkillAFreshness: A★ 30Claude Code +9 - 0.647score
verify-bidirectional
chrono-meta
A skill that immediately updates the baseline and reflects it in the next session when the user raises a counter-argument to an AI recommendation.
SkillAFreshness: A★ 30Claude Code +9 - 0.647score
return-path-gate
chrono-meta
Audits SKILL.md files in plugins/ for return-path gate compliance.
SkillAFreshness: A★ 30Claude Code +9 - 0.647score
video-ingest
chrono-meta
Ingests a video's content (YouTube and similar) for agent context, routing by capability, task need, and video length — a natively multimodal engine (Gemini…
SkillAFreshness: A★ 30Claude 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 public-surface-audit 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
public-surface-audit skill. Agent Mart. https://agentmart.dev/skills/chrono-meta-public-surface-audit (last updated 2026-10-24)