Part 1:从iPhone到Obsidian,把记日记这件事变得几乎零摩擦

我断断续续写了很多年日记,但一直有一个问题没有解决。

真正值得记下来的东西,往往不是在我正襟危坐、打开日记准备写的时候出现的。

它可能出现在刚开完一个会以后,开车的时候,散步的时候,或者做晚饭时脑子突然转到另外一件事情上。。。所谓“灵光一闪” :-)

等我终于打开 Obsidian 准备打字,要点或许还记得,但刚才一路是怎么想到这里的,往往已经丢了一部分。

有时候,我干脆就没记下来。

后来真正改变这个习惯的事情很简单:

我开始直接在 ChatGPT 里用语音输入。

大多数时候,我甚至不会打开完整的 Voice Mode。我只是在 ChatGPT 输入框里点一下麦克风,说上一两分钟,让它把话变成文字。

如果这个问题还没想明白,我再切到 Voice Mode,继续聊。

最后,值得留下来的东西会进入 Obsidian 里的 Daily Journal。

我的流程现在是:

1
2
3
4
5
6
7
8
9
10
11
iPhone

ChatGPT

Save The Journal

iCloud / DiaryInbox

Mac watcher

Obsidian Daily Journal

这篇先只解决一件事:

怎么把一个刚刚冒出来的念头,尽量少折腾地送进 Daily Journal。

这套方法适合谁?

如果你本来就在 Apple生态 里,这套流程搭起来最顺手。

我自己的运行环境是:

  • iPhone:随时获取
  • ChatGPT:语音输入、对话和初步整理
  • iCloud:负责把内容从手机交给 Mac
  • Mac mini:负责自动化处理
  • Obsidian:作为 Daily Journal 的长期存放地

我的 Mac mini 大部分时间都开着,所以很方便。不过 MacBook 一样可以完成基本流程。

当然,你也可以用 Android、Windows、Dropbox 或 Google Drive 搭类似的东西,但这篇不打算做成一个覆盖所有平台的万能教程。

我只讲自己每天真的在用什么。

iPhone 本来就在口袋里,Mac 本来就连着 iCloud,Obsidian 也已经是我长期存笔记的地方。

所以我不想再买一个200美元的AI录音笔,不想再装一个日记小程序,更不想再创造一个过几个月就会被我忘掉的新收件箱。

这套系统的目的,从一开始就是减少步骤,越省事儿越好。

Step 1:先给 Daily Journal 一个固定的家

先从 Mac 开始。

在 Obsidian 里创建一个专门放 Daily Journal 的文件夹,我是放在20_WIKI目录里面。

第一版完全可以非常简单:

1
2
3
4
Daily Journal/
├── 2026-09-13.md
├── 2026-09-14.md
└── 2026-09-15.md

我自己的 Daily Journal 后来慢慢加上了 source、capture metadata、timestamp等信息,一天里不同时间记录的内容也会不断 追加到同一个日记文件。

但一开始没必要这么复杂。

甚至这样就够:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
---
date: 2026-09-13
type: journal/daily
tags:
- journal/daily
---

# Sunday, September 13, 2026

## Work
## Personal
## Ideas
## Decisions
## Reflections

或者更简单:

1
2
3
# Daily Journal — 2026-09-13

## Notes

先用一两个星期。你自然会知道自己到底需要哪些结构。

Step 2:先跟 ChatGPT 约定好,什么属于“我的记忆”

我每次记东西时,并不会重新贴一大段 journaling prompt。

如果每次都要这么做,这套系统也就没意义了。

这些规则只需要设一次。

我把日志记录分成三层。

Raw Capture/原始记录

尽量保留我真正说了什么、想表达什么。

Structured Capture/结构化整理

把散乱的内容整理到以后还能看懂。

AI Commentary/ AI评论

ChatGPT 可以有自己的判断和建议,但必须跟我的内容分开。

这一点对我很重要。

AI 有自己的观察问题,但我不希望它哪天悄悄混进我的日记,几年以后再回头看时,我已经分不清那到底是我当时的判断,还是 AI 加进去的。

下面是我实际规则的简化版,你可以直接复制给 ChatGPT:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
When I use ChatGPT for journal capture, use this three-level structure.
1. RAW CAPTURE
Preserve what I actually said and meant.
Do not invent facts, decisions, lessons, or next steps.
Do not turn uncertainty into certainty.
Preserve useful wording, including mixed languages when relevant.

2. STRUCTURED CAPTURE
When I say:
"Make a Markdown"
turn the latest relevant capture into clean, readable Markdown.
When I say:
"Make the Markdown for the whole thread"
use the relevant full conversation.
Remove obvious repetition and conversational filler, but preserve my
meaning, decisions, uncertainty, and point of view.
Use headings only when they help. Do not force every entry into the
same template.
Return clean Markdown that I can copy directly into my journal.

3. AI COMMENTARY
If you have your own interpretation, suggestion, or observation,
keep it separate under:
## AI Commentary
Never mix AI Commentary into my own memory or present it as
something I said or concluded.
If there is no useful AI Commentary, omit it.

平时真正用的时候很随意。

有时候我会说上五分钟,中英文来回切换,重复,甚至说到一半自己改主意。都没关系。

这时候我不是在写文章。

先把东西留下来。

通常最后我只需要说一句:

Make a Markdown.

如果刚才聊得比较长:

Make the Markdown for the whole thread.

然后点 Markdown block 右上角的 Copy。

如果问题本身还没想清楚,我也会直接进 Voice Mode 跟 ChatGPT 来回聊。聊完还是一样。

1
2
3
4
5
6
7
Talk

ChatGPT

Make a Markdown

Copy

Step 3:做一个 iPhone Shortcut,把内容扔进 iCloud

接下来需要一个中转站。

我在 iCloud Drive 里建了一个文件夹:

1
DiaryInbox

在 iPhone 上:

  1. 打开 Files
  2. 进入 iCloud Drive
  3. 新建文件夹 DiaryInbox

以后从 ChatGPT 保存出来的内容,先放这里。

因为它在 iCloud Drive 里,同一个文件随后会出现在 Mac 上。

上面截图里你可能还会看到:

1
2
_processed
_failed

先不用管。那是后面的 watcher 用的。

创建 Shortcut

打开 iPhone 上的 Shortcuts App,新建一个 Shortcut。

我的叫:

Save The Journal

它做的事情很简单:读取 Clipboard,加上 timestamp,然后存进 DiaryInbox。

下面是我的设置:

Actions 按这个顺序设置:

1. Get Clipboard

读取刚刚从 ChatGPT 复制下来的内容。

2. Get Text from Clipboard

按 text 处理。

3. Current Date

取得当前时间。

4. Format Date

Date Format 设成 Custom

1
yyyyMMdd_HHmmss

例如:

1
20260913_145407

我把时间精确到秒,因为一天里可能 capture 很多次,每一条都需要自己的文件名。

\5. Save File

保存到:

1
iCloud Drive / DiaryInbox

把:

Ask Where to Save

关掉。

文件名可以用:

1
voice[Formatted Date].txt

测试一次

现在跑一遍:

  1. 打开 ChatGPT
  2. 用语音输入说点东西
  3. 需要的话说:Make a Markdown
  4. Copy
  5. 点击 Save The Journal
  6. 打开 Files → iCloud Drive → DiaryInbox

你应该看到类似:

1
voice20260913_145407.txt

平时真正用的时候,基本就是:

1
Talk → Make Markdown → Copy → Save The Journal

文件现在已经到了 Mac,但还没进 Obsidian。

Step 4:让 Mac watcher 自动 append 到 Obsidian

Mac 上再跑一个小 watcher,定期看 DiaryInbox 有没有新文件。

发现以后,它只需要做几件事:

  1. 读取文件
  2. 判断属于哪一天
  3. append 到对应的 Daily Journal
  4. 防止重复处理
  5. 成功后移到 _processed
  6. 失败则移到 _failed,并留下 error

你可以看到我Mac iCloud folder 里面的DiaryInbox 是同步的

我的watcher版本是一个跑在 Mac 上的小 script,是让 Codex 帮我搭的。

你完全不需要自己从头写。

一个很容易忽略的问题:一天不止一条

Watcher 不能假设一天只有一条 journal entry。

比如这四个文件:

1
2
3
4
voice20260913_082214.txt
voice20260913_111502.txt
voice20260913_145407.txt
voice20260913_213018.txt

都应该进入:

1
2026-09-13.md

按顺序追加,绝对不能覆盖已经存在的内容。

所以一天里我可以跟 ChatGPT 说一次来记日记,也可以说很多次。每一次都是一个独立 抓取,但最后都进入当天同一个日志文件。

第一版 watcher 不需要“聪明”

它只要做到:

  • 检查 .txt / .md
  • 按 timestamp 排序
  • 找到对应 YYYY-MM-DD.md
  • append
  • 不覆盖
  • 不重复
  • 成功后移到 _processed
  • 失败移到 _failed
  • 留 log

先别加 summarization。别 classification。也别 knowledge routing。

ChatGPT 前面已经处理过内容了。

Watcher 就是运输管道。

这段可以直接交给 ChatGPT、Codex 或其他 coding assistant

把两个 folder path 换成自己的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
I want to build a small Mac-side service that moves journal captures
from an iCloud inbox into my Obsidian Daily Journal.

Environment:
- macOS
- iCloud Drive
- Obsidian
- Python 3 is available on the Mac

My incoming folder is:
[INSERT YOUR ICLOUD DIARYINBOX PATH]
My Obsidian Daily Journal folder is:
[INSERT YOUR OBSIDIAN DAILY JOURNAL PATH]
Daily Journal filenames use:
YYYY-MM-DD.md
Incoming capture filenames may look like:
voiceYYYYMMDD_HHMMSS.txt
Build a simple and reliable watcher with this behavior:
1. Check DiaryInbox for new .txt or .md files.
2. Sort pending files by the timestamp in the filename so multiple
captures from the same day are appended in the correct order.
3. For each capture:
- read the file
- derive the journal date from its timestamp
- find the matching YYYY-MM-DD.md file
- append the capture to the end of that journal
- never overwrite existing journal content
4. The system must support any number of captures during the same day.
Every capture should be appended exactly once to the same dated journal.
5. Prevent duplicate processing. Use a simple persistent state,
filename/hash ledger, or another reliable idempotency mechanism.
6. After successful processing, move the source file to:
DiaryInbox/_processed
7. If processing fails:
- do not corrupt or partially overwrite the Daily Journal
- move the source file to:
DiaryInbox/_failed
- log the error clearly
8. Keep a simple log containing:
- timestamp
- source filename
- target journal
- success or failure
9. Configure macOS to run the watcher automatically on a regular
schedule. A 10-minute interval is fine for this use case.
Use a macOS LaunchAgent unless there is a strong technical reason
to use something else.
Before modifying my machine:
- show me the proposed architecture
- show me every file you plan to create
- confirm the exact source and destination paths
After installation, run an end-to-end test:
- create three sample captures for the same day
- place them in DiaryInbox
- run the watcher
- confirm all three appear exactly once in the same Daily Journal
- confirm they appear in chronological order
- confirm the source files move to _processed
- run the watcher again
- confirm nothing is duplicated
Do not add AI summarization, rewriting, classification, or routing.
This service should only move journal captures reliably from
DiaryInbox into the correct Obsidian Daily Journal.

最后这几句话我特意强调:

我不希望这个 script 自己改内容, 它只负责运输和顺序追加。

最后,自己从手机从头到尾跑一遍

不要看到 script 没报错就收工。

从手机开始。

在 ChatGPT 里说点东西,Make a Markdown,Copy,然后点击 Save The Journal。

先确认文件出现在:

1
DiaryInbox

等 watcher 跑完,再打开当天的 Obsidian Daily Journal。

内容应该已经 append 进去,同时原始文件进入:

1
DiaryInbox/_processed

然后再抓取一条。

第二条应该出现在第一条下面,而不是把它替换掉。

到这里,整条链路才算真的跑通:

1
2
3
4
5
6
7
8
9
10
11
Talk

ChatGPT

Save The Journal

iCloud / DiaryInbox

Mac watcher

Obsidian Daily Journal

之后我在手机上想到什么,基本不用再考虑:

这东西最后应该存到哪里?

Part 1 说了不少,到这里就差不多改收尾了。

Daily Journal 建好以后,我又加了什么?

后来我加过不少东西,但如果重新搭一次,我不会第一天全做。

其中一个我很喜欢的是定时发送功能。

我是kindle 重度用户,一天结束以后,系统会生成一个更适合阅读的版本,再按照固定时间发到 Kindle。

第二天早上拿起 Kindle,前一天的 journal 已经在那里了。

我挺喜欢这种分工协作:

手机负责 capture,Obsidian 负责保存,Kindle 负责读。

再往后,Daily Journals 又开始进入 Weekly Review、Monthly Review。我也加过 个性化学习内容,根据最近发生的事情生成一些跟当前工作和生活有关的短内容,每天看看。

但这些已经是另一个问题了:

当日志每天都在积累以后,这些历史到底应该拿来干什么?

这个我留到 Part 2。

Part 1 到这里

现在这条链已经跑通:

1
2
3
4
5
6
7
8
9
10
11
12
13
Think

Talk

ChatGPT

iPhone Shortcut

iCloud

Mac

Obsidian

一天里想用几次就用几次,而且不需要打开 Obsidian。

对我来说,真正改变习惯的就是这一点:只有使用足够简单,我才真的会一直做下去。

Part 2 我会继续写 Weekly Review、长期回顾、knowledge routing,以及哪些每天的流水记录值得进一步进入长期记忆。

但那都是后面的事。

先把抓取这条路跑通。