From laid off to landed. 从被裁,到上岸。

An open-source, local-first multi-agent war room that runs your job search like an operation — while your data never leaves your machine. 一套开源、local-first 的多智能体求职作战系统——把找工作打成一场有章法的战役,数据永远留在你自己的电脑上。

📦 Project项目 joblander — agents for sourcing, scoring, resumes, briefs & reports—— 扫机会、评分、简历、简报、战报的 Agent 班子
Status状态 Battle won — ran a full search end to end, now open source仗打完了 —— 完整跑完一整场求职,现已开源
Code代码 github.com/Shuailong/joblander ↗ — Apache-2.0, 319 tests, eval harness—— Apache-2.0,319 个测试,带评测
🔒 Data数据 Local-first — code is public, your workspace stays on your machineLocal-first —— 代码开源,工作区留在你本机
🌐 This domain这个域名 The story, the design notes, and where the code lives故事、设计笔记,以及代码在哪
💼 Author作者 LinkedIn ↗ — landed; happy to talk shop about agents & evals—— 已上岸;聊 Agent 与评测随时欢迎

I got laid off in July 2026. Instead of refreshing job boards at 2 a.m., I built my search a war room — agents that scout roles, score them honestly against my real track record, forge tailored resumes, and brief me before every interview.

2026 年 7 月,我被裁了。与其凌晨两点刷招聘网站,不如给求职建一间作战室——Agent 帮我扫岗位、对照真实履历诚实打分、锻造定制简历、每场面试前递上情报简报。

It ran my entire search. I start a new job this month. So the battle's won, and as promised — it's yours now.

它跑完了我整场求职。这个月我入职新公司。仗打完了,那就照约定——它现在是你的了

ai·layoff·methree words that read like bad news. This site is the reply.这三个词连起来像一条坏消息。这个网站,是我的回答。

Take it for a run.拿去跑跑看。

⭐ Get it on GitHub⭐ 上 GitHub 拿走

Want a heads-up when the hosted version ships, or just want to say hi?想在托管版上线时收到通知,或者只是想打个招呼? Email me →给我发邮件 →

Free either way. If it saved you a weekend,不管怎样它都免费。如果它帮你省下一个周末, ❤️ sponsor me❤️ 赞助我 or,或 ☕ buy me a coffee →☕ 请我一杯咖啡 →

What's inside系统亮点

Six rooms, one campaign.六个房间,一场战役。

Command Center指挥中心指挥中心Command Center

Open the door, know where you stand: the next four days of interviews, today's decisions, and a diary drafted from what actually happened — not what you wish had.

推门就知道战况:未来四天的场次、今天该拍板的事,以及一份从真实事件里长出来的日记草稿——不是愿望清单。

Leads新机会新机会Leads

Scans your inbox and job boards; paste any JD link and a scout agent parses it, scores fit against your achievement bank, and queues it for your yes or no.

扫邮箱、扫职位站;丢一条 JD 链接进来,侦察 Agent 解析岗位、对照你的弹药库打匹配分,排好队等你说要不要。

War Room作战室作战室War Room

Every company in play on one board — drag cards through stages, edit inline in table view, two-way sync with your Notion tracker.

所有战线一张看板:拖卡片换阶段、表格原位编辑,和 Notion 追踪表双向同步。

Arsenal弹药库弹药库Arsenal

Your STAR stories are the single source of truth. A resume agent forges a per-company PDF from them — versioned, with bullets on exactly what changed and why.

STAR 素材是唯一事实源。简历 Agent 据此为每家公司锻造定制 PDF——版本化留档,附上「改了哪、为什么」。

Staff Office参谋部参谋部Staff Office

A capability radar against the JDs you actually target, morning briefs, daily and weekly reports — with a notes section that stays in your own hand.

对照目标 JD 的能力雷达,晨报、日报、周报——并且永远留一栏给你亲笔写的手记。

Drill Ground练兵场练兵场Drill Ground

Random algorithm problems with a built-in Python judge. Warm up your hands before the whiteboard does it for you.

随机算法题 + 内置 Python 判题器。白板考你之前,先自己热热手。

⚖️House rules四条规矩

The constraints are the product.这些约束本身就是产品。

Agents propose. You decide.Agent 只提案,人来拍板。

No message ever leaves for a real human on your behalf. Drafts, yes — the send button is yours. No auto-apply, ever.

任何发给真人的消息都不会替你发出。可以起草,发送键永远在你手里。绝不自动投递。

Everything is an event.万事皆事件。

Interviews, emails, transcripts, edits, decisions — each company is an append-only file you can audit later.

面试、邮件、转写、修改、决策——每家公司一份只增不删的档案,全程可回溯。

No inflated scores.反虚高。

Fit is measured against your actual track record, not wishful keywords. Where you're weak, it says weak — before the interviewer does.

匹配分对照你的真实履历打,不靠关键词自我感动。哪里是短板就标短板——赶在面试官指出来之前。

Local-first.Local-first。

The code is a public repo. The workspace — resumes, transcripts, pipeline — lives outside it on your machine, and is never committed.

代码是公开仓库;工作区——简历、转写、pipeline——建在仓库之外、留在你本机,永不提交。

🧭Why this exists为什么做这个

Getting laid off hands you two problems: the search itself, and the shapeless days it comes wrapped in. A pipeline you can see beats an anxiety you can't. joblander gives the search edges — stages, files, briefs, reports — so each morning starts with what needs deciding, not where do I even look.

被裁塞给你两个难题:求职本身,和包裹着它的一段没有形状的日子。看得见的 pipeline,胜过看不见的焦虑。joblander 把求职做成一件有棱有角的事——阶段、档案、简报、战报——每个早晨从「今天要拍板什么」开始,而不是「我该从哪看起」。

There's a second bet. Its builder interviews for AI engineering roles, so the tool is built the way you'd build at work: a crew of agents, event-sourced state, proposal-and-approval flows, honest evals. The job search became the demo.

还有第二层打算。作者面的是 AI 工程岗,所以这套工具就按上班的标准造:多智能体分工、事件源状态、提案-批准流、诚实的评测。求职本身,成了最好的 demo。

The most convincing system is the one you built because you truly needed it. 最有说服力的作品,是你因为真的需要,而造出来的那一个。

🏗️The architecture架构

Events in, rules route, agents propose, a sentinel screens, you approve — and the approval is an event too.事件进,规则派工,Agent 提案,宪兵过检,你拍板——而批准本身,也是一条事件。

Ingestion · gateways only perceive感知层 · 只感知,不判断

📧 Gmail pollerGmail 轮询read-only, always永远只读 🎙️ Transcript inbox转写收件箱 📅 Calendar poller日历轮询 🗂️ Notion diff-pullNotion 差量回流tracker edits land as events追踪表改动落为事件 🕷️ Scraper / paste-in抓取 / 贴入 Clock时钟daily & weekly ticks每日 · 每周定时
everything lands as an event first一切输入,先落事件

Orchestration core · deterministic, no LLM in control flow编排核心 · 纯代码控制流,LLM 不掌舵

🗄️ Event Logappend-only · single source of truth只增不删 · 唯一事实源 ⏱️ Daemon8 resident jobs · never nags, degrades quietly8 个常驻作业 · 永不催办 · 静默降级 🖱️ On-demand随手触发UI buttons & CLI · tracked tasks页面按钮与 CLI · 任务化追踪
dispatches stateless workers, context assembled per run派发无状态 worker——每次运行按需装配上下文

Capability layer · 7 domains — a new feature is a new workflow, never a new agent能力层 · 7 个能力域——新功能是新编排,不是新 Agent

🔭 Scoutsignals → scored leads · 3-tier dedup侦察 · 信号→评分线索 · 三级查重 🔎 Researcherone ReAct diligence loop — seeded or zero-input; every claim dated & cited尽调 ReAct 单循环——可喂料可零输入 · 证据带来源与日期 🧮 Analystpolicy-as-code: functions decide, LLM narrates军师 · 策略即代码——函数下判断,LLM 只转述 🗓️ Coordinatorslot rules · gap reconciliation · confirm-to-write调度 · 时段规则 · 排期对账 · 确认制写入 🎯 Prepcontext → ammo, per interview round参谋 · 上下文→弹药,按轮次定制Brief · deep-think简报 · 深思考Resume forge · ReAct简历锻造 · ReActCoach · chat教练 · 对话 ✍️ Scribeintake states facts, review judges — split on purpose书记 · 录入陈述事实,复盘才下判断 🔌 LLM runtimeLLM 运行时your own key · 3 model tiers · reasoning-effort dial自带 key · 模型三档 · 思考力度按需
artifacts & change proposals — no agent ever writes directly产物与变更提案——任何 Agent 都不许直接写
🛡️ Sentinel · the 7th domain, cross-cutting every exit第 7 个能力域 · 宪兵,横切一切出口 rules layer: auditable wordlists, unit-tested, seeded-violation P/R regression · judgment layer: an LLM checklist watching narrative drift across interviews — the writer never judges its own work规则层:可审计词表 + 播种违例 P/R 回归;判断层:LLM 按清单盯跨场次叙事漂移——写的人不能自己当裁判
screened proposals queue for review过检的提案,排队待批

The gate闸门

👤 YOU approve · edit · reject — every message to a human is sent by a human批准 · 修改 · 否决——发给真人的消息,永远由真人发出
approved writes only — and the approval is logged as an event批准了才写——审批记录本身也落为事件

Memory & outputs · local workspace记忆与产出 · 本地工作区

🗃️ Company files公司档案event-sourced, auditable事件源 · 可回溯 🎯 Profile & achievement bankProfile 与弹药库single source for every resume, versioned per company一切简历的唯一素材源 · 按公司版本化 📖 Playbooklessons feed the next brief上场的失分,进下场的简报 🧪 Evals评测golden sets · LLM-as-judge · an LLM-as-user walks the UI金标集 · LLM 当裁判 · 再派一个 LLM 扮用户走全站 🗂️ Notion & CalendarNotion 与日历written only after approval批准后才写回
Every run assembles its context from this memory — the next proposal carries the whole history.每一次运行都从这里装配上下文——下一个提案,带着全部历史。

Not a vision diagram — the loop above is the one that ran the author's own search, start to offer.这不是愿景图——上面这个循环,跑完了作者本人从开局到 offer 的整场求职。

🚀Run it yourself自己跑起来

Python 3.10+, dependencies kept thin, web UI server-rendered, bound to 127.0.0.1 only. Bring your own LLM key.

Python 3.10+,依赖极薄,Web UI 服务端渲染,默认只绑 127.0.0.1。自带 LLM key 即可。

git clone https://github.com/Shuailong/joblander.git
cd joblander
cp config.example.yaml config.yaml     # point it at your private workspace指向你的私有工作区
pip install -e .
joblander onboard                      # config health check + scaffold配置体检 + 建脚手架
joblander web                          # → http://127.0.0.1:8899

The workspace (resumes, transcripts, pipeline) is created outside the repo and never committed — see the Local-first rule above.工作区(简历、转写、pipeline)建在仓库之外、永不提交——见上面的 Local-first 规矩。

🗺️Roadmap路线图

Local web UI + CLI — all six rooms live本地 Web UI + CLI——六个房间全部可用
Agent crew: scout, assessor, interview-brief writer, resume customiserAgent 班子:侦察、评估、面试简报、简历定制
Integrations: Notion two-way tracker, Gmail (read-only), Calendar集成:Notion 双向追踪、Gmail(只读)、日历
Open-source release of the engine引擎开源发布live on GitHub, Apache-2.0—— 已上 GitHub,Apache-2.0
One-command deploy — this domain becomes the hosted demo一键部署——这个域名跑起托管版— only if enough people want it; self-hosting works today—— 看有没有足够多人真的想要;自部署今天就能跑
Guided setup so non-engineers can land too引导式安装,非工程师也能十分钟上手

💬Questions常见问题

Will it apply to jobs for me?它会自动帮我投递吗?

No — by design. It scouts, scores, drafts and preps; submitting an application and sending a message stay human acts. Recruiters can smell automation, and your name deserves better. This rule is load-bearing.

不会,而且是刻意设计。它负责侦察、打分、起草、备战;提交申请和发出消息永远是人的动作。招聘方闻得出群发的味道,你的名字值得更好的对待。这条规矩是承重墙。

Is my data safe?我的数据安全吗?

The repo ships code only. Everything personal lives in a separate local folder that git never sees. LLM calls go to whichever provider you configure with your own key — read their terms; nothing else leaves your machine.

仓库里只有代码。所有个人数据放在 git 看不见的独立本地目录。LLM 调用只发给你自己配置、自己掏 key 的服务商——记得读他们的条款;除此之外没有任何数据离开你的电脑。

I'm not an engineer. Can I use it?我不是工程师,能用吗?

Today it takes a terminal and a Python install. A hosted, guided version is on the roadmap — that's exactly what this domain is reserved for.

现在需要会开终端、装 Python。托管版和引导式安装在路线图上——这个域名就是给它留的。

Why the name?为什么叫 ailayoff.me?

Read it three ways: ai·layoff·me, a plain bad-news sentence; "AI laid off me", the era we're in; or AI + layoff + me — the three ingredients this project is made of. The reply to all three readings is the same: land well, then leave the parachute for the next person.

三种读法:ai·layoff·me,一句平铺直叙的坏消息;"AI laid off me",我们正身处的时代;或者 AI + 被裁 + 我——这个项目的全部原料。三种读法的回答是同一个:好好落地,然后把降落伞留给下一个人。