npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

career-asset

v0.3.0

Published

把工作痕迹蒸馏成带证据的职业资产:本地优先、多宿主编程助手插件

Readme

career-asset

把你的工作痕迹蒸馏成带证据的职业资产:每周 10 分钟,攒出一份能站得住脚的成果库, 需要时派生简历条目、述职稿和面试故事。

本地优先。 不联网、不建账号、不上传。所有文件都在你自己指定的目录里,可以整个拷走。

为什么

你可能也有过这种经历:实习时用文档记每天学了什么,越写越敷衍,最后只剩一摊流水; 实习结束想说清自己的成果,却说不出来;秋招春招里,那段实习只发挥了它真实价值的三四成。

问题不在意志力,在录入成本。这个工具不要求你写字——它读你已有的痕迹(git commit), 把「改动」翻译成「影响」,而你要做的只是判断它写的那句话对不对。

安装

把下面这段交给你的 agent,安装和接入都由它完成:

帮我安装并接好 career-asset(需要本机有 Node 20+ 和 git):
1. 全局安装:npm install -g career-asset
2. 用 `npm root -g` 定位安装包里的 skills/career-asset,把整个目录(含 references/)装进
   你当前宿主的全局 skills 目录。不要只复制 SKILL.md;不要写进任何公司代码仓库。
3. 跑 `career-asset skill check`:确认 SKILL.md 和两份 references 都在;失败就停下告诉我。
4. 如果宿主有 skill / 插件清单,确认它已经能加载 career-asset。
5. 跑 `career-asset --version` 和 `career-asset --help`,把版本和可用命令告诉我。
6. 最后告诉我:资产目录建议放哪、第一次使用我需要提供哪些信息。

装好后你不需要记命令——把下面的提示词整段交给它。

用法:把提示词交给你的 agent

这几段提示词只保留任务参数和完成标准,完整流程以 skill 为准。每次任务先跑 career-asset skill show,让 agent 按输出的 SKILL.md 和 references 执行;不要凭提示词摘要或聊天记忆代替 skill。 skill show 读的是 npm 包里随 CLI 安装的那一份,不依赖宿主里可能过期的副本。 如果宿主没有提问控件,让 agent 退回文本逐条问,不要默认确认,也不要把关闭 / 超时当成选择。

第一次使用

用 career-asset 帮我建资产库并跑第一次采集。
- 资产目录:<你的路径>,不要放在公司代码仓库里;我还没给路径就先问我,不要替我选。
- git email:<[email protected]>
- 要采集的仓库:<~/work/proj>
- 目标岗位:<backend>
- 脱敏词:<公司名 / 内部模块名 / 库表名;没有就写“无”,不要把它登记成词>

开始前先跑 `career-asset skill show`,按输出的 SKILL.md 和 references 执行;
不要凭这份提示词或聊天记忆代替 skill。

完成标准:
- init / collect 成功;失败把 stderr 原样给我,不要猜原因。
- 给我最多 3 条候选,每条先摆证据(40 位全 sha、subject、改动文件、关键 file:line、机制与权衡),
  再逐条让我确认 / 改写 / 丢掉。
- 我选完再落盘,回显 entry id 和路径,最后 validate。
影响、意义、风险判断标成 inferred;没有证据的数字不要写。

init 会检查资产目录是否落在某个 git 工作树里;落在里面会直接拒绝,不写指针。

每周提炼

用 career-asset skill 做本周蒸馏。

开始前先跑 `career-asset skill show`,按输出的 SKILL.md 和 references 执行;
不要凭这份提示词或聊天记忆代替 skill。

完成标准:
- 先判断该不该提炼;不该就告诉我下次时间。
- 该提炼就给我最多 3 条候选,每条先摆证据(40 位全 sha、subject、改动文件、关键 file:line、
  机制与权衡、claim_class、score_note),再逐条让我确认 / 改写 / 丢掉。
- 我选完再落盘,回显 id 和路径,最后 validate。
这周没有能立住的成果就直说,不要凑数。没有证据的数字不要写,inferred 不要放进任何视图。

出简历 / 述职

用 career-asset skill 生成<简历 | 述职>视图,只生成我指定的那一种。

开始前先跑 `career-asset skill show`,按输出的 SKILL.md 和 references 执行;
不要凭这份提示词或聊天记忆代替 skill。

完成标准:
- 先 validate;有阻塞先列给我,别渲染。
- 简历:先让我确认入选 / 换下的条目,再 state 和 render;述职:直接汇总 achievement + headline。
- 渲染前做脱敏检查;角色归因和数字先让我确认。
- 最后给我输出路径和每条用的证据。

定时采集(可选)

用 career-asset skill 生成每周一 09:00 的定时任务配置,只跑 collect。

开始前先跑 `career-asset skill show`,按其中的调度边界执行;不要现在替我跑 collect。
把配置内容、安装步骤和卸载方法告诉我。

加新仓库

以后有新项目,不必重跑 init,也不用记流程——把路径给 agent,或者自己跑:

career-asset repo add ~/work/new-project
career-asset repo list
career-asset repo remove ~/work/old-project   # 只改配置,不删本地目录

子目录会归到仓库根,worktree 归并到主工作树;submodule 不会从父仓库递归采集,需要时单独加入。

确认这一步

每条候选都会先在对话里摆出证据(40 位 sha、commit subject、改动文件),再出现一个选择框: 确认 / 改写 / 丢掉。

  • 证据先于选择框。 框里只放决定,不放 sha;没看到证据的那次点击不算确认。
  • 没有「全部确认」,也没有默认选项。 关掉、超时、没选,一律按没确认处理。
  • 改写用你自己的措辞。 可以挑一个备选说法,也可以直接说你会怎么讲。 confirmed 的含义是这句话你敢在面试里说。
  • 选完立刻落盘。 只有 entries/ 里出现条目、并回显 id 和路径,才算确认完成。

选 6 条上简历、勾脱敏词时也是同一套:先摆入选和换下的理由,再让你选。

claim 写什么

一句话里至少要有:角色 + 技术机制 + 约束/权衡 + 可验证结果。比如「作为订单网关核心开发, 把三处订单校验收敛到网关,用 Redis Lua 原子扣减 + 本地缓存兜底,消除并发超卖与口径不一致的资损风险」。 角色要具体到能看出你的贡献,归因词(负责人 / 主导 / 牵头)和量化数字都要先经你确认。

只写「优化了查询」「重构了校验」的,是 commit 的中文改写,不算成果。技术机制必须能从 git show 的 diff 里指出来;单条小 commit 最多进 achievement,不进 headline。 没有证据的数字不要写,影响和风险判断要先经你确认。

四态

| 状态 | 含义 | |---|---| | raw | 机器采来的原料,还没被人看过 | | achievement | 你确认过的成果,一句话 + 证据 | | headline | 当前这版简历优先入选的那几条,上限 6 | | archived | 被合并或淘汰的,留着能追溯,但不占注意力 |

headline 满了只能合并或换下一条,不许扩容。简历只有一页;能无限长大的「成果库」 最后一定会退化成一堆没人看的流水。反过来,可入选的成果少于 4 条时 validate 会提醒, 但那只是提醒——先继续攒,不要为了凑数写没证据的条目。

述职(review)汇总全部 achievement + headline,按工作线分组,不受 6 条限制。

证据三分类

| 类别 | 含义 | 能进简历吗 | |---|---|---| | proven | 仓库里能证明的事实(sha、改动文件、时间段) | 能 | | confirmed | 你本人确认过的判断 | 能 | | inferred | AI 的推断 | 不能,必须先经你确认 |

没有证据支撑的百分比和倍数会被 validate 拦下来。宁可写定性描述,不要编数字。

脱敏与弃选

  • 脱敏词表(公司名、内部模块名、库表名)用 career-asset redact --add <词> 维护。 条目或视图命中词表时,validate 和 render 直接阻塞;词表为空而已经有条目时会提醒。
  • 名额满了而丢掉的方向,用 career-asset skip --direction <名> --reason <原因> 记一行。 下个季度还记着它,才知道要不要捡回来。

定时的边界

定时任务只允许跑 collect。蒸馏、确认、合成、渲染必须有人在场——夜里无人值守生成的 只会是一堆没人确认过的推断,正是这个工具要避免的东西。

本地审计前端

web/ 里有一个本地审计页:左侧是 视图 → 条目 → 证据 → commit 的链路树,中间是条目详情、 证据和受控写入,右侧打开资产根内文件的对应行。确认、改写、改状态、脱敏和渲染都通过 /api/action 调 career-asset CLI,页面本身不写资产文件。

随 npm 包安装的版本直接跑:

career-asset ui              # 默认 127.0.0.1:4317
career-asset ui --port 5000  # 改端口

启动前先让 CLI 找得到资产目录:已经有 ~/.career-asset/pointer.json 就不用管,否则用 CAREER_ASSET_HOME 指定存放指针文件的家目录(不是资产根本身)。服务启动后会打印一条带 token 的 URL, 打开它即可;token 存在页面的 sessionStorage 里,重启服务后要重新用新 URL 打开。

  • 只监听 127.0.0.1,不联网:页面不加载外部字体、图标、脚本或 telemetry。
  • 读与写都经过 CLI:/api/inspect 调 career-asset inspect --json,写入走 /api/action; 服务端不解析、不修改 entries/ 或 profile.yml,journal 也由 CLI 自己写。
  • 主包只带 web/dist 和 web/dist-server;web/src、web/server、测试和 devDependencies 不进包。 prepack 会在发布前跑 npm run build:web 重建它们。

在仓库里改页面时,先构建再启动:

cd web
npm install
npm run build
npm start

开发时开两个终端:

cd web
npm run dev:server   # 终端 1:/api/*,默认端口 4317
npm run dev          # 终端 2:Vite 页面,默认 5173

打开服务打印的 Vite URL。默认用仓库里的 bin/career-asset.mjs 调 CLI;要指向别的安装就设 CAREER_ASSET_BIN(.mjs / .cjs / .js 用当前 node 执行),都没有时才回落到 PATH 里的 career-asset。接口细节与已知边界见 web/README.md。

开发

npm install
npm test          # 单元 + 集成
npm run test:e2e  # 端到端

实现计划与已知待办见 TODO.md。

发布

推送 v* tag 会触发 .github/workflows/publish.yml:先校验 tag 与 package.json 版本一致, 跑完全部测试后用 npm trusted publishing 发布(不需要长期 token)。仓库和包都公开时 npm 会自动生成 provenance;本仓库目前是私有仓库,因此不会生成。

npm publish 会触发 prepack,先跑 npm run build:web 重建 web/dist 与 web/dist-server, 再打包;产物不是仓库里的旧构建。

首次发布前需要在 npmjs.com 的包设置里配置一次 Trusted Publisher:

  • Provider:GitHub Actions
  • Organization or user:tu1918
  • Repository:career-asset
  • Workflow filename:publish.yml
  • 允许 npm publish

配置创建后要在 2 天内完成第一次成功发布,否则配置会过期。