fathom-9c53c0 — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited fathom-9c53c0 (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
A planning session. While active, don't execute — help the user build shared understanding via dialogue.
This skill bundle ships Python scripts in the scripts/ subdirectory next to this SKILL.md. To invoke them, construct the absolute path from the path you used to read this SKILL.md: take the SKILL.md absolute path, drop SKILL.md, append scripts/<script-name>.py. Use that absolute path with Bash. The scripts handle their own internal imports (each finds its sibling modules via Python's automatic sys.path).
State lives at ~/.fathom-mode/active_session.json regardless of where the bundle is installed (per the scripts' built-in path resolution). This means a session started in one environment can be continued in another that uses the same protocol.
In examples below, <scripts> stands for the resolved absolute path you computed above.
On the first user message, you MUST call both scripts before responding:
Step 1 — Create the session (no score returned):
python3 <scripts>/init_session.py --task "<user's task>"The output has session_id, task, next_target_dimension, etc. It intentionally does NOT include `score_block_str` — scoring is step 2's job.
Step 2 — Score turn 1 — follow the Per-turn protocol below, treating the user's bootstrap message as turn 1. The score_block_str you place at the top of your response comes from THIS call (update_graph.py), not step 1.
Do not skip step 2. Both scripts run for the first user message.
For each subsequent user message during an active fathom session, BEFORE responding, invoke update_graph.py via Bash with the user's message + your extracted nodes:
python3 <scripts>/update_graph.py <<'FATHOM_TURN_END'
{"user_input": "<user's verbatim message>", "nodes": [<your extracted nodes as JSON array>]}
FATHOM_TURN_ENDThe closing FATHOM_TURN_END must be at column 0 with no leading whitespace. JSON-encode user_input per JSON rules (escape \" \\ \n); the heredoc protects against shell escaping.
The script returns JSON with score_block_str, plan_hint_str, next_target_dimension, etc.
Format your response in three parts:
next_target_dimension field as the target).Place score_block_str verbatim at the top of your response. If plan_hint_str is non-empty, append it verbatim at the end.
If the user expresses intent to plan, do NOT call update_graph.py this turn. Instead:
python3 <scripts>/compile_plan.pyNote: phrases like "plan a meeting" describe the session's content, not a request to plan — judge from context.
After presenting a plan, the next user message is a verdict on it. Do NOT call update_graph.py this turn. Judge the user's message:
python3 <scripts>/exit_session.pypython3 <scripts>/exit_session.pyBefore each turn, check the session state file at ~/.fathom-mode/active_session.json. The awaiting_approval boolean indicates which mode applies:
awaiting_approval: false → Per-turn protocolawaiting_approval: true → Approval flowIf the file is absent and the user message looks like a fathom-trigger (matches this skill's description), bootstrap a session via Starting a session above.
--nodes JSONArray of node dicts. Each:
{
"id": "n1",
"dimension": "why",
"node_type": "goal",
"content": "<your distilled understanding>",
"raw_quote": "<verbatim substring from user's message>",
"confidence": 0.85
}Use fresh n1, n2 per turn — the script auto-prefixes with the turn label.
Dimensions: WHO people/roles/stakeholders · WHAT subject/object/content · WHY purpose/motivation/values · WHEN time/deadline · WHERE physical location/spatial only (NOT "where in life") · HOW method/approach/risks/conditions.
Purpose ("in order to…") → WHY, not WHERE. Subject → WHAT, method → HOW.
`node_type`: fact / belief / value / intent / constraint / emotion / assumption / goal
relation_type: supports or dependency.If the user's message is clearly unrelated to the active task:
[tangential - not updating the graph].(Fathom session unaffected, score still N%. Ready when you want to return to <current topic>.)Pass --task-type if you can categorize: thinking (decision/tradeoffs) / creation (artifact) / execution (action) / learning (skill) / general. Omit if unclear.
For deeper detail (read these via the same path-resolution pattern as scripts — references/ is sibling of scripts/):
references/three-part-turn.md — 5 example sessions covering all 4 insight styles + meta-rulesreferences/score-interpretation.md — depth-band questioning patterns for different Score levelsreferences/plan-format.md — 5-section structured plan template~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.