最初我只想解决一个很笨、但每天都会遇到的问题:隔几天重新打开项目时,我已经忘了它用什么命令启动、端口在哪、Python 环境是哪一个、上次又为什么失败。Dev Cockpit 就是从这个问题长出来的。
它不是 IDE,也不打算替代 VS Code、Docker Desktop 或 Conda。它负责回答的是更靠前的几件事:这个目录是什么项目、应该怎么启动、现在到底有没有运行、端口属于谁、失败信息在哪里。
扫描一个项目时,程序在看什么
把一个目录交给 Dev Cockpit 后,核心扫描器会读取常见标记文件、包管理配置和 Git 状态,识别 Node、Python、Java、PHP、Ruby、.NET、Go、Rust 与 Docker 项目。接着再从 package scripts、常见入口和技术栈约定中推断启动命令与候选端口,并结合进程归属和 HTTP 探测确认实际运行状态。
这听起来像“判断文件存不存在”,但麻烦通常出在冲突上。例如同一个目录里既有 Python 虚拟环境,也有 VS Code 解释器设置和 Conda 声明。当前策略会按手工绑定、编辑器配置、项目虚拟环境、Conda 声明等优先级解析,并把为什么选中这个解释器一起展示,而不是静默猜一个路径。
看到 3000 端口,不等于所有项目都在线
早期最容易写错的逻辑,是只要发现某个端口在监听,就把对应项目标成“运行中”。如果电脑上同时开了几个前端项目,这种判断很快就会串台。
Dev Cockpit 会把状态拆开看:
- 是否由工作台自己启动并持有进程;
- 外部监听端口能否归属到当前项目或明确命令;
- HTTP 地址是否真的可达;
- 最近一次启动是否失败;
- 端口是否只是别的程序留下的占用。
也就是说,“进程存在”“端口被占用”和“这个项目能访问”不是一件事。状态判断尽量依赖本地可验证信号,而不是让模型猜。
同一份项目状态,给多个入口复用
为了让不同入口得出同一个答案,代码按职责拆成共享扫描、运行状态聚合和界面入口几层:
这样 CLI、浏览器界面和桌面版可以共用同一套判断逻辑。界面怎么改,不应该改变“项目是否在线”的答案;以后补一种技术栈,也不需要在三个入口各写一遍。
资源雷达是后来长出来的功能

我平时还会收集 GitHub 仓库、Demo、工具、Skills 和教程,所以后来加了资源雷达:把链接或文本整理成带来源、摘要、分类、标签和评分的卡片,再用筛选与星云图复盘最近关注的方向。

资源处理大致是“本地规则优先,可选 AI 补充”:先解析 GitHub 或网页元数据,再用规则生成基础分类;配置模型后,AI 可以帮忙整理标题、标签和摘要,最后仍要经过预览才写入本地 JSON。它不会因为看见一个仓库就自动安装 Skill,也不会上传整个源码目录。
这也是旧文章最容易让人误解的地方:资源雷达很直观,截图也好看,但它只是 Dev Cockpit 的一个模块,项目核心仍然是恢复本地开发现场。
AI 在哪里有用,哪里没资格下结论
工作台可以把项目路径、技术栈、启动命令、端口、Git 状态和最近错误整理成一段可复制的上下文,方便交给 AI 编程工具;只有用户明确点击时,才会写入 PROJECT_CONTEXT.md 或 AGENTS.md。
我也会用 AI 辅助梳理跨技术栈识别规则、重构和补测试。但模型不是运行状态的事实来源:端口归属、HTTP 可达性和 Python 环境解析,仍由本地确定性代码判断。这条边界比给聊天框换一个更聪明的模型重要。
试用入口
安装 Node.js 后可以直接运行:
| |
默认会在本机打开 http://localhost:8787。项目数据保存在本地应用数据目录,定位仍是个人开发工作台,而不是需要注册账号的云服务。
- GitHub 仓库:linsk-labs/local-dev-cockpit
- 项目总览:404_@林达 Projects