skills/update-patterns/SKILL.md
Update living Obsidian pattern files from metadata-enriched transcriptions. Use when asked to populate or update pattern files for communication flaws, beliefs, fears, principles, or people/projects mentioned.
npx skillsauth add psycho-baller/skills update-patternsInstall 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.
Use this skill to maintain living pattern files from notes that already have generate-metadata frontmatter.
The goal is not to summarize each note again. The goal is to accumulate cross-note intelligence so Rami can see repeated problems, beliefs, fears, principles, people, and projects over time.
This skill updates pattern files. It does not generate per-note metadata and it does not produce Atomic Habits principle reports. Use generate-metadata before this skill and generate-principles when the user asks for principles to live by.
The agent owns judgment. The script owns structure.
Default pattern files:
Communication Flaws.md from communication_flawsRelationship Patterns.md from relationship_patternsIdentity Beliefs.md from identity_beliefsRecurring Fears.md from recurring_fearsDecision Principles.md from decision_principlesOpen Problems.md from open_problemsExperiments To Run.md from experiments_to_runPeople Mentioned.md from people_mentionedProjects Mentioned.md from projects_mentionedThe default output directory is:
../Obsidian/My Outputs/Patterns/
The directory is configurable. If the user asks for a different path, use that.
The list is expandable through pattern_schema.json.
Use markdown files with generated metadata frontmatter.
Before updating patterns, validate the notes when possible:
uv run python /Users/rami/Documents/life-os/ai-agents-config/skills/generate-metadata/scripts/generate_metadata.py validate path/to/note.md
If a note does not validate, skip it and report it. Do not block the whole batch.
For each input note:
Do not create fake patterns from empty metadata fields.
Do not blindly create one pattern entry per metadata value. The agent should cluster related metadata values into the smallest useful set of recurring patterns while preserving meaningful distinctions.
The skill is doing second-order synthesis:
fear of missing the onescarcity thinking around rare romantic opportunitiesPrefer the second-order pattern when multiple notes point to the same underlying loop.
Each pattern entry should include:
title: readable phrase, not a tag slugstatus: active, possible, resolved, or archivedsource_notes: wiki-links to notes that support the patternevidence: short note-backed evidence linessummary: what the pattern iswhy_it_matters: why Rami should careaction: what Rami should do when this pattern appearsrelated_patterns: optional wiki-links to other pattern entries or concept notesFor people and projects, the action can describe the practical reason to track them.
The script uses managed blocks with stable IDs:
### getting too far ahead in your head
<!-- pattern-id: communication_flaws/getting-too-far-ahead-in-your-head -->
If a block with the same pattern-id already exists, the script replaces that managed block with the new merged version.
If no matching block exists, the script appends a new block.
Anything outside managed pattern blocks should be preserved.
Merge when two entries describe the same loop in different words:
turning uncertainty into fantasyprojecting a future before enough facts existKeep separate when the trigger, consequence, or action is different:
approval seeking in social situationsoverexplaining when trying to sound competent/tmp/update-patterns-<short-name>.json.possible status.Apply updates:
uv run python /Users/rami/Documents/life-os/ai-agents-config/skills/update-patterns/scripts/update_patterns.py apply --payload-file /tmp/update-patterns.json --output-dir ../Obsidian/My Outputs/Patterns
Validate a pattern directory:
uv run python /Users/rami/Documents/life-os/ai-agents-config/skills/update-patterns/scripts/update_patterns.py validate --output-dir ../Obsidian/My Outputs/Patterns
Inspect the schema:
uv run python /Users/rami/Documents/life-os/ai-agents-config/skills/update-patterns/scripts/update_patterns.py schema
Use this JSON shape:
{
"updates": [
{
"field": "communication_flaws",
"title": "getting too far ahead in your head",
"status": "active",
"source_notes": [
"[[Crush on Lebanese Girl and Unhealthy Expectations]]"
],
"evidence": [
"[[Crush on Lebanese Girl and Unhealthy Expectations]]: Rami turns uncertainty into fantasy before enough real-world evidence exists."
],
"summary": "Rami can mentally sprint ahead of reality and start reacting to imagined futures instead of present facts.",
"why_it_matters": "This burns attention, creates emotional volatility, and makes communication less grounded.",
"action": "When you notice yourself building a future in your head, write the facts you actually know before deciding what the situation means.",
"related_patterns": [
"[[Recurring Fears#fear of missing the one]]"
]
}
]
}
field should match a key in pattern_schema.json. You can also pass pattern_file directly, but field is preferred because it keeps the schema as the source of truth.
Use direct language.
Good:
approval seeking when the stakes feel socialturning uncertainty into fantasyfear that a rare opportunity will disappearbuilding products around emotional resonanceBad:
approval_seekingturning_uncertainty_into_fantasyrelationship stuffinteresting patternIf the wording would look stupid as an Obsidian heading, rewrite it.
Use wiki-links that make the source note easy to recognize later. Prefer the note title without the .md extension:
[[Crush on Lebanese Girl and Unhealthy Expectations]][[Sense of control determines communication performance]]If a metadata value already contains a useful wiki-link, preserve it. If a concept clearly deserves a note but does not exist yet, it is acceptable to create the wiki-link anyway.
tools
Pre-task clarity ritual for Rami. Surfaces real intention, maps work to his pillars, and produces a Session Brief. Use when Rami is about to start a task or plan a work session.
testing
Find and retrieve notes from Rami's Obsidian vault by topic or theme using semantic search against Smart Connections embeddings. Use when asked to find notes about a specific subject, retrieve relevant vault content, or surface what Rami has written about a topic.
testing
Generate evidence-backed personal principles from markdown notes, reflections, and transcripts. Use when extracting life principles, decision rules, or lessons from journal entries and reflections.
testing
Generate and validate frontmatter metadata for markdown transcriptions and voice notes. Use when processing raw transcriptions, enriching Letterly notes, or preparing notes before moving them to final outputs.