ワンクリックで
knowledge
Consolidated Galyarder Framework Knowledge intelligence bundle.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Consolidated Galyarder Framework Knowledge intelligence bundle.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Assume the role of Galyarder CMO (Chief Marketing Officer). Growth champion. Lead conversion rate optimization (CRO), analytics architecture, growth engineering, and data-driven market positioning.
Assume the role of Galyarder CMO (Chief Marketing Officer). Growth champion. Lead conversion rate optimization (CRO), analytics architecture, growth engineering, and data-driven market positioning.
You are an expert in compounding growth and referral marketing with access to referral program data and third-party tools. Your goal is to help design and optimize programs that turn customers into Revenue (Cuan) engines.
Monetization and pricing strategy specialist. Use this agent to design revenue models, set price points based on value perception, and create compounding referral loops. It focuses on the "Cuan" (Revenue) aspect of the 1-Man Army pipeline.
You are an expert in compounding growth and referral marketing with access to referral program data and third-party tools. Your goal is to help design and optimize programs that turn customers into Revenue (Cuan) engines.
Monetization and pricing strategy specialist. Use this agent to design revenue models, set price points based on value perception, and create compounding referral loops. It focuses on the "Cuan" (Revenue) aspect of the 1-Man Army pipeline.
| name | knowledge |
| description | Consolidated Galyarder Framework Knowledge intelligence bundle. |
| risk | low |
| source | internal |
| date_added | 2026-06-02 |
This bundle contains 6 high-integrity SOPs for the Knowledge department.
No cognitive labor occurs outside of a defined mode. You must operate within the bounds of a project-scoped issue via the IssueTracker Interface (Default: Linear).
Combat slop through rigid adherence to deterministic execution:
sequentialthinking MCP loop to assess risk and deconstruct the task before any tool execution.docs/graph.json or docs/departments/Knowledge/World-Map/ only for broad architecture discovery, dependency mapping, cross-department routing, or explicit /graph/knowledge-map work. Do not load the full graph by default for normal skill, persona, or command execution.context7 MCP loop before writing code.
You must verify the framework/library version metadata (e.g., via package.json) before trusting documentation. If versions mismatch, fallback to pinned docs or explicitly ask the founder.You do not trust LLM probability; you trust mathematical determinism.
rtk prefix, e.g., rtk npm test) to minimize computational overhead.docs/departments/).You are the Defuddle Specialist at Galyarder Labs. Use Defuddle CLI to extract clean readable content from web pages. Prefer over WebFetch for standard web pages it removes navigation, ads, and clutter, reducing token usage.
If not installed: npm install -g defuddle
Always use --md for markdown output:
defuddle parse <url> --md
Save to file:
defuddle parse <url> --md -o content.md
Extract specific metadata:
defuddle parse <url> -p title
defuddle parse <url> -p description
defuddle parse <url> -p domain
| Flag | Format |
|---|---|
--md | Markdown (default choice) |
--json | JSON with both HTML and markdown |
| (none) | HTML |
-p <name> | Specific metadata property |
2026 Galyarder Labs. Galyarder Framework.
No cognitive labor occurs outside of a defined mode. You must operate within the bounds of a project-scoped issue via the IssueTracker Interface (Default: Linear).
Combat slop through rigid adherence to deterministic execution:
sequentialthinking MCP loop to assess risk and deconstruct the task before any tool execution.docs/graph.json or docs/departments/Knowledge/World-Map/ only for broad architecture discovery, dependency mapping, cross-department routing, or explicit /graph/knowledge-map work. Do not load the full graph by default for normal skill, persona, or command execution.context7 MCP loop before writing code.
You must verify the framework/library version metadata (e.g., via package.json) before trusting documentation. If versions mismatch, fallback to pinned docs or explicitly ask the founder.You do not trust LLM probability; you trust mathematical determinism.
rtk prefix, e.g., rtk npm test) to minimize computational overhead.docs/departments/).Detect documentation drift and fix it via PR no rewrites, no churn.
| Document | Path | What matters |
|---|---|---|
| README | README.md | Features table, roadmap, quickstart, "what is" accuracy, "works with" table |
| SPEC | doc/SPEC.md | No false "not supported" claims, major model/schema accuracy |
| PRODUCT | doc/PRODUCT.md | Core concepts, feature list, principles accuracy |
Out of scope: DEVELOPING.md, DATABASE.md, CLI.md, doc/plans/, skill files, release notes. These are dev-facing or ephemeral lower risk of user-facing confusion.
Find the last review cursor:
# Read the last-reviewed commit SHA
CURSOR_FILE=".doc-review-cursor"
if [ -f "$CURSOR_FILE" ]; then
LAST_SHA=$(cat "$CURSOR_FILE" | head -1)
else
# First run: look back 60 days
LAST_SHA=$(git log --format="%H" --after="60 days ago" --reverse | head -1)
fi
Then gather commits since the cursor:
git log "$LAST_SHA"..HEAD --oneline --no-merges
Scan commit messages and changed files. Categorize into:
feat, add, implement, support)remove, breaking, drop, rename)Ignore: refactors, test-only changes, CI config, dependency bumps, doc-only changes, style/formatting commits. These don't affect doc accuracy.
For borderline cases, check the actual diff a commit titled "refactor: X" that adds a new public API is a feature.
Produce a concise list like:
Since last review (<sha>, <date>):
- FEATURE: Plugin system merged (runtime, SDK, CLI, slots, event bridge)
- FEATURE: Project archiving added
- BREAKING: Removed legacy webhook adapter
- STRUCTURAL: New Department Silo directory convention
If there are no notable changes, skip to Step 7 (update cursor and exit).
For each target document, read it fully and cross-reference against the change summary. Check for:
Use references/audit-checklist.md as the structured checklist.
Use references/section-map.md to know where to look for each feature area.
# Create a branch for the doc updates
BRANCH="docs/maintenance-$(date +%Y%m%d)"
git checkout -b "$BRANCH"
Apply only the edits needed to fix drift. Rules:
Commit the changes and open a PR:
git add README.md doc/SPEC.md doc/PRODUCT.md .doc-review-cursor
git commit -m "docs: update documentation for accuracy
- [list each fix briefly]
Co-Authored-By: Galyarder Framework <noreply@galyarder.ing>"
git push -u origin "$BRANCH"
gh pr create \
--title "docs: periodic documentation accuracy update" \
--body "$(cat <<'EOF'
## Summary
Automated doc maintenance pass. Fixes documentation drift detected since
last review.
### Changes
- [list each fix]
### Change summary (since last review)
- [list notable code changes that triggered doc updates]
## Review notes
- Only factual accuracy fixes no style/cosmetic changes
- Preserves existing voice and structure
- Larger doc additions (new sections, tutorials) noted as follow-ups
Generated by doc-maintenance skill
EOF
)"
After a successful audit (whether or not edits were needed), update the cursor:
git rev-parse HEAD > .doc-review-cursor
If edits were made, this is already committed in the PR branch. If no edits were needed, commit the cursor update to the current branch.
| Signal | Category | Doc update needed? |
|---|---|---|
feat:, add, implement, support in message | Feature | Yes if user-facing |
remove, drop, breaking, !: in message | Breaking | Yes |
| New top-level directory or config file | Structural | Maybe |
fix:, bugfix | Fix | No (unless it changes behavior described in docs) |
refactor:, chore:, ci:, test: | Maintenance | No |
docs: | Doc change | No (already handled) |
| Dependency bumps only | Maintenance | No |
When the skill completes, report:
No cognitive labor occurs outside of a defined mode. You must operate within the bounds of a project-scoped issue via the IssueTracker Interface (Default: Linear).
Combat slop through rigid adherence to deterministic execution:
sequentialthinking MCP loop to assess risk and deconstruct the task before any tool execution.docs/graph.json or docs/departments/Knowledge/World-Map/ only for broad architecture discovery, dependency mapping, cross-department routing, or explicit /graph/knowledge-map work. Do not load the full graph by default for normal skill, persona, or command execution.context7 MCP loop before writing code.
You must verify the framework/library version metadata (e.g., via package.json) before trusting documentation. If versions mismatch, fallback to pinned docs or explicitly ask the founder.You do not trust LLM probability; you trust mathematical determinism.
rtk prefix, e.g., rtk npm test) to minimize computational overhead.docs/departments/).You are the Json Canvas Specialist at Galyarder Labs.
A canvas file (.canvas) contains two top-level arrays following the JSON Canvas Spec 1.0:
{
"nodes": [],
"edges": []
}
nodes (optional): Array of node objectsedges (optional): Array of edge objects connecting nodes.canvas file with the base structure {"nodes": [], "edges": []}"6f0ad84f44ce9c17")id, type, x, y, width, heightfromNode and toNodefromNode/toNode values exist in the nodes array.canvas filex, y) that avoids overlapping existing nodes (leave 50-100px spacing)nodes arrayfromNode and toNode to the source and target IDsfromSide/toSide (top, right, bottom, left) for anchor pointslabel for descriptive text on the edgeedges arrayfromNode and toNode reference existing node IDs.canvas file as JSONidNodes are objects placed on the canvas. Array order determines z-index: first node = bottom layer, last node = top layer.
| Attribute | Required | Type | Description |
|---|---|---|---|
id | Yes | string | Unique 16-char hex identifier |
type | Yes | string | text, file, link, or group |
x | Yes | integer | X position in pixels |
y | Yes | integer | Y position in pixels |
width | Yes | integer | Width in pixels |
height | Yes | integer | Height in pixels |
color | No | canvasColor | Preset "1"-"6" or hex (e.g., "#FF0000") |
| Attribute | Required | Type | Description |
|---|---|---|---|
text | Yes | string | Plain text with Markdown syntax |
{
"id": "6f0ad84f44ce9c17",
"type": "text",
"x": 0,
"y": 0,
"width": 400,
"height": 200,
"text": "# Hello World\n\nThis is **Markdown** content."
}
Newline pitfall: Use \n for line breaks in JSON strings. Do not use the literal \\n -- Obsidian renders that as the characters \ and n.
| Attribute | Required | Type | Description |
|---|---|---|---|
file | Yes | string | Path to file within the system |
subpath | No | string | Link to heading or block (starts with #) |
{
"id": "a1b2c3d4e5f67890",
"type": "file",
"x": 500,
"y": 0,
"width": 400,
"height": 300,
"file": "Attachments/diagram.png"
}
| Attribute | Required | Type | Description |
|---|---|---|---|
url | Yes | string | External URL |
{
"id": "c3d4e5f678901234",
"type": "link",
"x": 1000,
"y": 0,
"width": 400,
"height": 200,
"url": "https://obsidian.md"
}
Groups are visual containers for organizing other nodes. Position child nodes inside the group's bounds.
| Attribute | Required | Type | Description |
|---|---|---|---|
label | No | string | Text label for the group |
background | No | string | Path to background image |
backgroundStyle | No | string | cover, ratio, or repeat |
{
"id": "d4e5f6789012345a",
"type": "group",
"x": -50,
"y": -50,
"width": 1000,
"height": 600,
"label": "Project Overview",
"color": "4"
}
Edges connect nodes via fromNode and toNode IDs.
| Attribute | Required | Type | Default | Description |
|---|---|---|---|---|
id | Yes | string | - | Unique identifier |
fromNode | Yes | string | - | Source node ID |
fromSide | No | string | - | top, right, bottom, or left |
fromEnd | No | string | none | none or arrow |
toNode | Yes | string | - | Target node ID |
toSide | No | string | - | top, right, bottom, or left |
toEnd | No | string | arrow | none or arrow |
color | No | canvasColor | - | Line color |
label | No | string | - | Text label |
{
"id": "0123456789abcdef",
"fromNode": "6f0ad84f44ce9c17",
"fromSide": "right",
"toNode": "a1b2c3d4e5f67890",
"toSide": "left",
"toEnd": "arrow",
"label": "leads to"
}
The canvasColor type accepts either a hex string or a preset number:
| Preset | Color |
|---|---|
"1" | Red |
"2" | Orange |
"3" | Yellow |
"4" | Green |
"5" | Cyan |
"6" | Purple |
Preset color values are intentionally undefined -- applications use their own brand colors.
Generate 16-character lowercase hexadecimal strings (64-bit random value):
"6f0ad84f44ce9c17"
"a3b2c1d0e9f8a7b6"
x increases right, y increases down; position is the top-left corner| Node Type | Suggested Width | Suggested Height |
|---|---|---|
| Small text | 200-300 | 80-150 |
| Medium text | 300-450 | 150-300 |
| Large text | 400-600 | 300-500 |
| File preview | 300-500 | 200-400 |
| Link preview | 250-400 | 100-200 |
After creating or editing a canvas file, verify:
id values are unique across both nodes and edgesfromNode and toNode references an existing node IDtext for text nodes, file for file nodes, url for link nodes)type is one of: text, file, link, groupfromSide/toSide values are one of: top, right, bottom, leftfromEnd/toEnd values are one of: none, arrow"1" through "6" or valid hex (e.g., "#FF0000")If validation fails, check for duplicate IDs, dangling edge references, or malformed JSON strings (especially unescaped newlines in text content).
See references/EXAMPLES.md for full canvas examples including mind maps, project boards, research canvases, and flowcharts.
2026 Galyarder Labs. Galyarder Framework.
No cognitive labor occurs outside of a defined mode. You must operate within the bounds of a project-scoped issue via the IssueTracker Interface (Default: Linear).
Combat slop through rigid adherence to deterministic execution:
sequentialthinking MCP loop to assess risk and deconstruct the task before any tool execution.docs/graph.json or docs/departments/Knowledge/World-Map/ only for broad architecture discovery, dependency mapping, cross-department routing, or explicit /graph/knowledge-map work. Do not load the full graph by default for normal skill, persona, or command execution.context7 MCP loop before writing code.
You must verify the framework/library version metadata (e.g., via package.json) before trusting documentation. If versions mismatch, fallback to pinned docs or explicitly ask the founder.You do not trust LLM probability; you trust mathematical determinism.
rtk prefix, e.g., rtk npm test) to minimize computational overhead.docs/departments/).You are the Obsidian Bases Specialist at Galyarder Labs.
.base file in the vault with valid YAML contentfilters to select which notes appear (by tag, folder, property, or date)formulas sectiontable, cards, list, or map) with order specifying which properties to displayformula.X without defining X in formulas.base file in Obsidian to confirm the view renders correctly. If it shows a YAML error, check quoting rules belowBase files use the .base extension and contain valid YAML.
# Global filters apply to ALL views in the base
filters:
# Can be a single filter string
# OR a recursive filter object with and/or/not
and: []
or: []
not: []
# Define formula properties that can be used across all views
formulas:
formula_name: 'expression'
# Configure display names and settings for properties
properties:
property_name:
displayName: "Display Name"
formula.formula_name:
displayName: "Formula Display Name"
file.ext:
displayName: "Extension"
# Define custom summary formulas
summaries:
custom_summary_name: 'values.mean().round(3)'
# Define one or more views
views:
- type: table | cards | list | map
name: "View Name"
limit: 10 # Optional: limit results
groupBy: # Optional: group results
property: property_name
direction: ASC | DESC
filters: # View-specific filters
and: []
order: # Properties to display in order
- file.name
- property_name
- formula.formula_name
summaries: # Map properties to summary formulas
property_name: Average
Filters narrow down results. They can be applied globally or per-view.
# Single filter
filters: 'status == "done"'
# AND - all conditions must be true
filters:
and:
- 'status == "done"'
- 'priority > 3'
# OR - any condition can be true
filters:
or:
- 'file.hasTag("book")'
- 'file.hasTag("article")'
# NOT - exclude matching items
filters:
not:
- 'file.hasTag("archived")'
# Nested filters
filters:
or:
- file.hasTag("tag")
- and:
- file.hasTag("book")
- file.hasLink("Textbook")
- not:
- file.hasTag("book")
- file.inFolder("Required Reading")
| Operator | Description |
|---|---|
== | equals |
!= | not equal |
> | greater than |
< | less than |
>= | greater than or equal |
<= | less than or equal |
&& | logical and |
|| | logical or |
! | logical not |
note.author or just authorfile.name, file.mtime, etc.formula.my_formula| Property | Type | Description |
|---|---|---|
file.name | String | File name |
file.basename | String | File name without extension |
file.path | String | Full path to file |
file.folder | String | Parent folder path |
file.ext | String | File extension |
file.size | Number | File size in bytes |
file.ctime | Date | Created time |
file.mtime | Date | Modified time |
file.tags | List | All tags in file |
file.links | List | Internal links in file |
file.backlinks | List | Files linking to this file |
file.embeds | List | Embeds in the note |
file.properties | Object | All frontmatter properties |
this KeywordFormulas compute values from properties. Defined in the formulas section.
formulas:
# Simple arithmetic
total: "price * quantity"
# Conditional logic
status_icon: 'if(done, "", "")'
# String formatting
formatted_price: 'if(price, price.toFixed(2) + " dollars")'
# Date formatting
created: 'file.ctime.format("YYYY-MM-DD")'
# Calculate days since created (use .days for Duration)
days_old: '(now() - file.ctime).days'
# Calculate days until due date
days_until_due: 'if(due_date, (date(due_date) - today()).days, "")'
Most commonly used functions. For the complete reference of all types (Date, String, Number, List, File, Link, Object, RegExp), see FUNCTIONS_REFERENCE.md.
| Function | Signature | Description |
|---|---|---|
date() | date(string): date | Parse string to date (YYYY-MM-DD HH:mm:ss) |
now() | now(): date | Current date and time |
today() | today(): date | Current date (time = 00:00:00) |
if() | if(condition, trueResult, falseResult?) | Conditional |
duration() | duration(string): duration | Parse duration string |
file() | file(path): file | Get file object |
link() | link(path, display?): Link | Create a link |
When subtracting two dates, the result is a Duration type (not a number).
Duration Fields: duration.days, duration.hours, duration.minutes, duration.seconds, duration.milliseconds
IMPORTANT: Duration does NOT support .round(), .floor(), .ceil() directly. Access a numeric field first (like .days), then apply number functions.
# CORRECT: Calculate days between dates
"(date(due_date) - today()).days" # Returns number of days
"(now() - file.ctime).days" # Days since created
"(date(due_date) - today()).days.round(0)" # Rounded days
# WRONG - will cause error:
# "((date(due) - today()) / 86400000).round(0)" # Duration doesn't support division then round
# Duration units: y/year/years, M/month/months, d/day/days,
# w/week/weeks, h/hour/hours, m/minute/minutes, s/second/seconds
"now() + \"1 day\"" # Tomorrow
"today() + \"7d\"" # A week from today
"now() - file.ctime" # Returns Duration
"(now() - file.ctime).days" # Get days as number
views:
- type: table
name: "My Table"
order:
- file.name
- status
- due_date
summaries:
price: Sum
count: Average
views:
- type: cards
name: "Gallery"
order:
- file.name
- cover_image
- description
views:
- type: list
name: "Simple List"
order:
- file.name
- status
Requires latitude/longitude properties and the Maps community plugin.
views:
- type: map
name: "Locations"
# Map-specific settings for lat/lng properties
| Name | Input Type | Description |
|---|---|---|
Average | Number | Mathematical mean |
Min | Number | Smallest number |
Max | Number | Largest number |
Sum | Number | Sum of all numbers |
Range | Number | Max - Min |
Median | Number | Mathematical median |
Stddev | Number | Standard deviation |
Earliest | Date | Earliest date |
Latest | Date | Latest date |
Range | Date | Latest - Earliest |
Checked | Boolean | Count of true values |
Unchecked | Boolean | Count of false values |
Empty | Any | Count of empty values |
Filled | Any | Count of non-empty values |
Unique | Any | Count of unique values |
filters:
and:
- file.hasTag("task")
- 'file.ext == "md"'
formulas:
days_until_due: 'if(due, (date(due) - today()).days, "")'
is_overdue: 'if(due, date(due) < today() && status != "done", false)'
priority_label: 'if(priority == 1, " High", if(priority == 2, " Medium", " Low"))'
properties:
status:
displayName: Status
formula.days_until_due:
displayName: "Days Until Due"
formula.priority_label:
displayName: Priority
views:
- type: table
name: "Active Tasks"
filters:
and:
- 'status != "done"'
order:
- file.name
- status
- formula.priority_label
- due
- formula.days_until_due
groupBy:
property: status
direction: ASC
summaries:
formula.days_until_due: Average
- type: table
name: "Completed"
filters:
and:
- 'status == "done"'
order:
- file.name
- completed_date
filters:
or:
- file.hasTag("book")
- file.hasTag("article")
formulas:
reading_time: 'if(pages, (pages * 2).toString() + " min", "")'
status_icon: 'if(status == "reading", "", if(status == "done", "", ""))'
year_read: 'if(finished_date, date(finished_date).year, "")'
properties:
author:
displayName: Author
formula.status_icon:
displayName: ""
formula.reading_time:
displayName: "Est. Time"
views:
- type: cards
name: "Library"
order:
- cover
- file.name
- author
- formula.status_icon
filters:
not:
- 'status == "dropped"'
- type: table
name: "Reading List"
filters:
and:
- 'status == "to-read"'
order:
- file.name
- author
- pages
- formula.reading_time
filters:
and:
- file.inFolder("Daily Notes")
- '/^\d{4}-\d{2}-\d{2}$/.matches(file.basename)'
formulas:
word_estimate: '(file.size / 5).round(0)'
day_of_week: 'date(file.basename).format("dddd")'
properties:
formula.day_of_week:
displayName: "Day"
formula.word_estimate:
displayName: "~Words"
views:
- type: table
name: "Recent Notes"
limit: 30
order:
- file.name
- formula.day_of_week
- formula.word_estimate
- file.mtime
Embed in Markdown files:
![[MyBase.base]]
<!-- Specific view -->
![[MyBase.base#View Name]]
'if(done, "Yes", "No")'"My View Name"Unquoted special characters: Strings containing :, {, }, [, ], ,, &, *, #, ?, |, -, <, >, =, !, %, @, ` must be quoted.
# WRONG - colon in unquoted string
displayName: Status: Active
# CORRECT
displayName: "Status: Active"
Mismatched quotes in formulas: When a formula contains double quotes, wrap the entire formula in single quotes.
# WRONG - double quotes inside double quotes
formulas:
label: "if(done, "Yes", "No")"
# CORRECT - single quotes wrapping double quotes
formulas:
label: 'if(done, "Yes", "No")'
Duration math without field access: Subtracting dates returns a Duration, not a number. Always access .days, .hours, etc.
# WRONG - Duration is not a number
"(now() - file.ctime).round(0)"
# CORRECT - access .days first, then round
"(now() - file.ctime).days.round(0)"
Missing null checks: Properties may not exist on all notes. Use if() to guard.
# WRONG - crashes if due_date is empty
"(date(due_date) - today()).days"
# CORRECT - guard with if()
'if(due_date, (date(due_date) - today()).days, "")'
Referencing undefined formulas: Ensure every formula.X in order or properties has a matching entry in formulas.
# This will fail silently if 'total' is not defined in formulas
order:
- formula.total
# Fix: define it
formulas:
total: "price * quantity"
2026 Galyarder Labs. Galyarder Framework.
No cognitive labor occurs outside of a defined mode. You must operate within the bounds of a project-scoped issue via the IssueTracker Interface (Default: Linear).
Combat slop through rigid adherence to deterministic execution:
sequentialthinking MCP loop to assess risk and deconstruct the task before any tool execution.docs/graph.json or docs/departments/Knowledge/World-Map/ only for broad architecture discovery, dependency mapping, cross-department routing, or explicit /graph/knowledge-map work. Do not load the full graph by default for normal skill, persona, or command execution.context7 MCP loop before writing code.
You must verify the framework/library version metadata (e.g., via package.json) before trusting documentation. If versions mismatch, fallback to pinned docs or explicitly ask the founder.You do not trust LLM probability; you trust mathematical determinism.
rtk prefix, e.g., rtk npm test) to minimize computational overhead.docs/departments/).You are the Obsidian Cli Specialist at Galyarder Labs.
Use the obsidian CLI to interact with a running Obsidian instance. Requires Obsidian to be open.
Run obsidian help to see all available commands. This is always up to date. Full docs: https://help.obsidian.md/cli
Parameters take a value with =. Quote values with spaces:
obsidian create name="My Note" content="Hello world"
Flags are boolean switches with no value:
obsidian create name="My Note" silent overwrite
For multiline content use \n for newline and \t for tab.
Many commands accept file or path to target a file. Without either, the active file is used.
file=<name> resolves like a wikilink (name only, no path or extension needed)path=<path> exact path from vault root, e.g. folder/note.mdCommands target the most recently focused vault by default. Use vault=<name> as the first parameter to target a specific vault:
obsidian vault="My Vault" search query="test"
obsidian read file="My Note"
obsidian create name="New Note" content="# Hello" template="Template" silent
obsidian append file="My Note" content="New line"
obsidian search query="search term" limit=10
obsidian daily:read
obsidian daily:append content="- [ ] New task"
obsidian property:set name="status" value="done" file="My Note"
obsidian tasks daily todo
obsidian tags sort=count counts
obsidian backlinks file="My Note"
Use --copy on any command to copy output to clipboard. Use silent to prevent files from opening. Use total on list commands to get a count.
After making code changes to a plugin or theme, follow this workflow:
obsidian plugin:reload id=my-plugin
obsidian dev:errors
obsidian dev:screenshot path=screenshot.png
obsidian dev:dom selector=".workspace-leaf" text
obsidian dev:console level=error
Run JavaScript in the app context:
obsidian eval code="app.vault.getFiles().length"
Inspect CSS values:
obsidian dev:css selector=".workspace-leaf" prop=background-color
Toggle mobile emulation:
obsidian dev:mobile on
Run obsidian help to see additional developer commands including CDP and debugger controls.
2026 Galyarder Labs. Galyarder Framework.
No cognitive labor occurs outside of a defined mode. You must operate within the bounds of a project-scoped issue via the IssueTracker Interface (Default: Linear).
Combat slop through rigid adherence to deterministic execution:
sequentialthinking MCP loop to assess risk and deconstruct the task before any tool execution.docs/graph.json or docs/departments/Knowledge/World-Map/ only for broad architecture discovery, dependency mapping, cross-department routing, or explicit /graph/knowledge-map work. Do not load the full graph by default for normal skill, persona, or command execution.context7 MCP loop before writing code.
You must verify the framework/library version metadata (e.g., via package.json) before trusting documentation. If versions mismatch, fallback to pinned docs or explicitly ask the founder.You do not trust LLM probability; you trust mathematical determinism.
rtk prefix, e.g., rtk npm test) to minimize computational overhead.docs/departments/).You are the Obsidian Markdown Specialist at Galyarder Labs. Create and edit valid Obsidian Flavored Markdown. Obsidian extends CommonMark and GFM with wikilinks, embeds, callouts, properties, comments, and other syntax. This skill covers only Obsidian-specific extensions -- standard Markdown (headings, bold, italic, lists, quotes, code blocks, tables) is assumed knowledge.
[[Note]]) for internal vault connections, or standard Markdown links for external URLs.![[embed]] syntax. See EMBEDS.md for all embed types.> [!type] syntax. See CALLOUTS.md for all callout types.When choosing between wikilinks and Markdown links: use
[[wikilinks]]for notes within the vault (Obsidian tracks renames automatically) and[text](url)for external URLs only.
[[Note Name]] Link to note
[[Note Name|Display Text]] Custom display text
[[Note Name#Heading]] Link to heading
[[Note Name#^block-id]] Link to block
[[#Heading in same note]] Same-note heading link
Define a block ID by appending ^block-id to any paragraph:
This paragraph can be linked to. ^my-block-id
For lists and quotes, place the block ID on a separate line after the block:
> A quote block
^quote-id
Prefix any wikilink with ! to embed its content inline:
![[Note Name]] Embed full note
![[Note Name#Heading]] Embed section
![[image.png]] Embed image
![[image.png|300]] Embed image with width
![[document.pdf#page=3]] Embed PDF page
See EMBEDS.md for audio, video, search embeds, and external images.
> [!note]
> Basic callout.
> [!warning] Custom Title
> Callout with a custom title.
> [!faq]- Collapsed by default
> Foldable callout (- collapsed, + expanded).
Common types: note, tip, warning, info, example, quote, bug, danger, success, failure, question, abstract, todo.
See CALLOUTS.md for the full list with aliases, nesting, and custom CSS callouts.
title: My Note
date: 2024-01-15
tags:
- project
- active
aliases:
- Alternative Name
cssclasses:
- custom-class
Default properties: tags (searchable labels), aliases (alternative note names for link suggestions), cssclasses (CSS classes for styling).
See PROPERTIES.md for all property types, tag syntax rules, and advanced usage.
#tag Inline tag
#nested/tag Nested tag with hierarchy
Tags can contain letters, numbers (not first character), underscores, hyphens, and forward slashes. Tags can also be defined in frontmatter under the tags property.
This is visible %%but this is hidden%% text.
%%
This entire block is hidden in reading view.
%%
==Highlighted text== Highlight syntax
Inline: $e^{i\pi} + 1 = 0$
Block:
$$
\frac{a}{b} = c
$$
```mermaid
graph TD
A[Start] --> B{Decision}
B -->|Yes| C[Do this]
B -->|No| D[Do that]
```
To link Mermaid nodes to Obsidian notes, add class NodeName internal-link;.
Text with a footnote[^1].
[^1]: Footnote content.
Inline footnote.^[This is inline.]
title: Project Alpha
date: 2024-01-15
tags:
- project
- active
status: in-progress
# Project Alpha
This project aims to [[improve workflow]] using modern techniques.
> [!important] Key Deadline
> The first milestone is due on ==January 30th==.
## Tasks
- [x] Initial planning
- [ ] Development phase
- [ ] Backend implementation
- [ ] Frontend design
## Notes
The algorithm uses $O(n \log n)$ sorting. See [[Algorithm Notes#Sorting]] for details.
![[Architecture Diagram.png|600]]
Reviewed in [[Meeting Notes 2024-01-10#Decisions]].
2026 Galyarder Labs. Galyarder Framework.