Before the conversation ends, save this session's work to every tier the project has set up:
| Tier | End-of-work action | For whom |
|---|---|---|
| L1 Local | Update AGENTS.md progress + rewrite handoff.md |
Any Agent, any computer in the next session |
| L2 GitHub | commit + push | Version history + cloud backup |
| L3 Obsidian | Write detailed records into 專案工作流程.md |
Your future self who needs the full context |
Core principles
- Starting work is "read", ending work is "write"——
handoff.mdis a mandatory write item at end of work; this is the lifeline for cross-computer/cross-Agent handoff - Do not run in a vacuum—first take stock of what was done today from the conversation context
- Only touch what needs touching—if there is no substantive progress (only asked questions, no files changed), do not run the sync
- Ask a human when in doubt—before commit, give a draft message and wait for approval; ask first about files you are unsure whether to add
- Keep concise and detailed separate——
handoff.mdonly holds information necessary for handoff; the full context (reasons for decisions, details of pitfalls hit) goes into Obsidian, with no duplication between the two
Tier detection (at end of work, see which tier "this project" has set up)
- L1: the project has
AGENTS.md/handoff.md→ update (if not, propose running "Initialize project" first) - L2: the project has
.git→ commit + push - L3:
AGENTS.mdhas an Obsidian path registered, andthere are currently available Obsidian MCP tools(tools that can read and write vault notes) → write detailed records
To determine L3, look at what tools you actually have on hand; do not assume specific tool names. A lower-tier computer opening a higher-tier project: do what you can, and note what you cannot in
handoff.md(e.g., "This end-of-work session was on a computer without Obsidian, so L3 notes were not updated"), and catch up when back on the higher-tier computer.
End-of-work SOP (execute in order)
L1: Update the blueprint and handoff file (always execute)
- Take stock of this session's results: summarize from the conversation history—which files were completed, what decisions were made, what pitfalls were hit
- Update
AGENTS.md:- roadmap checklist: check off completed items, add newly discovered to-dos
- If "folder structure" has new files, add them
- Rewrite
handoff.md(rewrite the whole thing, do not keep appending):- ⏯️ Where we are now: the last action completed this session
- 🚦 Current status: runnable? What is half-done?
- ➡️ Next steps: 1-3 specific, executable items
- ⚠️ Notes: newly hit pitfalls, temporary workarounds
- 🕐 Last updated: time + updater (Agent name @ computer name) + Git push status (write "pending push" first, fill in after L2 completes)
- How to get the computer name: on Windows (PowerShell) use
$env:COMPUTERNAME; on Mac/Linux usehostname
- How to get the computer name: on Windows (PowerShell) use
L2: git sync (project has .git only then do it)
git status --shortReview changes → draftTraditional Chinese commit message (title: verb + object; body: 3-5 bullets describing the changes + why) → show the user for review, commit only after they nod- commit →
git push - Fill in the
handoff.mdGit push field: success →✅ 已推; failure →❌ 未推(原因), and specifically flag it in the report (if the push didn't succeed, the other computer can't get the GitHub backup) - Do not add:
.env, API keys, credential files, untracked unknown new files (ask first)
L3: Obsidian detailed log (do only if available)
- Update the
<你的 vault>/<專案資料夾名>/專案工作流程.md:- "⏯️ Where I left off" section: sync the handoff summary
- "🗓️ Recent changes log" table: add a row (date + summary + sync status)
- "🕳️ Pitfall notes": if there are new pitfalls, add them by category (with cause and solution; write the detailed version here)
- Decision log: what trade-offs were made this time and why (don't put these in the handoff, put them here)
- Table exceeds 30 rows → remind the user to archive to
歷史日誌.md
Report (tiered checklist)
✅ L1 本地:AGENTS.md 進度已更新、handoff.md 已改寫(更新者:<Agent> @ <電腦名>)
✅ L2 GitHub:<repo> 已 commit + push(<commit 標題>)
✅ L3 Obsidian:專案工作流程.md 已補紀錄
⚠️ 手動處理:<例:本次新增了 ~/.xxx_api_key,另一台電腦要手動建>
Mark items not done with ⚠️ or ❌ and explain why.
If this time you changed ~/.config/opencode/ global settings or skills under it, specifically remind the user:these files are not in the project repo, so they won't be carried along by this push, and on a new computer they must be installed again or copied separately.
Things not to do
- ❌ Run sync on conversations with "no substantive progress"
- ❌ Wrap up without updating
handoff.md(that's the only clue for the next work session) - ❌ Write uninformative commit messages like "update" or "modify"
- ❌ Automatically add untracked new files or sensitive files (require user confirmation)
- ❌ Cram long details that belong in Obsidian into
handoff.md(the handoff file must stay readable within one page)
Dual relationship with startup
| Aspect | Wrap up | Startup |
|---|---|---|
| AGENTS.md / handoff.md | Write | Read |
| Git actions | add + commit + push | status + fetch (no pull) |
| Obsidian | Write detailed log | List paths only, read only if needed |
| External side effects | Push to GitHub, modify files | None |
Notes
- All messages useTraditional Chinese
- The project blueprint filename is fixed asall caps
AGENTS.md(Mac/Linux are case-sensitive) - For repos inside Windows + cloud drive folders, if you encounter a git write error on the first operation:
git config windows.appendAtomically false