ar9av/obsidian-layout-adjustment
> Workflow for working with Dan on changing how Obsidian looks using CSS snippets. Use this whenever Dan asks to restyle Obsidian, tune a vault's visual layout, adjust tabs, sidebars, note surfaces, properties, backlinks, graph panes, file explorer rows, icons, links, shadows, active states, or CSS snippets. Also use it when Dan says a visual CSS change did nothing, still looks wrapped, is not lifted, is unreadable, or needs to be refactored without changing the current appearance.
npx skills add https://github.com/Ar9av/obsidian-wiki --skill obsidian-layout-adjustment
This skill is for changing how Obsidian looks with CSS files while working with Dan's visual language.
Obsidian is always the same kind of environment: app frame, tab headers, side docks, view headers, pane shells, note surface, properties, file explorer, backlinks, graph, rendered markdown, and status bar. The vault, theme, snippets, plugins, and desired taste direction change, but the canvas stays Obsidian.
The core behavior is translation:
> Dan names a visible Obsidian object. Translate that phrase into the stable Obsidian layer/backend object, edit the active snippets safely, screenshot the result, and keep iterating without losing good states.
This is not a general CSS workflow and not a fixed-theme generator.
This skill should make live styling work faster, not turn every small request into a report.
In normal use:
Good normal update:
> "I’m treating 'tabs above the note' as workspace tab headers, not the arrows/book/dots view header. I’ll checkpoint active snippets, patch that selector family only, and screenshot the tab strip."
Do not write a long workflow report unless:
The value is in preventing bad CSS loops while still moving quickly.
Read references/workflow-reference.md when:
The reference is Obsidian-specific. Use it before treating the UI as an unknown web page.
<vault>/.obsidian/appearance.json.enabledCssSnippets as the active styling source of truth..obsidian/snippet-archive/, never into .obsidian/snippets, so the snippet picker stays clean.10. Reload/focus Obsidian and screenshot the exact affected area.
11. Use the screenshot and Dan's correction as evidence.
12. If it fails, inspect ownership or restore; do not keep piling CSS onto the same wrong target.
13. Refactor only after Dan accepts the visual state.
Dan will usually name what he sees, not the selector:
Before editing, map the phrase:
Dan phrase -> visible object -> Obsidian layer -> likely selector/settings surface -> change type -> owning layer
Say the mapping back when it could be ambiguous:
> "When you say the tabs above the note, I am treating that as the workspace tab headers, not the arrows/book/dots row inside the note pane."
This is the main mistake-prevention step. Most frustrating failures came from changing a plausible element that was not the object Dan meant, or changing a child when the wrapper/header/stage owned the visible shape.
Use this compact map first, then verify exact selectors in the live vault:
| Dan points at | Usually means |
| --- | --- |
| top-left white/native area | titlebar/native chrome or adjacent app header |
| tabs above note | workspace tab headers |
| plus next to tab | new tab control |
| green/top bar | app frame or tab header container |
| far-left icons | ribbon / side dock |
| selected side icon | active side-dock tab header plus icon state |
| buttons above file list | file explorer nav controls |
| left note/folder buttons | file explorer tree rows |
| vault name/footer | side dock profile/footer |
| arrows/book/dots above note | markdown view header |
| note/page/paper | markdown leaf, editor, or readable surface |
| note shadow/lift/edge | stage, shell, gutter, overflow, or pseudo-element relationship |
| properties | metadata container or Properties View workflow |
| links | internal link spans in reading/editing modes |
| right sidebar | right workspace split and utility leaves |
| linked mentions/backlinks | backlinks plugin result groups |
| graph | graph plugin leaf/canvas |
| bottom stats | status bar |
The visible object and backend layer should be treated as stable across Obsidian work. Exact class names can vary by theme/plugin/app version, so verify in the live vault before patching.
The same object needs different work depending on the request:
box-shadow.If a target needs two change types, do two passes. For example, make side-dock icons readable first, then tune the selected-state color.
Start with:
appearance.jsonAvoid changing first:
Ask for explicit confirmation before:
.obsidian/snippets or Obsidian settingsCSS validity is not visual success. The screenshot is product truth.
For every meaningful visual pass:
If another window covers Obsidian, retake the screenshot. Verify the verifier: confirm Obsidian is actually frontmost before trusting a capture (AppleScript can check the frontmost process). If the issue is tiny, capture just that region — screencapture -R<x,y,w,h> out.png — around the edge, icon, tab, row, or pane.
If the screenshot disproves the fix, keep working, restore, or say it failed. Do not close as if formatting proved success.
Dan's corrections are selector evidence:
If a direction fails twice, restore the last good checkpoint and change the ownership model.
Do not refactor during taste exploration.
When Dan likes the look:
.obsidian/snippets.CSS size is usually less dangerous than cascade confusion and a messy active snippet picker.
When done, keep the closeout short. Report:
Avoid explaining the whole workflow after every small pass. The workflow should be visible in the actions: checkpoint, scoped edit, screenshot, and evidence-based next step.
Take ar9av/obsidian-layout-adjustment from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.