Skip to content

passno 开发计划 ​

设计见 docs/design.md。每完成一项就更新这里的状态。

需要你本人在场 / 你来决定(优先处理) ​

#事项什么时候需要状态
1决定 Secret Key 是否默认开启。2026-11-16 定:默认开启;平时用 Touch ID / Face ID / Apple Watch 解锁;Secret Key 经 iCloud 钥匙串在苹果设备间同步。详见 design.md 第 4 节—已定
2GitHub 仓库:2026-11-16 已建私人仓库 https://github.com/devfchen/passno 。以后要改成公开,由用户决定—已定
3测试样本:2026-11-16 已改用合成样本,见 tests/fixtures/import/,由 tools/fixtures/gen_import_fixtures.py 生成,开发先用这些。以后可选:从 1Password 8 的测试库导出真实 .1pux、从 Apple 密码 App 导出 CSV,放在 ~/passno-samples/(不进仓库),用来核对 fixtures README 里列出的"没跟真实导出核对过"的几点导入器做完后合成样本已有,真实核对可选
4Apple 开发者账号:已有付费账号,team QKPMA8N9LJ。登录方法见 ~/code/github/infra/network/cloud-accounts.md。本机钥匙串里已有 Developer ID Application: Feng Chen (QKPMA8N9LJ) 和 Apple Development 证书。开发时还要配几样东西:App ID、keychain-access-groups、App Group,以后的 AutoFill 扩展还要 autofill-credential-provider 权限。agent 可以用 Xcode 自动签名,或经 agent-browser 登录开发者网站配置;钥匙串弹出"允许"框时才需要你在场阶段 2(Touch ID)前账号已有,配置待做
5浏览器商店开发者账号:Chrome Web Store、Firefox AMO、Edge。开发阶段可以加载未打包的扩展,不急发布前待做
6Windows 代码签名证书。做 MSIX 和通行密钥插件时要阶段 8(Windows)待做
7主观验收:管理界面、扩展弹窗、审批弹窗、iOS App 和自动填充好不好用阶段 3、4、5、6 结束时—
8真机测试(书房 iPhone 12 Pro):只在模拟器测不了时才用,比如 Face ID 真机行为、其他 App 里的自动填充。每次启动 UI 自动化都要在手机上输锁屏密码,所以要你在场阶段 6,按需按需

平台顺序与测试环境(2026-11-16 定) ​

  1. 先做 macOS 和 iOS,都在本机测。 iOS 默认用模拟器。
  2. 下一步做 Windows,在本机的 Win11 虚拟机上测。
  3. Linux 和 Android 往后放。

核心库的单元测试从一开始就在 CI 里同时跑 macOS 和 Linux,成本低,能防止写出只能在 Mac 上编译的代码。Windows CI 到阶段 8 再加。

平台怎么测
macOS App(Tauri)本机运行。界面自动化用 agent-desktop skill(读无障碍树),逐步读屏、判断、操作、读回核对
浏览器扩展自动化测试用 Playwright 自带的 Chromium,加载未打包的扩展,用临时 profile 和本地靶场页面。绝不把开发中的扩展装进共享的前台 Chrome,那里有用户真实的登录状态。Safari 扩展在本机 Safari 里测
iOS模拟器 sim:iPhone 17 Pro,只用 agent-device,经 phone 命令(skill ios-testing)。每一步:读屏 → 判断 → 一个操作 → 读回核对;每次等待不超过 10 秒;不写写死流程的 UI 测试脚本
iOS 系统自动填充在模拟器里:设置 → 通用 → 自动填充与密码,打开 passno,然后在 Safari 里打开本地靶场页面验证。Face ID 用模拟器的"已录入 / 匹配面容"来模拟
WindowsWin11 ARM64 虚拟机(ssh host win11),桌面和 glass 项目共用。照 ~/code/github/glass/tools/windows-e2e/vm-run.sh 的做法:在 Mac 上用 cargo xwin 交叉编译、复制到虚拟机、在桌面会话里跑。必须先拿虚拟机锁(C:\glass-dev\vm.lock,和 glass 共用),只动 passno 自己的文件和进程

里程碑 v0.1:第一个可用版本(目标 2026-11-16 白天交付) ​

用户要求先交付一个能用的版本,再迭代。v0.1 只在 macOS 上做,范围如下:

工作线内容分支
coreCargo workspace、许可证;passno-model、passno-crypto、passno-vault(本地目录、单用户、操作日志 + 快照、主密码 + Secret Key 解锁);pn CLI(init / unlock / add / edit / list / search / show / gen / totp / import / doctor / agent-help),按 design.md 第 12.2 节做到对 agent 友好feat/core
genpassno-gen(随机字符、口令短语、PMR 网站规则、熵值)、passno-totp、passno-match(PSL / eTLD+1)feat/gen
desktopTauri v2 + React + Tailwind 的 macOS App,按 docs/ui/style.md 做:首次设置(主密码 + Secret Key + 应急套件)、解锁、条目列表 / 搜索 / 详情、新建 / 编辑、生成器弹窗、导入向导、锁定。先用模拟数据,再接到核心feat/desktop
importpassno-import:1pux、Apple CSV、1Password CSV,加迁移报告;用 tests/fixtures/import/ 断言feat/import

v0.1 不做(留给 v0.2 以后):后台进程 passnod、Touch ID、浏览器扩展、agent 授权和 MCP、同步、共享、iOS、Windows。

v0.1 的安全底线:

  • CLI 和 App 在进程内直接调用核心库。
  • 明文只在本人操作时显示:pn show --reveal 只在交互式终端里生效,非终端环境一律拒绝,并提示"agent 访问在 v0.2 提供"。

分工方式: 每条工作线由一个 agy 在独立的 git worktree(../passno-wt/<名字>)里做,提交到自己的分支。协调者(Claude)负责审查、跑测试、合并到 main,并更新本表的状态。

阶段 ​

阶段 0:仓库骨架 ​

  • Cargo workspace,所有 crate 先建空壳。
  • CI:fmt / clippy / test,macOS 和 Linux 都跑。
  • 加 LICENSE-APACHE、LICENSE-MIT、README、docs/threat-model.md。

阶段 1:核心库 + CLI(单用户、本地目录) ​

  • passno-model、passno-crypto(Argon2id、HKDF、XChaCha20-Poly1305、Ed25519、X25519/HPKE)。
  • passno-vault:
    • 操作日志、快照、HLC 合并。
    • 纪元和成员日志的格式现在就定好,先只有一个成员。
  • passno-gen、passno-totp、passno-match。PMR 数据收进仓库,用脚本更新。
  • passno-import:OnePux、OnePasswordCsv、AppleCsv,并给出迁移报告。用 tests/fixtures/import/ 里的样本,按 manifest.json 断言。
  • pn CLI:init / unlock / add / edit / list / search / gen / totp / import / doctor。
    • 从第一天起就按 design.md 第 12.2 节做:三层帮助(--help、子命令帮助、help --json)、pn agent-help、全部支持 --json、固定退出码、三段式错误信息、不是终端时不交互。
    • 测试:在非 TTY 环境下把每条命令都跑一遍,确认没有一条会卡住等输入;用快照测试固定 help --json 的输出。
  • 测试:加解密往返、篡改检测、合并、各导入器的映射;用 proptest 测解析器。
  • 核心 crate 不依赖任何平台 API,以后 iOS 经 UniFFI 直接调用。

阶段 2:后台进程 passnod(macOS) ​

  • IPC:Unix socket(0700 目录),PeerVerifier 的 macOS 实现(audit token + 代码签名校验,Team QKPMA8N9LJ)。
  • Unlocker:
    • Password 实现。
    • macOS 安全飞地实现:Touch ID 或 Apple Watch。
    • 按 design.md 第 4 节的规则,在规定情况下强制输主密码。
  • SecretKeyStore 的 macOS / iOS 实现:iCloud 钥匙串(可同步)。另有应急套件的导出和导入。
  • 自动锁定:空闲、睡眠或锁屏、最长会话时长。内存方面:zeroize、锁内存、防调试、关 core dump。
  • CLI 改成连后台进程。
  • trait 和协议照跨平台来设计;Windows 和 Linux 的实现留到阶段 8、9。

阶段 3:macOS 管理 App(Tauri v2) ​

  • 界面严格按 docs/ui/style.md 来做:条目管理、生成器、导入向导、安全检查、设置。
  • 审批弹窗:给阶段 5 用。
  • 菜单栏图标:锁定、一键撤销全部授权。
  • 签名和公证:用 Developer ID。
  • App 自带 CLI: 安装包里带 pn、passnod、passno-nmhost;第一次启动时安装 /usr/local/bin/pn 软链,用户拒绝就退回 ~/.local/bin;passnod 用 SMAppService 注册成登录项。详见 design.md 第 12.1 节。
    • 验收:从全新安装开始,新开一个终端直接运行 pn doctor,结果全部正常;App 升级后 pn --version 跟着变。
  • pn agent install-skill:给 Claude Code 和 Codex 安装使用说明。
  • 完成后要做主观验收(需要人做的第 7 项)。

阶段 4:浏览器扩展(macOS 上的 Chrome,然后是 Safari) ​

  • passno-nmhost,加上 macOS 上各浏览器的宿主清单安装程序。
  • 扩展和后台进程的配对协议。
  • 扩展(MV3 / TypeScript):
    • 表单识别。
    • 页面内菜单(防点击劫持)。
    • 填充用户名、密码和 TOTP。
    • 提交后提示保存或更新。
    • 注册和改密码表单旁给生成的密码。
    • HTTP Basic 认证。
  • Safari 扩展:放在 macOS App 里打包,消息经 App 扩展转给后台进程。
  • 测试:本地靶场页面,覆盖各种表单、iframe、点击劫持场景;用 Playwright 自带的 Chromium 跑,Safari 部分手动加 agent-desktop 跑。

阶段 5:agent 访问(macOS) ​

  • pn agent enroll、授权引擎(绑定精确命令或接口)、哈希链审计日志。
  • pn run、本地 HTTP 注入代理、ssh-agent、经扩展代填网页。
  • pn mcp:只返回授权编号和执行结果。
  • 用 Claude Code 和 Codex 在本机实际跑一遍。

阶段 6:iOS App + 系统自动填充 + iCloud 同步 ​

  • 先做技术验证(spike): 用 Tauri v2 的 iOS 支持复用桌面端的 React 界面,同时把 Swift 写的 AutoFill 扩展(.appex)嵌进 Tauri 生成的 Xcode 工程,还要验证签名能过。验证不通过,就把 iOS 主 App 改用 SwiftUI。两种方案的界面都按 docs/ui/style.md 做。macOS 上把 AutoFill 扩展嵌进 Tauri App 用的是同一套办法,一起验证。
  • iOS 上没有后台进程,核心库经 UniFFI 在进程内运行。主 App 和 AutoFill 扩展通过 App Group 共用保险库目录和缓存。
  • AutoFill provider(iOS 和 macOS 都要):
    • 填密码和 TOTP。
    • 通行密钥的创建和使用。
    • 保存时调用生成器。
  • CXF 导入: 用 ASCredentialImportManager 从 Apple 密码导入,包括通行密钥。映射逻辑在 Rust 核心里。
  • 同步: 实现 SyncTransport 的 Folder 版本,iCloud Drive 是首选。Mac 和 iPhone 之间用 iCloud 钥匙串同步 Secret Key,用 iCloud Drive 同步保险库。
  • 测试: 全部在 sim:iPhone 17 Pro 上做,用 phone;真机只在必要时用(需要人做的第 8 项)。

阶段 7:家庭共享 + 更多同步方式(仍属于 v1) ​

  • 共享:
    • 邀请、核对指纹或扫二维码、角色。
    • 移除成员时换纪元,并提示轮换密码。
    • 防回滚告警。
  • SyncTransport 再加 Git、Syncthing、Dropbox 的目录实现。
  • 加设备:扫二维码或输入 Secret Key。
  • 测试:模拟多设备并发写、回滚、伪造签名、移除成员。还要用两个模拟器加本机 Mac 实际跑一遍。

阶段 8:Windows(Win11 虚拟机) ​

  • 命名管道 IPC,PeerVerifier 的 Windows 实现(客户端 PID + Authenticode)。
  • Unlocker 的 Windows Hello 实现,SecretKeyStore 的 Windows 实现。
  • 写 passno 自己的 tools/windows-e2e/(照 glass 的 vm-run.sh 做,共用虚拟机锁)。
  • Tauri 的 Windows 构建、MSIX、代码签名(需要人做的第 6 项)。
  • 浏览器扩展:native messaging 宿主写注册表。
  • 通行密钥插件(Windows 11 插件 API)。
  • CI 加上 Windows。

阶段 9:以后 ​

  • Linux(Polkit 解锁、SO_PEERCRED、Secret Service)。
  • Android。
  • 手机推送审批。
  • Firefox 和 Edge 的商店上架。

文档对应提交 80b7c2d · 由仓库 docs/ 自动生成