工作
用于代理 Dev 工作空间的自办网络图形界面——桌面和移动 PWA(英语:PWA). 启动多repo工作树工作空间,运行编码代理(Claude Code, Codex, 副驾驶, Cursor, Grok) 或真实终端中的平面贝壳, 审查 diffs 并发送反馈给特工, 并观看公关状态—— 从任何设备.
- 工作空间 被命名的 git 工作树目录(每个 GitHub repo, 由共享的光取缓存所克隆,全部在生成的分支上. 创建, 增加/重新移动重置、归档/重置、删除.
- 会议 —— tmux中真实的 CLIS, 镜像浏览器于 WebSocket (xterm.js) (英语). 会话在服务器中幸存了重新启动和电话锁;代理钩 表面工作 / 等待 / 闲置状态 .
- 审查 在工作空间的每个回放中 快速的 diff 视图 线条注释,您可以直接发送到代理会话.
- 移动第一PWA ——可安装,并设有触控调节终端(sticky) 键盘切换,d-pad为箭头/tab/ctrl-c,动力滚动.
安装(空心机)
新建 Linux 或 macOS 框上的一个命令——安装系统工具 (git, tmux, 为节点- pty 的编译器),, 爱 + 节点, 和背景服务(系统/启动)
curl -fsSL https://cdn.jsdelivr.net/npm/@dylanpiercey/work/install.sh | bash
已经有节点( 和 git/ tmux) ? npm i -g @dylanpiercey/work && work setup
进行相同的减去系统工具。 稍后更新为 work update (或
重新运行安装器). 在版本管理器( mise, 作为安装器)下
设置; nvm, asdf, fnm)的工作安装在该节点版本的内部
目录,因此升级或去除节点可以删除与之相关的工作:
新的节点活动,以同样的方式再次安装(work doctor 说
(如适用).
开发
需要使用 Linux 或 macOS git, (中文(简体) ), tmux, (中文(简体) ), gh (认证),和节点24+.
脚本通过 爱
运行 pnpm installGitHub 签名和代理CLI是应用程序的
自己的设置 :
./scripts/bootstrap.sh
运行
pnpm dev # http://localhost:7171
# While hacking on work itself, point the background service at a checkout
# (and back at the npm install when done):
cp scripts/work-source.sh ~/.local/bin/work-source && chmod +x ~/.local/bin/work-source
work-source local # this tree (or: work-source local /path/to/work)
work-source rebuild # rebuild + restart without rewriting the unit
work-source prod # global @dylanpiercey/work again
work-source # status
从命令行(和特工)
应用程序的每页都有一个 work 也指挥,所以一个特工——或
脚本 – 从终端可以使用并设置工作 : work help 列出他们.
在一个工作空间, work branches, (中文(简体) ), work session, (中文(简体) ), work topic, (中文(简体) ),
work review, (中文(简体) ), work notify 财务报告和审定财务报表 work open (代理人通过
他们自己的CLI的子剂,不是通过工作,
work workspace create, (中文(简体) ), work repo add, (中文(简体) ), work config get|set (已选中)
以物配主; work config schema 列出他们名单,
work agent|skill|lsp|host 财务报告和审定财务报表 work gh login· ; work status 合计
机器上,还有 work procs 将每个工作空间端口的链接打印为
用户浏览器会打开它 。 每个命令都用 --json (JSON一个人在
永远不要在它下面出现 --non-interactive。 。 。 .
访问
工作没有自己的登录——它像您一样运行代理和终端,所以
答题 只有这个机器 默认( 它监听 127.0.0.1) (中文(简体) ). 改为:
从其他设备中找到它, 把它放在终止 TLS 的东西后面
和认证符——一个带有登录的倒置代理符,一个有 Cloudflare 隧道
访问, tailscale serve - 告诉大家
WORK_ALLOWED_HOSTS=work.example.com——代理服务的名称 (其中包含其工作空间-端口子域). 其他工作拒绝 名称, 也就是阻止其它网页标出自己名称的原因 在您的机器( DNS 重新绑定) .- 如果代理运行在 另一个机器工作必须倾听
其网络 :
WORK_LISTEN=0.0.0.0财务报告和审定财务报表WORK_TRUSTED_PROXIES=<proxy ip>(IP或CIDRs,逗号分隔). 工作 然后回答代理和这台机器,拒绝其他人 网络,否则会绕过代理登录.WORK_TRUSTED_PROXIES=*回答任何机器——只在网络上你 信任现在的样子.
安装时设定它们( E)WORK_ALLOWED_HOSTS=… WORK_TRUSTED_PROXIES=… WORK_LISTEN=0.0.0.0 work setup(三); work setup 让他们在服务
从后起. 一个被拒绝的请求得到一个页面,说明它需要哪个设置.
所有文件(页数、API和 /term 服务于单曲
应用端口,所以将整个主机名引导到它.
分级 是零配置方式。 在一台机器上登入了Tailscale
(1.52或较新), work setup 运行提议 tailscale serve --bg <port>, (中文(简体) ),
工作时间 https://<machine>.<tailnet>.ts.net/ 用于您的设备
仅尾网(永不漏斗,它会发布到互联网上),
并将此名称添加到 WORK_ALLOWED_HOSTS:用电话打开它 注册到
同一个尾网. work setup --tailscale 做它不问和
--no-tailscale 跳过问题; --yes 独自离开Tailscale的配置
如来相. 一个已经指向工作的服务配置只有它的名字
允许,以及 work doctor 说出其中的哪个.
直接连接. 在代理、隧道或中继、终端后面
移动到此机器的WebRTC 直接连接
速度快于通过代理服务器的路径( 设置 / 终端 / 直接)
连接: 默认自动, 总是, 或关闭, 每个设备一个设置 。 页数,
aPI 和 签入仍然通过您的代理; 设置了直接路径
搭载终端交通
单独加密( DTLS) 至 UDP 端口 WORK_RTC_PORT (默认情况下)
当登录时结束。 那个端口由帮手掌握
在使用直接连接时:
从第一个开始,然后在最后一个开始十分钟后离开。 代理侧检查或
日志没有看到直接的终端流量: 翻转特性
关闭( 设置中的每个设备, 或 WORK_RTC=off 给机器)
必须 在局域网上,直接路径不需要更多;从另一个网络
(手机)UDP端口必须可以通过您的路由器到达.
设置 → 终端可以允许工作在需要时在路由器上打开它
(UPnP,默认关闭):只有在一个设备没有连接到之后,
被租了,然后被租回来 主机防火墙可以保存设备
也出来,虽然它通常没有(ICE通过一个状态从
大部分的网络,所以工作不说 它直到一个设备失败
在没有东西通过港口时直接连接。 礛 work doctor 说它放下了端口,或者可能(只有根可以读取端口)
规则,它从默认判断 并给出命令显示
他们的旨意是: work setup 提议添加
这条规则,命名 work 故加以清除--firewall 加起来
没有问, --no-firewall 跳过问题).
macOS 的防火墙接受程序而不是端口,所以这里是
节点服务运行 work doctor 检查和 work setup 让我们进去. WORK_RTC_STUN 命名找到此机器的 STUN 服务器
公开地址( Cloudflare 默认为; 无为空) .
快点 git status。 。 。 . 列出大型Repo未跟踪文件最多
关于什么 git status 成本,工作要求它 每一个检查和话题
树枝的活树. 因此,服务打开了 Git 的未跟踪缓存
(单位:千美元)core.untrackedCache)在重置设备中保存(<work root>/.cache,其
工作树是每个工作空间的检查结果, 之后git再次读取
只有更改的目录; 您的代理 git status 获得
也快点 它依赖于目录修改时间,所以它只是
打开工作根为本地文件系统, 并带有精细的时间戳
(不是NFS,SMB,FUSE上架,HFS+或FAT)和git自己的支票通过那里.
套装 core.untrackedCache=false 独自一人
git config --global core.untrackedCache false 随处取出;
work doctor 说它是什么.
远程开放工作空间端口. 侧边栏链接中的端口芯片
http://<host>:<port>,它只在机器可以到达的地方工作
直接 - 在尾网名称下,因为 tailscale serve 没有
通配符名称: 有一个芯片到达一个可以监听的 dev 服务器
循环( r)--host)),一个回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回 穿过地道,路线
应用端口的通配符主机名及其代理工作——HTTP和
网锁,所以HMR工作——到 localhost:<port>。 。 。 . WORK_PORT_HOSTS 选择
主机名塑造芯片链接; sub 总是被接受, dash 仅限
并仅针对三个或三个以上标签的名称:
sub(默认) :https://3000.work.example.com通配符*.work.example.com路径和覆盖该路径的证书(您自己的 带有 DNS-01 通配符的反向代理; 只有高级的 Cloudflare 证书管理器, 因为通用 SSL 覆盖一个标签 .dash数字 :https://3000-work.example.com区域下的一个标签,所以 Cloudflare隧道实施免费计划. DNS 通配符匹配整个 标签,所以隧道的公共主机名是*.example.com指点 应用程序端口,在同一通配符上有一个访问应用程序,所以 端口坐落在与应用程序相同的登录后. 工作忽略了主机名 不要从一个端口开始,所以该区下的其他名称不会受到影响.
工作机器上只有回路端口可以到达, 后面是相同的
认证为应用程序。 API 和终端 Websockets 拒绝外国
Origin因此,一个工作空间所服务的页面不能驱动共享的工作
登录 cookie.
配置
| 变量 | 默认 | 目的 |
|---|---|---|
WORK_ROOT | ~/work | 工作空间根 (+) .cache 赤色还原) |
WORK_DATA_DIR | ~/.local/share/work | sqlite db 和服务器状态 |
WORK_APP_PORT | 7171 | HTTP 服务器( 应用程序、 资产和 /term 网络语汇) |
WORK_ALLOWED_HOSTS | —— 说 | Hostnames a 代理服务器在它下服务( 见访问) |
WORK_LISTEN | 127.0.0.1 | 听住地址(0.0.0.0 每个接口) |
WORK_TRUSTED_PROXIES | —— 说 | 网络允许的代理IP/CIDR(*(中文(简体) ) |
WORK_PORT_HOSTS | sub | 端口芯片主机名形状 : sub 编号 : dash (见上文) |
WORK_USER 编号 : WORK_HOST | 当前用户/主机 | 分支名称前缀部件 |
WORK_BRANCH_PREFIX | <user>-<host> | 整个分支名称前缀, 覆盖部分 |
WORK_RTC | 打开 | off 关闭直接连接( 见访问) |
WORK_RTC_PORT | 应用程序端口 | 直接连接的 UDP 端口 |
WORK_RTC_STUN | 云花飞来 | 它们的STUN服务器, 逗号分隔( 空: 无) |
使用面板(和 work usage直接从每个窗口读取计划/配额窗口
代理CLI在磁盘上的证书——克洛德, Codex, Cursor, Grok, 和副驾驶
(通过) gh'"的标志". 供货商不是签到的 就这么说吧 脚本
等待房间在窗口读取 work usage --json,其形状(和
每个字段都意味着什么 work help usage 写出.
运行多个 work (一台笔记本电脑和一个桌子盒,说) 设置 −
外观给每个人一个名字和一个口音颜色:标签标题,家用屏幕
图标,通知,和应用程序的 铬都带走,所以两个窗口或
两个安装的应用程序不再看起来完全相同.
通过民调刷新公关芯片(
本地驱动通过 repo-pushed) (中文(简体) ). 不需要进入 GitHub webhooks .
磁盘上的布局
~/work/<slug>-<id>/工作空间:每回波产生一棵工作树+AGENTS.md(和CLAUDE.mdsymlink)对公约进行编码~/work/.cache/github.com/<owner>/<repo>.git——共享赤取缓存~/.local/share/work/work.db- sqlite数据库(权威状态)
终端位于一个专用 tmux 服务器中 (tmux -L work),活下来的被活活活活活的被活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活
瞬间系统化单元,所以应用程序重启不会杀死您的会话 .