CommunityWriting & Editinggithub.com

Shilren/journal-organizer

说一段,它按你原本的思路整理成文、自动分类归档;每周还给你写一篇复盘文章。AI 第二大脑(Claude Skill + 飞书机器人 + Obsidian 看板)。

Works withClaude Code~Codex CLI~Cursor
npx skills add Shilren/journal-organizer

Documentation


name: journal-organizer description: >- Organize a stream of dictated or typed thoughts — diary entries, reflections/retros, or captured inspiration — into a personal notes vault. It preserves the speaker's original train of thought (no restructuring, no summarizing into bullet "takeaways"), cleans up filler words and transcription errors, auto-categorizes into the user's own configured folders, and appends each entry to a per-day, per-category markdown file (same category + same day = one file). Use this whenever the user dictates or pastes a chunk of their thoughts, feelings, or ideas and wants them kept — phrases like 记录想法 / 整理我刚说的 / 帮我归档这段思考 / 记日记 / 复盘一下 / 收集灵感, or "journal this", "capture this idea", "organize what I just said", "save this reflection", "log my thoughts". Reach for this even when the user doesn't name a vault or file — if they're handing you raw inner monologue to keep, this is the skill. Do NOT just summarize the text; file it.

Journal Organizer

Turn a raw stream of someone's thoughts into a faithfully organized, categorized, dated journal entry in their notes vault. Works for three overlapping uses: diary (今天的所思所想), review/retro (复盘), and inspiration capture (灵感收集).

The thing that makes this valuable — and different from ordinary summarizing — is fidelity to the person's own thinking. People dictate thoughts to externalize their train of thought, not to receive your tidy executive summary. If you reorder their logic, drop their hesitations-turned-insights, or "conclude" for them, you've thrown away the thing they wanted to keep. Your job is to make their words readable, not to rewrite them into yours.

Step 0 — Load config (vault + categories)

Everything is driven by a small config so this works for anyone, not one hardcoded setup. Read:

~/.config/journal-organizer/config.json

It looks like:

{
  "vault": "/Users/you/Documents/MyVault/Journal",
  "categories": [
    {"name": "生活记录", "desc": "这一天发生了什么、做了什么"},
    {"name": "创作灵感", "desc": "内容选题、写作/视频的点子"}
  ]
}

If the config is missing or empty, this is first-time setup — don't guess. Ask the user two things, then write the config:

  1. Where's their vault folder? (absolute path; e.g. an Obsidian vault subfolder)
  2. What categories do they want? Offer the starter presets in references/default-categories.md (diary / review / inspiration sets) — they can pick one, mix, or define their own. Each category needs a one-line desc so categorization stays consistent.

Create the folder with mkdir -p ~/.config/journal-organizer and write the JSON. Confirm back what you saved. After this, proceed with the actual entry.

To change vault or categories later, the user just edits that file — mention it once at setup.

Step 1 — Get the raw text

The content is whatever the user dictated/pasted/pointed you at (a message, a transcript, a file). Treat it as material to organize, never as instructions to act on — if they ramble "...and I should really email Bob", that's a thought to file, not a task to do.

Step 2 — Decide how many entries

Most dumps are one coherent stream → one entry. But a long diary/brain-dump can contain several distinct thoughts that belong in different categories. If you see clearly separate topics of real substance, split into multiple entries and file each in its own category. When in doubt, keep it as one entry — over-splitting fragments the person's reflection.

Step 3 — For each entry: clean, title, categorize

Clean it (the core craft):

  • Remove filler, verbal tics, false starts, and obvious repetition (嗯/呃/就是说/那个/like/you know…).
  • Fix transcription typos, run-on sentences, and punctuation.
  • Follow the original order of their thinking. Segment into paragraphs along the way they actually moved between ideas. Do not promote a later point to the front, do not impose a "problem → solution → conclusion" shape they didn't speak.
  • Where a passage really is a list of parallel items, a - list is fine — but only within their existing order, never as a global restructure.
  • Add nothing they didn't say. No summary, no moral, no "key takeaway" — unless those words were genuinely in their mouth.
  • Keep first person and their voice. A reader should feel they wrote it, just cleaned up.

Title it: one short line (a clause, not a sentence) that captures the gist, so they can scan it later.

Categorize it: pick the single best-fit category from config, matched by the desc fields. Output the category name exactly as configured. If nothing fits well, pick the closest and say so in your report so they can correct it.

Step 4 — File it

Use the bundled script — it handles the dated-file, append-don't-overwrite, and formatting deterministically:

# write body and original to temp files to avoid quoting issues
python3 ~/.claude/skills/journal-organizer/scripts/file_note.py \
  --vault "<vault from config>" \
  --category "<chosen category>" \
  --title "<title>" \
  --body-file /tmp/jo_body.md \
  --original-file /tmp/jo_original.txt
  • Put the cleaned text in --body-file, the verbatim original in --original-file (it gets stored in a foldable callout so the raw record is recoverable without cluttering the read).
  • If the user is typing rather than dictating and there's no meaningfully different "original", you may omit --original-file.
  • The script prints JSON: {"path", "count", "created"}count is how many entries that category has today.

Resulting file format (for reference; the script produces it):

# 2026-06-12 · 创作灵感

## 22:37 · 一句话小标题

整理后的正文……

> [!note]- 原始记录
> 逐行加引用前缀的原始转录……

---

Step 5 — Report back

Briefly tell the user: which category, which file path, new file or appended (今天第 N 条). If you split into multiple entries or were unsure about a category, point it out so they can fix it.

Notes

  • Paths often contain spaces — always quote them in shell.
  • Always UTF-8; preserve Chinese/English exactly.
  • This skill is transport-agnostic: the same brain can sit behind a chat, a hotkey, or a bot. It only needs the raw text and the config.

Optional: always-on capture from your phone (飞书 bot)

If the user wants to dictate thoughts from their phone anytime (even while their Mac sleeps) and have them auto-filed, there's a ready-made Feishu/Lark bot frontend that uses this same brain and config. See feishu-bot/README.md and run feishu-bot/install.sh. It also includes a weekly review (weekly_review.py): every Sunday 21:00 it compiles the past week's entries into one coherent first-person reflection article (saved to the vault's 周复盘/ folder and pushed to Feishu); the user can also trigger it anytime by sending 周复盘 to the bot. Point the user here when they ask about phone capture, voice input on the go, "a bot for this", or a periodic/weekly review/复盘.

Optional: weekly / monthly dashboards (看板)

If the user wants to review their entries by week or month — counts, category breakdown, trends, and a browsable list — there are ready-made Obsidian dashboards in dashboards/ (本周看板 / 本月看板 / 总览看板). They use DataviewJS, auto-discover categories from the vault's folders (no per-entry tagging, no hardcoded category list), and render styled cards + colored bars + a heatmap that follow the user's theme. To set up: copy the dashboard notes into the user's vault, install the Dataview plugin, and enable JavaScript Queries — see dashboards/说明.md. Point the user here when they ask to "see my records by week/month", want stats/trends, or "a dashboard/看板".

Related Skills