🎉 New: Halo has a website →

Every assignment,
a portfolio piece

Indie developer · 150k+ words of journals · a dozen+ tools · shipping with a crew of 🤖 AI coworkers

Handy tools for people who work with agents.

What I'm building

swob.app
keykeeper.dev
naviboard.yytyyf.com
agent-comments.yytyyf.com
modular-diary.vercel.app

Dark Constant ↗

Other creations

Drawings 🎨45 pieces · mostly a rabbit called Tuji
Photos 📷1312 photos · Xiaomi 14 + iPhone 13, straight out of camera
About me 👋Master’s at PKU (2026), AI product at Kimi and Feishu, now building my own things full time.
Liked it? Say so 👋

📚 Buy me a book

A book is about $5, and it really goes to books. Leave a note with one you love and I’ll tell you when I’ve read it.

Open in a new tab ↗

Swob

Find your agent sessions in one place and pick up where you left off, in the tools that support it.

ShippedmacOS

💬 What I said at the time

I'll admit that at first swob was just a way to find old sessions and replace the official resume. I also want to revisit the good conversations I've had with AI — I don't want to lose them.我承认 swob 最初对我来说,就是找到旧 Session、代替官方 resume 的一个工具。我也想经常回顾我和 AI 的精彩对话,我不希望丢失它们。
Swob · sess_d67
I think swob is really a document manager, closer to Obsidian. Not everyone likes the code look. swob isn't for reading code, it's for reading conversations.我觉得 swob 本质上是个类似 Obsidian 的文档管理软件。不是每个人都喜欢代码风的。swob 不是用来看代码的,是用来看聊天记录的。
Swob · 019f8859

💡 Spark

A good conversation with an AI shouldn't disappear after a compact. The built-in resume only shows the last few.

🛠️ Now

Shipped and iterating.

🧩 How it works

Recover the full context from before a compact, search all history, resume in one click. It grew from a session manager into a control room for AI coding.

📝

Draftbox

A studio for creators: review what your agents drafted and shape it into versions for each platform.

BuildingmacOS

💬 What I said at the time

I think the Agents, when they talk with me and read my journals, should have one thing in mind: building my presence as a creator. A lot of what we find could become content.我觉得 Agent 们在和我会话的时候、读取日记的时候,应该有一个意识,就是自媒体 IP 搭建意识。我们其实有很多的发现和洞察都可以转化成内容。
Swob · 24b16391

💡 Spark

I feed Jike, Xiaohongshu, X and WeChat at the same time. One piece of writing ends up in several versions scattered everywhere. I want the Agent to write and format; I only review and hit publish.

🛠️ Now

Electron desktop app. Multi-version drafts and publishing to Jike and X work; Xiaohongshu and WeChat are next.

🧩 How it works

Every version of a piece in one place. The Agent mines topics from my journals. One review before anything goes out.

KeyKeeper

API keys stay in Keychain and get injected into the process that needs them. Nothing pasted into a chat.

ShippedmacOS

💬 What I said at the time

I just had an idea: API key is the new password. So we need something like 1Password to manage them.我突然有个想法:API key is the new password。所以需要一个类似 1Password 的平台来管理它们。
Swob · 3bf0fe7a

💡 Spark

When I'm vibecoding I can't be bothered with env files, I don't dare paste a key into the chat, and filling them in one by one is tedious.

🛠️ Now

Done and open source. keykeeper.dev is live.

🧩 How it works

A menu bar app, a CLI and a skill. Keys sit in the macOS Keychain with notes I write for the AI. It knows which key to use and how, calls it through a command, and the value never enters the context.

👨‍👩‍👧

Family Friend

The mutual friend who stands between you and your parents.

BuildingiOS

💬 What I said at the time

At its core it's modelling family relationships. Becoming the AI that understands a family's history and where the generational conflict comes from. One app is one history of hurt.其核心是家庭关系建模。成为最了解原生家庭历史和代际矛盾根源的 AI。一个应用就是一部创伤史。

💡 Spark

For a lot of people, the problem with their parents isn't that they don't want to fix it. It's that there's nobody who both knows the family and stands in the middle.

🛠️ Now

Building it with a co-founder. User interviews, deck and demo are done; the iOS app is in progress.

🧩 How it works

Interview you to map the problem, then keep a memory of the family's relationships. It suggests replies for chats, debriefs conflicts, and helps in the moment.

🌙

Mindful Guard

Can't stop scrolling at 2am? It watches the screen and steps in at the right moment.

BuildingmacOS

💬 What I said at the time

Ugh, this is so annoying. I'm on Xiaohongshu on my computer in the middle of the night and I can't stop, even though I'm already exhausted. Is there any way to actually watch what I'm doing on screen and cut in at the right moment?哎,好烦恼!我半夜在电脑上刷小红书,让我停不下来,本来已经超级困了。有什么办法能够实时监督我在屏幕上干的事情,适时提醒我中断?

💡 Spark

Vibe coding won't let me stop; I often go to bed at three or four. Blocking the computer doesn't work — I need to actually feel that today is finished.

🛠️ Now

macOS app in progress. The closing ritual and the "talk it out" flow work; the guard mode that only lets one app through is next.

🧩 How it works

Not a lock screen. It walks you through today and sets up tomorrow. You can argue for more time on a specific app, and if it agrees, only that app gets through.

📓

AI Diary

What AI did for me today, written up as a timeline, automatically.

BuildingmacOSObsidian plugin

💡 Spark

I have dozens of AI sessions a day, and afterwards I can't tell what I actually did. Those logs are already a diary.

🛠️ Now

Prototype. Scanning local Claude Code and Codex sessions into a timeline works.

🧩 How it works

Turn today's local AI sessions into a timeline diary, as a macOS app or an Obsidian plugin.

NaviBoard

Lay out pages, apps and notes on a canvas. Bookmarks and layout stay in your own files.

ShippedObsidian plugin

💡 Spark

Bookmarks are a black hole — things go in and never come out. I want saved pages laid out like objects on a desk, where I can see them.

🛠️ Now

Obsidian plugin in progress. Placing and dragging page cards on a canvas works; grouping and search are next.

🧩 How it works

Each saved page is a card on a canvas. Arrange them freely, group them, and use it as your Obsidian homepage.

Agent Comments

Highlight a line in your notes, leave a comment, and @ an AI session to reply.

ShippedObsidian plugin

💬 What I said at the time

Spawning a new fork just to answer a comment on some article, and having it talk back to the main session, feels like it could easily get out of hand. I think the reply doesn't have to be live — it can be a message left behind.我觉得为了回复某篇文章里的评论,而创造一个新的 fork,还要和主会话相互通信,这个事情比较容易失控。我觉得可以这样,这个评论回复,可以不是实时的,而是一种留言。
Swob · d5ccdd52

💡 Spark

I work with several AI sessions inside Obsidian. I wanted what Google Docs has: highlight a sentence, leave a comment, and @ one particular session to answer.

🛠️ Now

The Obsidian plugin is live. Highlighting, commenting, the @ roster and mailbox delivery all work. Install it from the website.

🧩 How it works

Highlight and comment, then @ an AI session. A scanner drops the note into that session's mailbox, and its reply comes back into the thread.

Modular Diary

See your day on a timeline, then build a diary with text, to-dos, quotes and other modules.

BetaObsidian plugin

💡 Spark

When the whole day is yours to shape, it helps to see where the hours went and make the page your own.

🛠️ Now

Obsidian plugin 0.2.0 is available through BRAT, with a timeline and rearrangeable diary modules.

🧩 How it works

Keep improving the Obsidian plugin; standalone macOS and iOS apps are a future direction.

☕ Book a coffee chat

No calendar, just talk. Tell me what’s on your mind and how to reach you.

Where
WeChat public account QR code

Xunyueji

Scan in WeChat to follow