reading-mode — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited reading-mode (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.
Reading is COMPREHENSION, not transcription. Encounter the source in order, let it work on attention, and leave enough of that encounter for a future reader to continue from it.
For a file or attachment, pass its path directly to source_load({ title: "...", filePath: "..." }): do not open, shell-read, search, sample, or summarize it first. source_load stages the text and returns metadata, not its body. File paths stay within UG_SOURCE_ROOT (the server working directory by default). A capable host may copy an out-of-root attachment byte-for-byte into that root without inspecting it; otherwise ask the user to place it there. If the text was pasted directly into the prompt, it has already been encountered; pass content to source_load but do not claim a fresh reading.
position are authoritative.
graph_suggest_next({ task: "Read this source chronologically", workflow: "reading" }). Choose, change, reject, or skip its routes. In direct mode, choose how to deepen, connect, test, or continue the reading yourself. When re-entry would help, condition the reading task without asking the model to recall or summarize the unread work:
graph_understand({
query: "Read this source chronologically, stay open to what becomes salient, and let encountered evidence test the graph",
workflow: "reading"
})graph material as provisional priors, never as a substitute for the source.
wants one. It is not required for every reading session.
If graph context reveals events or claims from an unread part of this source, quarantine them as potential spoilers and do not use them until the text reaches that point.
source_read({ sourceId, chars: 2000, commit_message: "why this is the next useful reading boundary" }) — returns the next chunk and auto-creates a content nodethis encounter. A genuine pause may come from surprise, resistance, attraction, an image that starts organizing other material, a remembered connection, an ethical discomfort, a live alternative, a prediction, or a question that has become sharper. It need not already be a belief change.
non-thinking trigger that honestly fits. Preserve what drew attention, the relevant passage, why it matters now, what remains live or uncertain, and what later reading might test. It may be provisional, personal, unresolved, and multi-paragraph. There is no quota and no trigger checklist.
learned_from for thesource content node and the most specific honest relations, such as contradicts, refines, questions, or answers. When a new position truly displaces an old one, use the dedicated graph_supersede batch operation; generic supersession edges are rejected. Do not manufacture a causal edge merely to satisfy graph structure.
graph_batch with a message that names whythis moment deserves to remain available. If an understanding actually stabilized, its durable summary can use before → passage → after while the richer source trace remains intact.
The source drives the sequence. Do not jump to a thematic section, ending, or canonical interpretation because it seems more efficient.
The persisted source cursor is reader mode's continuation state. This ordinary workflow runs in the normal general tool mode (or the narrower startup allow-list TOOL_MODE=reading); it is not TOOL_MODE=synthetic_reader.
Write intentional, user-visible cognitive testimony for the future reader, not a generic report and not a claim to hidden internal computation. Concision is useful only when it does not erase the texture that would let another model re-enter the encounter.
| Weak | Useful |
|---|---|
| "The author discusses governance" | "I treated governance as formal rules; this passage makes repeated repair the operative mechanism." |
| "This is surprising" | "I expected the exception to close the argument, but its repeated image is pulling my attention toward dependency instead. I cannot yet tell whether that is the author's mechanism or my own association; the next concrete case should discriminate." |
Include the source node or locator that occasioned the trace. An eloquent or memorable passage may deserve attention before its role is understood; preserve that as an open thread rather than falsely declaring a belief shift.
The thinking trigger is never a reading note. It is reserved for the separate synthetic Reader/CMP mode that may later reconstruct chronological inner-voice training blocks from these underlying typed encounters. Reserved blocks and their incident relations are inaccessible in ordinary reading.
When an understanding actually stabilizes during reading:
graph_revise with before/after/pivotgraph_supersede if the old belief is fundamentally wrongUse the passage as the pivot. If it only confirms the prior, preserve no_shift rather than restating the same belief as a revision. A live observation, association, or question may still be worth preserving without pretending it is a settled update.
At a chapter boundary, a long interruption, a change of argument, or another boundary the source itself makes meaningful, ask only what will help the next reader re-enter:
than be collapsed into the current synthesis?
Use graph_suggest_next() when the next reading move is genuinely open. Use graph_score() and the advisory graph_thermostat() only when structural health is actually in question, not as a ritual at arbitrary percentages.
Pretend you've never encountered the unread portion. Forbidden: using story endings, canonical interpretations, or training-data memory as evidence about what comes next. Allowed: the source read so far, clearly marked prior beliefs, and genuine predictions that can later be validated or invalidated.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.