skill-sources/rethink/SKILL.md
Challenge system assumptions against accumulated evidence. Triages observations and tensions, detects patterns, generates proposals. The scientific method applied to knowledge systems. Triggers on "/rethink", "review observations", "challenge assumptions", "what have I learned".
npx skillsauth add agenticnotetaking/arscontexta rethinkInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Read these files to configure domain-specific behavior:
ops/derivation-manifest.md — vocabulary mapping, domain context
vocabulary.notes for the notes folder namevocabulary.note for the note type name in outputvocabulary.rethink for the command name in outputvocabulary.topic_map for MOC referencesvocabulary.cmd_reflect for connection-finding referencesops/config.yaml — thresholds, processing preferences
self_evolution.observation_threshold: number of pending observations before suggesting rethink (default: 10)self_evolution.tension_threshold: number of pending tensions before suggesting rethink (default: 5)ops/methodology/ — existing methodology notes (read all to understand current system self-knowledge)
If these files don't exist (pre-init invocation or standalone use), use universal defaults.
The command name itself transforms per domain. The derivation manifest maps the universal name to domain-native language. If no manifest exists, use "rethink" as the command name.
Target: $ARGUMENTS
Parse immediately:
START NOW. Reference below defines the six-phase workflow.
The system is not sacred. Evidence beats intuition.
Every rule in the context file, every workflow in a skill, every assumption baked into the architecture was a hypothesis at some point. Hypotheses need testing against reality. Observation notes in ops/observations/ capture friction from actual use. Tension notes in ops/tensions/ capture unresolved conflicts. Rethink first triages these individually (some become {DOMAIN:notes}, some become methodology updates, some get archived), then compares remaining evidence against what the system assumes and proposes changes when patterns emerge.
This is the scientific method applied to knowledge systems: hypothesize, implement, observe, revise.
Without this loop, generated systems ossify — they accumulate friction that never gets addressed, contradictions that never get resolved, and methodology learnings that never get elevated to system-level changes. /rethink is the immune system that prevents calcification.
Rule Zero: ops/methodology/ is the canonical specification of how this system operates. Before triaging observations, check whether the system has drifted from what the methodology says it should do.
# Get all methodology notes with their metadata
for f in ops/methodology/*.md; do
echo "=== $f ==="
head -20 "$f" # frontmatter with category, created, updated, status
echo ""
done
Read all methodology notes fully. Extract:
Read:
ops/config.yaml — current configuration stateops/derivation-manifest.md — vocabulary and feature stateType 1: Staleness
# Compare config.yaml modification time vs newest methodology note
CONFIG_MTIME=$(stat -f %m ops/config.yaml 2>/dev/null || stat -c %Y ops/config.yaml 2>/dev/null || echo 0)
NEWEST_METH=$(ls -t ops/methodology/*.md 2>/dev/null | head -1)
METH_MTIME=$(stat -f %m "$NEWEST_METH" 2>/dev/null || stat -c %Y "$NEWEST_METH" 2>/dev/null || echo 0)
If CONFIG_MTIME > METH_MTIME: config has changed since methodology was last updated. Flag as staleness drift.
Type 2: Coverage Gap
For each active feature in config.yaml (features with enabled: true or features present in the active configuration), check whether a corresponding methodology note exists. Features without methodology coverage represent gaps — the system does things it cannot explain to itself.
Check these feature areas:
Type 3: Assertion Mismatch
For each methodology note that makes a behavioral assertion ("What to Do" section), check:
Report: which assertions align, which contradict, which have no corresponding system element.
For each drift finding, create an observation note in ops/observations/:
---
description: [specific drift finding]
category: drift
status: pending
observed: {today's date}
related_notes: ["[[methodology note]]", "[[config element]]"]
---
# [drift finding as prose sentence]
**Drift type:** staleness | coverage-gap | assertion-mismatch
**Methodology note:** [[affected note]]
**System element:** [config.yaml field, context file section, or missing coverage]
**Discrepancy:** [what the methodology says vs what the system does]
Resolution: update methodology note | update system config | flag for human review
Output drift status summary:
Drift Check:
Staleness: [N findings — config changed, methodology not updated]
Coverage gaps: [N features without methodology notes]
Assertion mismatches: [N contradictions between methodology and system]
Total drift observations created: [N]
If drift observations were created, they join the pool of pending observations for Phase 1 triage. Proceed to Phase 1.
OBS_PENDING=$(grep -rl '^status: pending' ops/observations/ 2>/dev/null)
OBS_COUNT=$(echo "$OBS_PENDING" | grep -c . 2>/dev/null || echo 0)
TENSION_PENDING=$(grep -rl '^status: pending\|^status: open' ops/tensions/ 2>/dev/null)
TENSION_COUNT=$(echo "$TENSION_PENDING" | grep -c . 2>/dev/null || echo 0)
Read each pending item fully. These are small atomic notes — load all of them. Understanding the full content is required for accurate triage. If zero pending items, report clean state and exit early.
Also read ops/methodology/ to understand existing methodology notes — this prevents creating duplicates and informs whether new observations should extend existing methodology rather than create new notes.
Assign exactly one disposition per observation or tension:
| Disposition | Meaning | When to Apply | Action |
|-------------|---------|---------------|--------|
| PROMOTE | Reusable insight worth keeping as a permanent {DOMAIN:note} | General principle across sessions. Would work as a claim note. Crystallized insight, not operational guidance. | Create {DOMAIN:note} in {vocabulary.notes}/, set observation status: promoted, add promoted_to: [[title]] |
| IMPLEMENT | Operational guidance that should change the system | "System should do X differently." Points to a concrete improvement in context file, template, or skill. | Update the specific file, set status: implemented, add implemented_in: [filepath] |
| METHODOLOGY | Friction pattern that should inform agent behavior | Behavioral learning. Not a domain insight (PROMOTE) or a system change (IMPLEMENT) — a methodology learning about HOW to operate. | Create or update methodology note in ops/methodology/, set status: implemented, add implemented_in: ops/methodology/[file] |
| ARCHIVE | Session-specific, no longer relevant | One-session-specific with no lasting value. Already addressed by later work. Superseded by newer evidence. | Set status: archived |
| KEEP PENDING | Not enough evidence yet | Might matter but need more data. Part of a pattern that has not fully emerged. Single data point that could go either way. | No change — leave status: pending |
Triage heuristics for observations:
Triage heuristics for tensions:
status: dissolved, add dissolved_reason)Present the full triage to the user before executing any changes:
--=={ {DOMAIN:rethink} — Triage }==--
Evidence: [N] observations, [M] tensions
PROMOTE ([count])
[filename] — [title] → proposed {DOMAIN:note} title
[filename] — [title] → proposed {DOMAIN:note} title
IMPLEMENT ([count])
[filename] — [title] → change [specific file/section]
[filename] — [title] → change [specific file/section]
METHODOLOGY ([count])
[filename] — [title] → create/update ops/methodology/[name].md
[filename] — [title] → extends existing ops/methodology/[name].md
ARCHIVE ([count])
[filename] — [title] — [reason for archiving]
KEEP PENDING ([count])
[filename] — [title] — [why more evidence needed]
Use AskUserQuestion: "Review the triage above. Approve all, or list items to reclassify (e.g., 'keep obs-003 pending, promote obs-007 instead')."
Wait for user confirmation before proceeding to 1d. Do not execute triage without approval.
After user confirmation, apply all dispositions in order:
For PROMOTE items:
status: promoted, add promoted_to: [[note title]]For IMPLEMENT items:
status: implemented, add implemented_in: [filepath]For METHODOLOGY items: (see Phase 2 below)
For ARCHIVE items:
status: archivedstatus: dissolved, add dissolved_reason: [why]For KEEP PENDING items:
Update MOCs: After triage execution, update ops/observations.md and ops/tensions.md to reflect status changes. Move entries between Pending/Promoted/Archived/Resolved/Dissolved sections as appropriate.
For items triaged as METHODOLOGY, create or update notes in ops/methodology/.
---
description: [what this methodology note teaches — specific enough to be actionable]
type: methodology
category: [processing | capture | connection | maintenance | voice | behavior | quality]
source: rethink
created: YYYY-MM-DD
status: active
evidence: ["obs-filename-1", "obs-filename-2"]
---
# [prose-as-title describing the learned behavior]
[Body developing the methodology learning:
- What the agent should do
- What the agent should avoid
- Why this matters (what went wrong without this)
- When this applies (scope/context)]
---
Related: [[methodology]]
If a methodology note with similar content already exists:
status: implemented, add implemented_in: ops/methodology/[existing-file]Before creating a new methodology note:
ops/methodology/ (these are small)After creating or updating methodology notes, update ops/methodology.md:
Analyze remaining pending evidence (post-triage) plus promoted/implemented history for systemic patterns. This is where individual data points become actionable signals.
status: pending after triagestatus: open or status: pending after triageops/methodology/ by category| Pattern Type | Signal | Threshold | What It Means | |-------------|--------|-----------|---------------| | Recurring themes | 3+ observations about the same area or concept | Systemic issue requiring structural response | Something is fundamentally misaligned in that area | | Contradiction clusters | Multiple tensions pointing at the same architectural assumption | Assumption may be wrong | The system has a flawed foundation in that area | | Friction accumulation | Multiple observations about the same workflow step | Workflow needs redesign | A specific process is consistently painful | | Drift signals | Observations suggesting vocabulary, structure, or threshold sensitivity no longer fits | /architect or /reseed territory | The system's configuration may have outgrown the user's actual needs | | Methodology convergence | Multiple /remember captures in ops/methodology/ pointing at the same behavioral pattern | Methodology note needs elevation to context file | A methodology learning has been validated enough to become a system-level rule |
Group by category field: Sort observations by their category (methodology, process-gap, friction, surprise, quality). 3+ items in the same category = potential pattern.
Group by referenced {DOMAIN:topic maps} or system areas: Extract wiki links and file references from observation bodies. 3+ observations referencing the same area = recurring theme.
Cross-reference tensions: Check if multiple tensions share the same assumption. Multiple tensions pointing at the same thing = assumption may be wrong.
Check friction frequency for acceleration: Are friction observations about the same step appearing more frequently? An accelerating pattern is a stronger signal than steady-state friction.
Compare methodology notes against context file: If ops/methodology/ has 3+ notes in the same category that are not reflected in the context file, the methodology has converged enough for elevation.
Check for vocabulary drift: If observations use different terms than the derivation manifest or context file, the system's language may have drifted from the user's actual vocabulary.
Do not fabricate patterns from insufficient evidence. A single observation is a data point, not a pattern. Two observations are a coincidence. Three observations are a pattern worth investigating.
For each candidate pattern, assess:
Only report patterns that pass all four checks.
--=={ {DOMAIN:rethink} — Patterns }==--
Patterns detected: [N]
1. [Pattern type]: [description]
Evidence: [filenames, one per line]
Area: [system area affected]
Impact: [what breaks or degrades]
Confidence: [high | medium — never low, since low means not enough evidence]
2. [Pattern type]: [description]
...
No patterns found in: [areas with < 3 data points]
If no patterns are detected, report this clearly. Pattern detection requires sufficient evidence — an empty result after triage is a sign the system is healthy, not that rethink failed.
For each detected pattern, generate one specific, actionable proposal.
Proposal [N]: [title — what would change]
Evidence:
- [filename] — [one-line summary of this observation's contribution]
- [filename] — [one-line summary]
- [filename] — [one-line summary]
Pattern: [which pattern type from Phase 3]
Current assumption:
[Quote the specific section of context file, skill, or template
that embodies the assumption being challenged.
Include the file path and section heading.]
Proposed change:
[Specific file and section. What changes, what stays.
Before/after if possible. Concrete enough that someone
could implement this without additional context.]
What would improve:
[Concrete expected benefit — not "things would be better"
but "reduces processing time for inbox items because..."
or "prevents the duplicate creation issue observed in obs-003, obs-007"]
What could go wrong:
[Risk assessment — what might break? What second-order effects?
What assumptions does this proposal itself make?]
Reversible: [yes | no | partially — explain if partially]
Scope: [context-file | skill | template | architecture | methodology]
Every proposal MUST have:
| Evidence Strength | Maximum Proposal Scope | |-------------------|----------------------| | 2 observations, same area | Methodology note update | | 3+ observations, clear pattern | Skill or template change | | 5+ observations + tensions | Context file section change | | Pervasive pattern across areas | Architectural change (recommend /architect consultation) |
Do not propose architectural changes based on thin evidence. The threshold scales with the blast radius.
If 10+ pending observations or 5+ pending tensions remain after triage AND pattern detection did not consume them into proposals:
Threshold signal for /next:
[N] pending observations, [N] pending tensions remain
/next should prioritize {DOMAIN:rethink} at session priority
NEVER auto-implement proposals. Changes to system assumptions require human judgment. This is the invariant that makes rethink safe — it can analyze aggressively because it cannot act unilaterally.
--=={ {DOMAIN:rethink} — Complete }==--
Triaged: [N] observations, [M] tensions
Promoted to {DOMAIN:notes}: [count]
Methodology updates: [count]
Implemented: [count]
Archived: [count]
Kept pending: [count]
Patterns detected: [count]
1. [Pattern type]: [brief description]
Evidence: [count] items
Proposal: [one-line summary]
2. [Pattern type]: [brief description]
Evidence: [count] items
Proposal: [one-line summary]
Awaiting approval for [count] proposals.
Use AskUserQuestion: "Which proposals should I implement? (all / none / list numbers, e.g. '1, 3'). You can also ask me to modify a proposal before deciding."
Handle each response:
| Response | Action | |----------|--------| | "all" | Implement all proposals | | "none" | Skip all. Optionally ask why to capture reasoning as a new observation. | | "1, 3" | Implement listed proposals only | | "modify 2" | Ask what should change, revise proposal, re-present for approval | | Question about a proposal | Answer, then re-ask for approval |
For each approved proposal:
## YYYY-MM-DD: [change title]
**Source:** /{DOMAIN:rethink} — [pattern type]
**Evidence:** [observation/tension filenames]
**Change:** [what was modified, which files]
**Risk:** [risk assessment from proposal]
resolved_by: [changelog reference] to each observation/tension that contributed to the approved proposal.If any observations were promoted to {DOMAIN:notes}:
[count] {DOMAIN:notes} were promoted from observations.
Run /{DOMAIN:connect} on promoted notes to find connections.
Promoted: [list of note titles]
If promoted items should enter the processing pipeline (queue-based systems):
current_phase: "reflect" (the note already exists, so skip create)After rethink completes, capture the session itself. Create or append to ops/rethink-log.md:
## YYYY-MM-DD HH:MM
**Evidence reviewed:** [N] observations, [M] tensions
**Triage:** [count] promoted, [count] methodology, [count] implemented, [count] archived, [count] pending
**Patterns:** [count] detected
**Proposals:** [count] generated, [count] approved, [count] rejected, [count] deferred
**Changes applied:** [list of files modified]
This creates an evolution history. When /architect or /reseed runs, it can review the rethink log to understand how the system has evolved and what patterns have driven changes.
These directories are part of the operational learning loop kernel primitive. If they do not exist:
ops/observations/ and ops/tensions/. Create these directories and their MOC files to begin capturing system friction."Report clean state:
--=={ {DOMAIN:rethink} — Clean State }==--
No pending observations or tensions.
The system has no accumulated friction to process.
Continue capturing observations during normal work.
Run /{DOMAIN:rethink} again when signals accumulate.
If 3+ drift signals are detected (vocabulary mismatch, structural misalignment, threshold disconnect between what the system expects and what the user actually does):
Run triage normally but note that pattern detection requires more data:
Note: [N] items is below the threshold for reliable pattern detection.
Triage completed. Pattern analysis will be more reliable after more
observations accumulate. This is expected early in the system lifecycle.
When target is a specific filename:
If two proposals would contradict each other (e.g., one suggests adding complexity, another suggests simplifying the same area):
If the evidence pool is very large:
Never:
Always:
Rethink is the system's immune system. It detects when assumptions have become infections — beliefs that made sense once but now cause harm. Healthy systems challenge themselves. Unhealthy systems calcify around untested assumptions.
The methodology learning loop closes here:
Work happens → friction captured as observations/tensions
→ /remember captures immediate corrections
→ observations accumulate
→ /rethink triages + detects patterns + proposes changes
→ human approves changes
→ system evolves
→ less friction → fewer observations → healthy system
Run {DOMAIN:rethink}. Let evidence win.
tools
Apply plugin knowledge base updates to an existing generated system. Consults the Ars Contexta research graph for methodology improvements, proposes skill upgrades with research justification. Never auto-implements. Triggers on "/upgrade", "upgrade skills", "check for improvements", "update methodology".
documentation
Interactive walkthrough for new users. Learn by doing — each step creates real content in your vault. Three tracks (researcher, manager, personal) with a universal learning arc. Triggers on "/tutorial", "walk me through", "how do I use this".
testing
Scaffold a complete knowledge system. Detects platform, conducts conversation, derives configuration, generates everything. Validates against 15 kernel primitives. Triggers on "/setup", "/setup --advanced", "set up my knowledge system", "create my vault".
testing
Re-derive your knowledge system from first principles when structural drift accumulates. Analyzes dimension incoherence, vocabulary mismatch, boundary dissolution, and template divergence. Preserves all content while restructuring architecture.