Agent skill

Obsidian Writer

by Atmosphere in Atmosphere/atmosphere

Write well-formatted notes to the atmosphere-vault Obsidian knowledge base.

Apache-2.0Auto-check passedDevOps & Cloud

Install Obsidian Writer

skills CLI
$ npx skills add Atmosphere/atmosphere --skill obsidian-writer -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install Atmosphere/atmosphere obsidian-writer --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/Atmosphere/atmosphere.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/obsidian-writer .claude/skills/obsidian-writer && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
obsidian-writer
GitHub stars
3.8k
Token cost
~2.6k tokens
SKILL.md length
1,177 words
Files
4 (incl. references)
Skills in repo
20
Repo updated
First seen
Licence
Apache-2.0

At a glance

Write well-formatted notes to the atmosphere-vault Obsidian knowledge base.

  • Works in 6 steps: Identify doc type and target directory → Sync, then search for existing notes → Compose content → …
  • Updating an ADR
  • SKILL.md covers Role, When to Use, Workflow and Quick Reference, plus 3 more sections
  • Runs Shell scripts from its folder; calls claude, git and npm; needs OBSIDIAN_API_KEY

What it does

Obsidian Writer is an agent skill from Atmosphere/atmosphere. Write well-formatted notes to the atmosphere-vault Obsidian knowledge base. Use this skill whenever creating or updating an ADR, runbook, plan, API doc, guide, session output, or any structured document that should land in the vault — even when the user doesn't say "Obsidian" explicitly. Delegates to obsidian:obsidian-cli to write to the live vault and applies Atmosphere frontmatter and formatting standards.

Its SKILL.md is about 2.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files, including reference files (for example `references/vault-structure.md`, `test.sh` and `vault-sync.sh`).

It sits in DevOps & Cloud, covering Architecture decision records, Runbooks and postmortems and Technical documentation. It works with Obsidian. The repository describes itself as: Portable AI agent runtime for the JVM. One @Agent class runs on Spring AI, LangChain4j, Anthropic, or 9 more behind one SPI. Token streaming, tool calls, human approvals, and… The licence is Apache-2.0.

When your agent uses it

  • Updating an ADR
  • Any structured document that should land in the vault — even when the user doesnt say Obsidian explicitly

Example prompts

  • “t say”
  • “/obsidian-writer”

Requirements

  • A Bash shell
  • A credential in OBSIDIAN_API_KEY

Workflow steps

6 steps, taken from the step headings in SKILL.md.

  1. Identify doc type and target directory
  2. Sync, then search for existing notes
  3. Compose content
  4. Write to the live vault
  5. Verify and link
  6. Publish

What it can do on your machine

Read from SKILL.md and the folder at commit 13671cf. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships script files (Shell), which the agent can run.

    Shell commands in SKILL.md call:

    • claude
    • git
    • npm

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use git and npm, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • OBSIDIAN_API_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Obsidian Writer loads about 2.6k tokens when it runs, and up to ~3.7k if it reads all its reference files. Until then it costs about 107 tokens; SKILL.md has 1,177 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~107
When it runs · the whole SKILL.md, loaded when a task matches
~2.6k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~3.7k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from Atmosphere/atmosphere at commit 13671cf, republished under its Apache-2.0 licence (© Atmosphere). 1,177 words, ~2,630 tokens.

Download SKILL.mdSave it as .claude/skills/obsidian-writer/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.
name
obsidian-writer
description
Write well-formatted notes to the atmosphere-vault Obsidian knowledge base. Use this skill whenever creating or updating an ADR, runbook, plan, API doc, guide, session output, or any structured document that should land in the vault — even when the user doesn't say "Obsidian" explicitly. Delegates to obsidian:obsidian-cli to write to the live vault and applies Atmosphere frontmatter and formatting standards.
user-invocable
true
metadata.version
1.1.0
metadata.domain
documentation
metadata.triggers
obsidian, vault, note, document, adr, runbook, plan, api-doc, guide, knowledge-base, architecture decision, session output
metadata.role
specialist
metadata.scope
implementation
metadata.output-format
document
metadata.related-skills
obsidian-vault-setup

Obsidian Writer

Role

Knowledge-base writer for the shared atmosphere-vault Obsidian vault. Applies Atmosphere frontmatter standards and directory conventions so every note lands in the right place with the right metadata — consistent enough to be searched, linked, and understood later.

When to Use

Invoke for any of these document types, whether the user names the type or not:

  • ADR — Architecture Decision Record (Architecture/ADRs/)
  • Runbook — Operational procedure or on-call guide (Development/Runbooks/)
  • Plan — Feature or project planning document (Claude Plans/)
  • API doc — Endpoint reference, SDK documentation (APIs/)
  • Guide / how-to — Developer setup, walkthrough, tutorial (Development/)
  • Session output — Claude Code session artifact (Claude Outputs/)
  • Methodology — Process, workflow, team practice (Methodology/)

Workflow

Step 1 — Identify doc type and target directory

Use the quick-reference table below. When ambiguous, ask the user which type fits best.

Step 2 — Sync, then search for existing notes

Pull the remote first so the search sees every note that has already been pushed, then check whether a relevant note already exists to avoid duplicates:

.claude/skills/obsidian-writer/vault-sync.sh pull
obsidian search query="<keywords from the topic>" limit=5

If pull exits non-zero, stop and report what it printed instead of reading or writing the vault. Either a conflict it could not auto-resolve moved the unpushed local commits to a vault-sync/backup-<ts> branch (main now matches origin, so those notes stay missing until that branch is merged by hand), or the rebase did not run and nothing was changed (retry).

If a match is found, read it first (obsidian read file="<name>") and decide whether to update the existing note or create a new one.

Step 3 — Compose content

Read references/vault-structure.md for the complete frontmatter field table.

Start every note with YAML frontmatter, then a level-1 heading matching the filename:

markdown
---
date: YYYY-MM-DD
tags: [atmosphere, <type-tag>]
status: <value>        # only for ADR and Plan
service: <name>        # only for Runbook and API doc
severity: <P0–P3>      # only for Runbook
---

# Note Title

Use [[wikilinks]] to link related vault notes — never absolute file paths.

Step 4 — Write to the live vault

Obsidian must be running and the atmosphere-vault must be the focused vault.

# Create a new note
obsidian create name="<Note Title>" path="<Directory/Filename.md>"

# Append a section to an existing note
obsidian append file="<Note Title>" content="## New Section\n<content>"

After writing, read the note back to confirm content landed correctly:

obsidian read file="<Note Title>"

Then update any related notes with a [[wikilink]] to the new document.

Step 6 — Publish

Commit and push only the notes you wrote or edited, through the sync script (paths are relative to the vault — never the whole tree):

.claude/skills/obsidian-writer/vault-sync.sh push -m "docs(adr): <what>" \
  "Architecture/ADRs/ADR-0042 Adopt Virtual Threads.md"

Exit 0 means published: after the sync and push, origin/main holds each of your notes exactly as committed. Your notes are the files under the paths that the push's commit changed, and those the vault holds differently from the origin/main it forked from (an earlier unpushed commit, such as the timer's, changed them). Every other file under the paths (a directory's other notes, a note the timer already pushed) was already on origin/main as the vault holds it, and must still be there or have changed since only by edits made on top of that version. The output lists those under "already on origin/main … then changed there by later edits" without failing the push: someone edited or deleted the note after it was published, so re-read it before you report it. Any other exit means not published, and the output names each file origin/main does not hold as committed, and why. Most often someone edited the same note at the same time and the remote's side won or was merged in, whether over your push or over a timer push that got there first; the vault then holds origin's version, so re-read those notes and redo your change if it is gone. A backup branch, a rebase that did not run and a push still rejected are named as such. Never report a note as published on a non-zero exit.

The vault's history uses docs(adr), docs(plan) and docs(claude-output) prefixes for these commits; the timers' commits are vault: auto-save.

Quick Reference

Doc TypeTarget DirectoryTemplateRequired Tags
ADRArchitecture/ADRs/Templates/ADR.mdatmosphere, adr
RunbookDevelopment/Runbooks/Templates/Runbook.mdatmosphere, runbook, sre
PlanClaude Plans/Templates/Plan.mdatmosphere, plan
API docAPIs/—atmosphere, api
Session outputClaude Outputs/—atmosphere, claude-output
Guide / how-toDevelopment/—atmosphere, guide, <domain>
MethodologyMethodology/—atmosphere, methodology

Frontmatter Standards

ADR — required: date, status, tags: [atmosphere, adr]

  • Status values: proposed → accepted → deprecated / superseded
  • Filename convention: ADR-NNNN Short Title.md (zero-padded, four digits)

Runbook — required: date, severity, service, tags: [atmosphere, runbook, sre]

  • Severity values: P0 (critical), P1 (high), P2 (medium), P3 (low)

Plan — required: date, status, tags: [atmosphere, plan]

  • Status values: draft, active, completed

API doc — required: date, service, tags: [atmosphere, api]

Session output — required: date, tags: [atmosphere, claude-output]

Guide / how-to — required: date, tags: [atmosphere, guide, <domain>]

  • Replace <domain> with the relevant area (e.g., runtime, spring, quarkus)
Show full SKILL.md (439 more words)Show less

Key obsidian-cli Patterns

# Search before creating to avoid duplicates
obsidian search query="WebSocket backpressure" limit=5

# Read an existing note before editing
obsidian read file="ADR-0042 Adopt Virtual Threads"

# Create a new note (Obsidian must be open and vault focused)
obsidian create name="ADR-0042 Adopt Virtual Threads" \
  path="Architecture/ADRs/ADR-0042 Adopt Virtual Threads.md"

# Append a section to an existing note
obsidian append file="ADR-0042 Adopt Virtual Threads" \
  content="## Update 2026-03-14\nApproved in team review."

Constraints

  • Obsidian must be running and the atmosphere-vault must be the active vault before using obsidian create or obsidian append — the CLI communicates with the open app.
  • The obsidian command MUST be the first-party app CLI (/Applications/Obsidian.app/Contents/MacOS/obsidian). It needs no API key. If obsidian errors with "An API key must be provided via OBSIDIAN_API_KEY", a stray global npm package (obsidian-cli, the unrelated ObsidianQA tool) is shadowing it on PATH — fix with npm uninstall -g obsidian-cli, do NOT fall back to claude_docs/. Verify resolution with command -v obsidian.
  • Always search first to avoid duplicate notes on the same topic.
  • Always use [[wikilinks]] for internal vault references, not relative or absolute paths, and link by bare basename ([[ADR-0042 Adopt Virtual Threads]]): a basename link survives the note moving into a subfolder, a path link breaks on the first move.
  • Never put # in the filename of a note you intend to wikilink. Obsidian splits [[Note#Heading]] at the first #, so [[Risk #5 gate]] resolves to a note called "Risk".
  • Frontmatter date must be ISO 8601 format (YYYY-MM-DD).
  • ADR filenames carry a zero-padded four-digit number (ADR-0001, ADR-0002, …) so they sort chronologically. Check the highest existing number first (ls Architecture/ADRs/) and take the next one.
  • claude_docs/ is not a general-purpose route. It is a gitignored symlink to the vault's Claude Outputs/, so a note written through it always lands there, must carry its own frontmatter (date, tags: [atmosphere, claude-output]) — nothing downstream adds it — and is the wrong place for an ADR, runbook or plan. Create those with obsidian create into their own folder.
  • The vault's remote wins — sync through vault-sync.sh, never by hand. Run .claude/skills/obsidian-writer/vault-sync.sh pull before reading or writing the vault, and publish with vault-sync.sh push -m "docs(<kind>): <what>" <path>… (paths relative to the vault, never the whole tree). It refuses to touch a vault that is mid-merge, mid-rebase or off main; otherwise it fetches, stashes local uncommitted work, rebases onto origin/main with the remote side winning every conflicting hunk, re-applies the stash (a stash that does not re-apply stays in git stash list), and retries a rejected push against the new tip. A conflict the rebase cannot auto-resolve moves local main to a vault-sync/backup-<ts> branch and resets it to origin; a rebase that fails without a conflict changes nothing. Either way pull and push exit non-zero: stop and report. Never git merge origin into the vault or resolve a conflict in favour of local.
  • Commit explicitly after writing — vault-sync.sh push does it. obsidian-git auto-commits every 10 minutes under a generic vault: auto-save message; an explicit commit is attributable and revertible.
  • See references/vault-structure.md for the full directory map and field reference.

© Atmosphere, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 3 other files (references) in .claude/skills/obsidian-writer of Atmosphere/atmosphere.

  • SKILL.md
  • references/vault-structure.md
  • test.sh
  • vault-sync.sh

Open the folder on GitHubat commit 13671cf

Compare with similar skills

Obsidian Writer next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Obsidian Writer compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Obsidian Writer this skillAtmosphere/atmosphere3.8k—~2.6kAutomated safety check: PassApache-2.0
Create Docavibebuilder/claude-prime120—~812Automated safety check: PassMIT
Confluence Docsbybren-llc/safe-agentic-workflow423—~1.4kAutomated safety check: PassMIT
Review A Designinkeep/open-knowledge4.5k—~3.7kAutomated safety check: PassGPL-3.0
Documentation Strategyrampstackco/claude-skills945—~3.3kAutomated safety check: PassMIT
Capture Knowledgeadamayoung/TMDb178—~2.3kAutomated safety check: PassApache-2.0

Similar skills

  • Create Doc

    avibebuilder/claude-prime

    A skill your agent uses when the user wants to save knowledge as a file so others don't have to rediscover it — "turn this into a doc", "write this up", "document how X works", "we figured this out…

    120 GitHub stars~812 tokensUpdated 4 mo ago
    DevOps & CloudAuto-check passed
  • Confluence Docs

    bybren-llc/safe-agentic-workflow

    Documentation templates for ADRs, runbooks, and architecture docs.

    423 GitHub stars~1.4k tokensUpdated 2 mo ago
    DevOps & CloudAuto-check passed
  • Review A Design

    inkeep/open-knowledge

    Reviews whether a design is SOUND — solving the right problem, derived from its stated goals and constraints — and emits ranked, evidence-backed findings, not edits.

    4.5k GitHub stars~3.7k tokensUpdated today
    DevOps & CloudAuto-check passed
  • Documentation Strategy

    rampstackco/claude-skills

    Design and run a documentation system for a team or product.

    945 GitHub stars~3.3k tokensUpdated 3 days ago
    Writing & ContentAuto-check passed
  • Capture Knowledge

    adamayoung/TMDb

    Records non-obvious lessons from a finished task, such as gotchas, API quirks and design decisions, into a project's knowledge folder before a pull request opens.

    178 GitHub stars~2.3k tokensUpdated 7 days ago
    DevelopmentAuto-check passed
  • Technical Writing

    rsmdt/the-startup

    Create architectural decision records (ADRs), system documentation, API documentation, and operational runbooks.

    560 GitHub stars~1.3k tokensUpdated 2 mo ago
    DevelopmentAuto-check passed

More from Atmosphere/atmosphere

All 20 skills in this repo
  • Obsidian Bases

    Atmosphere/atmosphere

    Create and edit Obsidian Bases (.base files) with views, filters, formulas, and summaries.

    3.8k GitHub starsUsed in 22 repos~3.2k tokens
    Auto-check passed
  • Obsidian Markdown

    Atmosphere/atmosphere

    Create and edit Obsidian Flavored Markdown with wikilinks, embeds, callouts, properties, and other Obsidian-specific syntax.

    3.8k GitHub starsUsed in 20 repos~1.3k tokens
    Auto-check passed
  • Obsidian CLI

    Atmosphere/atmosphere

    Interact with Obsidian vaults using the Obsidian CLI to read, create, search, and manage notes, tasks, properties, and more.

    3.8k GitHub starsUsed in 13 repos~795 tokens
    Auto-check passed
  • Release Sample Sweep

    Atmosphere/atmosphere

    Run the pre-release end-to-end sweep of every user-facing surface — the 33 samples under samples/ (booted from their packaged artifacts and driven in a real browser via chrome-devtools MCP), the…

    3.8k GitHub stars~4.2k tokensUpdated yesterday
    Auto-check passed
  • Carnet

    Atmosphere/atmosphere

    Work the private register (Atmosphere/atmosphere-carnet) from a session — claim an issue before touching it so peers see who holds it and which session, release or close it when done, file new…

    3.8k GitHub stars~4k tokensUpdated yesterday
    Auto-check passed
  • Obsidian Vault Setup

    Atmosphere/atmosphere

    A skill your agent uses when setting up the shared atmosphere-vault Obsidian vault on a new machine or for a new team member.

    3.8k GitHub stars~1.2k tokensUpdated yesterday
    Auto-check passed

Works with

Questions about Obsidian Writer

What does Obsidian Writer do?

Write well-formatted notes to the atmosphere-vault Obsidian knowledge base. Obsidian Writer is an agent skill from Atmosphere/atmosphere. Write well-formatted notes to the atmosphere-vault Obsidian knowledge base.

When should I use Obsidian Writer?

Obsidian Writer fits situations like: updating an ADR; any structured document that should land in the vault — even when the user doesnt say Obsidian explicitly.

How do I install Obsidian Writer in Claude Code?

Run `npx skills add Atmosphere/atmosphere --skill obsidian-writer -a claude-code`. Or copy the skill folder (.claude/skills/obsidian-writer in Atmosphere/atmosphere) into .claude/skills/obsidian-writer in your project. Claude Code loads it when a task matches its description.

How do I install Obsidian Writer in Codex?

Run `npx skills add Atmosphere/atmosphere --skill obsidian-writer -a codex`. Or copy the skill folder (.claude/skills/obsidian-writer in Atmosphere/atmosphere) into .agents/skills/obsidian-writer in your project. Codex loads it when a task matches its description.

Can I use Obsidian Writer in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Atmosphere/atmosphere --skill obsidian-writer -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/obsidian-writer, .gemini/skills/obsidian-writer, .github/skills/obsidian-writer and .opencode/skills/obsidian-writer in your project.

What does Obsidian Writer need to run?

Going by SKILL.md and its folder, Obsidian Writer needs a shell for the scripts in its folder, the command-line tools its instructions call (claude, git and npm) and credentials named OBSIDIAN_API_KEY. Our summary lists: A Bash shell; A credential in OBSIDIAN_API_KEY.

Does Obsidian Writer access the network?

SKILL.md contains no URLs. Its commands use git and npm, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Obsidian Writer safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Obsidian Writer use?

Obsidian Writer is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Obsidian Writer use?

About 2.6k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.1k tokens, read only when the agent opens those files.

What are the alternatives to Obsidian Writer?

Skills that share tags, products or a category with Obsidian Writer: Create Doc (avibebuilder/claude-prime, 120 stars), Confluence Docs (bybren-llc/safe-agentic-workflow, 423 stars), Review A Design (inkeep/open-knowledge, 4.5k stars) and Documentation Strategy (rampstackco/claude-skills, 945 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Obsidian Writer?

Atmosphere (a GitHub organization) maintains it in Atmosphere/atmosphere, which has 3,819 GitHub stars. The repository holds 20 skills in this directory. The repository was last updated on October 9, 2026.

Source: Atmosphere/atmosphere on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.