Skip to content

Repository files navigation

ThereIsNoAssistant

A personal assistant that is just text files — and a coding agent as its runtime.

License: MIT Runtime: any coding agent Deployment: none Storage: Markdown + git Dependencies: Python stdlib

The idea · Example · Features · Getting started · Structure · 中文说明


The idea

Every personal-productivity tool you have ever abandoned had the same problem: it was an application. Someone had to build the UI, host the backend, keep the integrations alive, and decide which features you were allowed to have. When that someone stopped, your data was stranded in their schema.

ThereIsNoAssistant inverts this. There is no application. There is a directory of Markdown files, a git repository, and a set of rules written in prose. The intelligence — parsing your mail, extracting deadlines, filing records, briefing you, drafting replies — is supplied at runtime by whatever coding agent you happen to point at the directory.

   your data              the rules              the runtime
   ─────────              ─────────              ───────────
   Markdown + YAML   +    AGENTS.md         +    Claude Code
   plain text             per-area READMEs       Cursor
   git history            schemas                Codex / any agent
                          invariants             (swap freely, anytime)

This is a bet on where things are going: coding agents are becoming a general-purpose runtime for personal software. They can read a spec, hold a filesystem in their head, follow written discipline, and call APIs. Given that, the most durable "app" you can write is not code at all — it is a well-organized folder plus a precise description of how to treat it.

Why this shape

Zero deployment cost No server, no container, no database, no build step, no API key beyond the mailbox you already own. Clone the folder and it runs. Nothing to keep alive at 3 a.m.
Model- and vendor-portable The runtime is interchangeable. Drive it with Claude Code today, Cursor tomorrow, whatever ships next year. The two transcripts below are the same repository under one such agent. Your assistant does not depreciate when a product sunsets.
Fully inspectable, entirely yours The goal is that every fact the assistant "knows" is a line in a file you can open, grep, diff, and revert — no hidden embedding store, no opaque memory, no export button to beg for. Keeping it that way is a discipline the agent has to follow, not something the format enforces.
Built to grow for years Structure is defined by written conventions, not by a schema migration you can't run. Adding a record type or a whole new area is a documented, agent-executable procedure — the system is meant to be extended by its own operator, indefinitely.
Text ages well Markdown from 2005 still opens. A decade of your correspondence, decisions, and deadlines stays readable long after any particular tool — including this one — is forgotten.

What a session looks like

You open your agent in the directory and say good morning. Before answering, it reads your profile, fetches your mailboxes, checks the git remote, scans tasks and calendar, and leads with what actually matters today.

Terminal animation: the user types "Good morning! What do we have today?"; the agent reads me.md, fetches two mailboxes, runs git fetch, then prints a briefing — deadlines due tonight, open threads, and four unprocessed inbox items.

Illustrative session; all names and figures are fictional.

Prefer text? The same session, written out

Good Morning! What do we have today?

Hi — I'm Cursor Grok 4.5.

Due today / soon

  • Tonight 11:59 PM PT — CS 281 HW6 on Gradescope. HW5 is in; Canvas still shows 2 items unsynced — worth checking.
  • Tonight 10:00 PM PT — weekly status to advisor Dr. Okonkwo (project ForgeGraph: agent planning over graphs). Trajectory runs are parked; one-page status is the floor.
  • Mon 7/27 — internship mentor sync (30 min); agenda not drafted yet.
  • Tue 7/28 — Fall tuition $9,420 in full (installments already declined).
  • Fri 7/31 — new apartment first rent + move-in checklist; student-insurance mailing address still points at the old dorm.

Open threads

  • Visa / program extension — e-form submitted 7/20; stuck at department sign-off → international office. Current program-end doc hits 8/08; don't drop the summer course before approval.
  • Incomplete (CS 340) — written work due 8/28; auto-F cliff 9/04. Talk to advising before filing any retro drop.
  • Laptop repair ticket #88421 — vendor asked for post-repair status on 7/22; reply is overdue.
  • Side project MemSketch — Okonkwo wants a chat next week; align a slide outline with collaborator Priya first.

Inbox (4 unprocessed)

  • [noise?] Campus Events · July digest
  • Housing · first payment reminder (matches 7/31)
  • International Office · "extension received, pending department"
  • Grad advising · "re: retro drop — needs your reply"
  • LinkedIn · "people viewed your profile" (safe to skip)

Tonight: HW6 or the weekly note first? I can draft the status outline either way.

Nothing in that briefing was configured. There is no rules engine, no reminder object, no calendar-sync product. The deadlines came out of email the agent ingested weeks ago, the cross-references (matches 7/31, don't drop before approval) came from records it wrote at the time, the [noise?] tag came from a skip list it maintains itself — and the closing question came from noticing that two things are due the same night.

It works in whatever language you do — and under whichever agent you happen to be running. Same repository, same files, same records:

The same repository driven in Chinese: the user types a greeting, and the agent returns the same briefing — deadlines, open threads, and unprocessed inbox items — in Chinese.

Prefer text? · 纯文本版

下午好!看看今天怎么说?

你好,我是 Cursor Grok 4.5。

今日 / 逾期附近

  • 今晚 23:59 PT — CS 281 HW6(Gradescope);上份 HW5 已交,Canvas 上有 2 项还显示未同步,要核对
  • 今晚 22:00 PT — 给 advisor Dr. Okonkwo 的周进展(项目 ForgeGraph:图上的 agent 规划);上周轨迹实验先 park 了,这周至少交一页 status
  • Tue 7/28 — 秋季学费 $9,420 全额(分期你已拒)
  • Fri 7/31 — 新公寓首期租金 + move-in checklist;学生保险邮寄地址也要改(现在还是旧宿舍)

在跟的几条线

  • 签证/项目延期:网申已提交(7/20),卡在院系签字 → 国际办;当前 I-20 类文件到期 8/08,批准前别退暑课
  • Incomplete 课(CS 340):书面补交 8/28,系统自动转 F 9/04;先约 advising 再决定要不要走 retro drop
  • 笔记本维修单 #88421:厂商 7/22 问修后状态,你还没回——今天该回

邮件(未处理 4)

  • [noise?] Campus Events · July digest
  • Housing · first payment reminder(对得上 7/31)
  • International Office · "extension received, pending department"
  • 院系 advising ·「关于 retro drop,等你回复」
  • LinkedIn · "people viewed your profile"(可跳)

你先说:今晚是 HW6 还是 周报 优先?要的话我可以把周报大纲直接起一版。


What it does

Mail, ingested — not just read. Stdlib-only Python clients for Gmail and Outlook/Microsoft 365 fetch new messages into inbox/ as lean, pre-decoded JSON: HTML and base64 are stripped at write time, so a 250 KB marketing email becomes a few hundred bytes of actual text. The agent then classifies each one, merges it into the right thread record, extracts any deadline it implies, and files the original for provenance. Recurring noise senders are skipped without ever entering context.

Sending, with a hard gate. The agent can draft on your behalf, but the send scripts refuse to transmit without the literal phrase CONFIRM SEND EMAIL, typed by you, after you have seen the dry-run preview of that exact message. One phrase authorizes exactly one send — it does not carry over, cannot be inferred from "looks good", and cannot be supplied by the agent itself. Drafting discipline separately forbids making commitments (meetings, timelines, deliverables) on your behalf without flagging each one for confirmation.

Tasks and a calendar that maintain themselves. TASKS.md and CALENDAR.md are plain checklists and dated lists — no schema, no IDs — that the agent populates from your mail and conversations, keeps mutually in sync, and briefs from at session start. Every stored timestamp is UTC and explicitly labeled; conversion to your local time happens only when speaking to you, so a laptop that crosses a timezone never corrupts a deadline.

Records with a lifecycle. Email threads, notes (yours), memos (the agent's), and projects — working directories that hold drafts, cloned repos, and literature alongside a purpose/goal/progress record. Each type has a schema, an entry in a global index, and an active → archive path. Archiving always requires your explicit approval; the agent may only propose.

History import. Bring years of existing mail in through API backfill, or unpack Outlook .pst/.ost archives with the bundled extractor — scoped with you first, never bulk-dumped.

Optional integrations. Canvas LMS calendar feeds for coursework deadlines; optional health/wellbeing logging areas that you can delete outright during setup if they are not for you.

Discipline that makes it trustworthy. The invariants in AGENTS.md are short and absolute: report every operation with record ids, never change files silently, keep the index in sync, never archive unilaterally, read an area's rules before acting in it, ask instead of guessing, commit and push after every completed operation. These are what let you leave it alone for a week and still trust what it did.


Getting started

⚠ Required first move — detach from this public repo

This repository is public. Your assistant will commit your mail, tasks, and personal records into git. A fresh git clone keeps origin pointed here — one habitual git push later and your personal archive is public. Before anything else, delete the cloned history and start your own:

git clone https://github.com/Phantivia/ThereIsNoAssistant.git my-assistant
cd my-assistant
rm -rf .git          # Windows PowerShell: Remove-Item -Recurse -Force .git
git init

Then create a PRIVATE repository on your git host and push there (START.md Step 2 walks you through it, and the agent is instructed to verify this before writing anything personal).

Do not fork this repo to use it — forks are public and carry the same risk. Fork only to contribute back.

  1. Open the directory with your coding agent — Claude Code, Cursor, or any agent that reads AGENTS.md / CLAUDE.md on start.
  2. Say hello. The agent notices the system is uninitialized and walks you through START.md: your profile and timezone, the private git remote, mail account OAuth, optional history import, optional Canvas feed, and which sensitive areas to keep. It explains why before each step, asks before anything optional, and never handles your credentials itself — you authorize in your own browser.
  3. Then just talk to it. "process the inbox", "note this down…", "what's on this week?", "run a review", "draft a reply to the housing office". Your manual is MANUAL.md.

Requirements: a coding agent, git, and Python 3.8+ (3.9+ for the Canvas feed). Node is needed only for the PST extractor. There is nothing to install — the entire mail path is Python standard library.


How it's organized

Path Role
START.md First-run initialization guide (setup only; inert afterwards)
AGENTS.md The map and the invariants — what every agent reads first
MANUAL.md The manual written for you, the human
me.md Your profile and standing preferences
people.md Standing context on the people in your affairs
INDEX.md Global index of every record
inbox/ Raw incoming material, any format, plus ingestion rules
active/ Tracked records: emails/, notes/, memos/, projects/
active/TASKS.md Live to-do list with deadlines
active/CALENDAR.md Global calendar: events, deadlines, recurring commitments
archive/ Concluded records, mirroring active/
attachments/ Binary files referenced by records
scratch/ Agent workspace for clones and downloads (gitignored)
system/ Schemas, mail/time discipline, tools, extension conventions

Each area owns its detailed rules in its own README.md, and the agent is required to read those rules before operating there. AGENTS.md stays short on purpose — it loads every session, so it holds only the map and the invariants.


Extending it

The system is meant to be grown by its own operator. Ask the agent for a new record type, a new top-level area, or a new workflow, and it follows the documented procedure in system/README.md: propose the design first, create the schema, mirror the active/ + archive/ directories, add index sections, update the manual, and migrate anything that already exists — in one atomic commit. The guiding principle is text over database: reach for "a well-written document" before "a new record type", and trust the reading agent.

Privacy

This system stores your personal affairs as plain files. If you configure a git remote, it must be private. Mail OAuth tokens are gitignored by default; tracking them inside a private repo for multi-device sync is an explicit opt-in that setup walks you through with the trade-off spelled out. The optional sensitive areas (HEALTH.md, RECOVERY.md) are yours to delete during setup, and nothing in the system is ever summarized into shared or exported material.

Status & contributing

v0.1 — an open-source release of an idea that has been running daily in private. The structure and conventions are stable enough to drive every day; expect rough edges around setup ergonomics and the breadth of integrations. Issues, forks, and pull requests are welcome — especially integrations that keep the stdlib-only, zero-deployment property intact.

License

MIT © 2026 Phantivia




中文说明

一个"没有应用程序"的个人助理:数据是纯文本,运行时是任意 Coding Agent。

这是什么

你放弃过的每一个效率工具,问题都出在同一处:它是一个应用。得有人写界面、 养后端、维护集成,并决定你能拥有哪些功能。那个人一停手,你的数据就困死在他的 数据结构里。

ThereIsNoAssistant 把这件事反过来:这里没有应用程序。 只有一个装着 Markdown 的目录、一个 git 仓库,以及一套用自然语言写成的规则。真正的"智能"—— 解析邮件、提取截止日期、归档记录、汇报简报、起草回信——在运行时由你手边任意一个 coding agent 提供。

     你的数据                  规则                    运行时
   ────────────            ──────────              ──────────
   Markdown + YAML    +    AGENTS.md          +    Claude Code
   纯文本                  各区 README             Cursor
   git 历史                schemas                 Codex / 任意 agent
                           invariants              (随时可换)

这是对趋势的一个判断:coding agent 正在成为个人软件的通用运行时。 它能读懂 规范、在脑子里装下一整个文件树、遵守写好的纪律、调用 API。既然如此,最耐久的 "应用"根本不是代码,而是一个组织良好的文件夹,加上一份关于如何对待它的精确说明。

为什么是这个形态

零部署成本 没有服务器、容器、数据库、构建步骤,除了你本来就有的邮箱之外不需要任何 API key。把文件夹拉下来就能跑,没有任何东西需要你在凌晨三点抢救。
不绑定模型与厂商 运行时是可替换的。今天用 Claude Code,明天用 Cursor,后年用还没发布的东西。上面两段示例来自同一个仓库。产品下线不会让你的助理跟着报废。
完全可检查、完全属于你 助理"知道"的每一件事都是某个文件里的一行,可打开、可 grep、可 diff、可回滚。没有隐藏的向量库,没有黑箱记忆,不用求人给你导出按钮。
为多年使用而设计 结构由写下来的约定定义,而不是你跑不动的 schema migration。新增记录类型或整个新区域,都是一套有文档、agent 可执行的流程——这套系统本就打算让使用者自己长期扩展下去。
文本活得久 2005 年的 Markdown 今天照样能打开。十年的往来、决策与截止日期,会在任何具体工具(包括本项目)被遗忘之后依然可读。

一次会话长什么样

你在目录里打开 agent,说声早。它在回答之前先读你的档案、拉取邮箱、检查 git 远程、扫描任务与日历,然后直接告诉你今天真正要紧的事:

终端动画演示:用户输入问候,agent 输出今日截止、在跟的线索与未处理邮件。

演示会话,人名与数字均为虚构。

那份简报里没有任何东西是"配置"出来的:没有规则引擎,没有提醒对象,没有日历同步 产品。截止日期来自它几周前收纳的邮件,交叉引用(对得上 7/31、批准前别退课) 来自它当时写下的记录,[noise?] 标记来自它自己维护的跳过清单,而最后那个问题, 来自它注意到两件事撞在同一个晚上。

主要功能

  • 邮件收纳(不只是读取):Gmail 与 Outlook/Microsoft 365 客户端(纯标准库) 把新邮件抓进 inbox/,写入时已剥离 HTML/base64——250 KB 的营销邮件变成几百 字节的正文。Agent 随后分类、并入对应线程记录、提取隐含的截止日期、原件留底。 已知噪音发件人根本不会进入上下文。
  • 发信有硬门槛:可以替你起草,但发送脚本在你看过该封邮件的 dry-run 预览、并 亲手输入 CONFIRM SEND EMAIL 之前拒绝发出。一次授权仅对应一次发送,不能顺延、 不能由"看着不错"推断、agent 自己绝不能代填。起草纪律另外禁止替你做出承诺 (约会议、许诺时间与交付物),草稿里若有则逐条向你确认。
  • 自我维护的待办与日历:TASKS.md 与 CALENDAR.md 是没有 schema 的清单,由 agent 从邮件和对话中填充、两边保持同步、会话开始时汇报。所有存储时间戳一律 UTC 且显式标注,只在对你说话时才转成本地时间——笔记本跨时区也不会让某个 deadline 错位。
  • 有生命周期的记录:邮件线程、笔记(你的)、备忘(它的)、project(带工作 目录的长期事务,草稿、克隆的仓库、文献与进展记录放在一起)。每类都有 schema、 总索引条目和 active → archive 路径。归档永远需要你明确点头,agent 只能提议。
  • 历史迁移:通过 API 回拉多年邮件,或用自带的解包器处理 Outlook .pst/.ost 存档——先与你商定范围,绝不盲目全量导入。
  • 可选集成:Canvas 课程日历 feed;可选的健康/状态记录区,不需要的话在初始化 时直接删掉。
  • 让它值得信任的纪律:AGENTS.md 里的 invariants 短而绝对——每次操作都要汇报 并给出记录 id、绝不静默改文件、索引始终同步、不得擅自归档、动某个区之前先读该区 规则、不确定就问、每完成一次操作即提交推送。正是这些让你可以一周不管它,回来仍然 信得过它做了什么。

开始使用

⚠ 第一步是强制的:先脱离这个公开仓库

本仓库是公开的,而这套系统会把你的邮件、任务、个人记录提交进 git。直接 git clone 会让 origin 指向这里——一次习惯性的 git push 就会把你的 个人档案公开。所以在做任何别的事之前,删掉克隆下来的 git 历史,重开一份:

git clone https://github.com/Phantivia/ThereIsNoAssistant.git my-assistant
cd my-assistant
rm -rf .git          # Windows PowerShell: Remove-Item -Recurse -Force .git
git init

然后在你的 git 平台上建一个 private 仓库并推送过去(START.md Step 2 会 一步步带你做,agent 也被要求在写入任何个人内容之前先核验这一点)。

不要用 fork 的方式使用本项目——fork 同样是公开的,风险一致。要贡献代码 再 fork。

  1. 用你的 coding agent 打开这个目录(Claude Code、Cursor,或任何会读 AGENTS.md / CLAUDE.md 的 agent)。
  2. 打个招呼。 Agent 会发现系统尚未初始化,转入 START.md 逐步引导你完成: 个人档案与时区、私有 git 远程、邮箱 OAuth、可选的历史邮件迁移、可选的 Canvas 接入、以及保留哪些敏感区。每一步都先解释为什么再动手,可选项先征求你的意见, 且绝不经手你的凭据——授权都在你自己的浏览器里完成。
  3. 然后正常说话就行。 "处理一下 inbox"、"记一下……"、"这周有什么安排"、 "做个 review"、"帮我给房屋办公室起草一封回信"。使用手册见 MANUAL.md。

环境要求:一个 coding agent、git、Python 3.8+(Canvas feed 需要 3.9+)。 PST 解包器需要 Node。除此之外无需安装任何东西——整条邮件链路都是 Python 标准库。

目录结构

路径 作用
START.md 首次初始化引导(仅用于安装,之后不再需要)
AGENTS.md 地图与不变量——每个 agent 最先读的文件
MANUAL.md 写给你(人类)的使用手册
me.md 你的个人档案与长期偏好
people.md 事务往来中的人物背景
INDEX.md 所有记录的总索引
inbox/ 任意格式的原始输入,及收纳规则
active/ 追踪中的记录:emails/、notes/、memos/、projects/
active/TASKS.md 带截止日期的待办清单
active/CALENDAR.md 全局日历:事件、截止日期、周期性安排
archive/ 已完结记录,结构镜像 active/
attachments/ 被记录引用的二进制文件
scratch/ Agent 临时工作区,用于 clone 和下载(不进 git)
system/ Schema、邮件/时间纪律、工具、扩展约定

每个区在自己的 README.md 里持有详细规则,agent 被要求在该区动手前先读那份规则。 AGENTS.md 刻意保持精简——它每次会话都要加载,所以只放地图和不变量。

扩展

这套系统就是设计给使用者自己长起来的。让 agent 加一个记录类型、一个顶层区域或一条 新工作流,它会遵循 system/README.md 里的既定流程:先提方案给你确认,再建 schema、 镜像 active/ + archive/ 目录、补索引区块、更新手册,并在同一个原子提交里迁移 已有内容。核心原则是文本优先于数据库:先考虑"写一份好文档",再考虑"加一个记录 类型",并且信任读它的那个 agent。

隐私

这套系统以纯文件存放你的私人事务。如果你配置 git 远程,它必须是私有的。邮件 OAuth 令牌默认不进 git;若要在私有仓库里跟踪它们以实现多设备同步,那是初始化流程 中会把利弊讲清楚、由你显式选择的选项。可选敏感区(HEALTH.md、RECOVERY.md) 是否保留由你在初始化时决定,并且系统中的任何内容都不会被摘要进对外共享或导出的材料。

状态与贡献

v0.1——一个已在私下每天运行的想法的开源版本。结构与约定足以日常驱动,但在安装 体验和集成广度上还有毛边。欢迎 issue、fork 和 PR,尤其欢迎在保持"纯标准库、零部署" 特性前提下的新集成。

许可

MIT © 2026 Phantivia

About

A personal assistant that is just text files — and a coding agent as its runtime. Zero deployment, Markdown + git, mail/tasks/calendar, model-portable.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages