定向本地安装程序
编写在您自己的计算机或服务器上运行的代理程序。发送任务;它自己运行 Hotcell 沙盒,驱动 自动驾驶仪,并以pull请求的形式返回,即使你的笔记本电脑是关闭的。从 dl.new。
这是怎么回事: 路线图。
从你的笔记本电脑开始
npm install -g directionallylocal
dl
dl 在你所在的文件夹中启动自动驾驶。首先没有什么需要设置的:没有Docker,没有沙盒,没有GitHub令牌。自动驾驶仪自己的第一次运行选择你的供应商,并签署你。每一个 dl 是新一届; dl -c 继续上一个。
后台任务是需要设置的部分 dl 你第一次开口就帮你安排好。 dl run "task" 由于无处可寄,它只问了一个问题:
Background tasks keep going when this laptop sleeps.
Where should they run?
› Use my own server
Run them on this computer needs Docker Desktop or OrbStack
- 使用我自己的服务器 -当你的笔记本电脑关闭时继续运行;需要SSH访问。
dl中列出的主机~/.ssh/config(或需要user@host[:port]),通过SSH检查它,在那里安装自己,并对这台笔记本电脑进行配对。服务器上没有暴露任何内容:dl通过SSH隧道到达。 - 在这台电脑上运行 -没有出租;当它休眠时,任务暂停。macOS和Linux,使用Docker;Windows上还没有提供(使用服务器,或者采用Linux路径的WSL 2)。
然后在该位置安装Hotcell和Autopilot,构建沙盒映像,启动服务,请求提供程序(Autopilot的选择器)和GitHub令牌,并发送任务。 dl setup 在没有任务的情况下也可以做同样的事情,因为你宁愿先把事情设置好。这台电脑显示的是:
✓ Checking this computer macOS 15.1 · Docker Desktop 29.5.2 · Node 24.22.1 · 120 GB free
✓ Installing Hotcell (sandbox SDK) + Autopilot (harness) Autopilot 3.3.0 · Hotcell 0.1.38
✓ Building the sandbox image Node 24 · Autopilot 3.1.2
✓ Starting services start at login · logs in ~/.directionallylocal/logs
✓ Connecting this computer · tasks pause while it sleeps
[Autopilot's own provider picker, key entry and model picker]
✓ Provider DeepSeek · deepseek-v4-pro · key stays on this computer
Use your GitHub CLI login (you)? It stays on this computer. [Y/n]
✓ GitHub signed in as you · from the GitHub CLI
✓ Storing keys on this computer DeepSeek · GitHub
✓ Ready · fits ~6 agents at once
· Sending to this-computer: you/app at 1a2b3c4 deepseek-v4-pro
提供者和模型
对于后台任务,供应商和模型也是Autopilot的选择,所以 dl 交给自动驾驶仪自己的选择器(autopilot connect):它的任何提供者(OpenRouter, DeepSeek, OpenAI, Anthropic, Moonshot, Z.ai, Ollama, LM Studio,一个自定义的OpenAI兼容端点,…),它的密钥和它的模型。同样的选择配置您自己的 autopilot 命令。 dl 将模型保留为该地方的模型(dl run 服务器上的会话使用它,除非 -m 另一个名字;在这台电脑上 dl 是一样的吗? autopilot(所以它使用你在那里选择的东西)并将键推到该位置:
- 在这台电脑上, 到Hotcell的密钥存储库中(一个0600文件)
~/.directionallylocal/hotcell(不是登录Keychain)。 - 在服务器上, 通过安装使用的相同SSH通道,将其放入Hotcell的密钥存储库中。
钥匙留在这里。沙盒从Hotcell获得花费上限的网关令牌;你的笔记本电脑永远不会持有某个地方的提供者密钥。无钥匙提供商(Ollama、LM Studio)不存储密钥。稍后使用 dl provider set,模型 dl model。
GitHub令牌
后台任务通过GitHub推送分支和打开拉取请求,所以每个地方都需要一个令牌;一个普通 dl 塞申斯从不要求。 dl 提供GitHub CLI登录(gh auth token), “使用GitHub CLI登录(你)?”它会留在这台电脑上。”;如果没有,它会在一行中这样说,并请求带有Contents和Pull请求的细粒度令牌读/写。代币也留在原地;沙盒通过Autopilot的存储库范围代理进行推送。
然后是一个疗程
dl setup 以一行结束, ✓ Ready · fits ~6 agents at once,并立即打开一个会话。什么裸 dl 打开取决于代理运行的位置(默认位置, dl use; --server NAME 选择另一个)。没有任何设置,它就是一个简单的自动驾驶仪,就像这台电脑一样:
在这台电脑上, dl 就是简单的自动驾驶仪。 它开始 autopilot 在终端中,在您运行它的文件夹中,就像您键入的一样 autopilot:每个Autopilot功能都能正常工作(/resume, /clear, ! shell命令,MCP服务器),与您自己的Autopilot配置和提供程序 autopilot connect 设置。任何文件夹都可以工作,无论是否为git,并且不会向任何地方发送任何内容:代理直接编辑文件夹,并在终端关闭时停止。每一个 dl 是新一届; dl -c 是 autopilot -c,以及之后的任何东西 -- 自动驾驶模式(dl -- --session ID).
在服务器上, dl 是一个持续运行的会话。 自动驾驶仪的屏幕连接到服务器上的对话(autopilot attach-remote),在你关闭终点站后继续运行。在GitHub存储库中,它是该存储库的代码会话(您未提交的更改将随之进行; --no-local-changes 发送没有);在其他任何地方,聊天。每一个 dl 开始新的对话; dl -c 重新打开从该服务器上的此文件夹启动的最新文件。当此文件夹中较早的一个仍在工作或等待您时, dl 在连接(1 earlier session here is still working · dl -c to rejoin). 在源不在GitHub上的git存储库中,它会在一行中显示,并打开一个聊天窗口。
无论哪种方式, dl run "task" 是背景,沙盒路径。 它将任务发送到该位置,在Hotcell沙盒中运行,在终端关闭后继续运行,并以pull请求结束。
dl # this computer: autopilot here. A server: its session (repository or chat)
dl -c # this computer: autopilot -c. A server: the latest session from this folder
dl -- --session <id> # this computer: pass flags through to autopilot
dl --server box # a session on the server named box, whatever the default
dl new # the same as bare dl (kept as an alias for a release)
dl run "fix the flaky checkout test" # background task in a sandbox; your uncommitted changes go along
dl runs # tasks and their pull requests
dl pull <id> # check one out here
dl status # where agents run, their provider, model and versions, what they're doing
dl status 如果一个地方有比这台笔记本电脑更先进的自动驾驶仪或Hotcell dl 针: ! box runs Hotcell 0.1.30, this dl pins 0.1.38 dl update box。
“适合~N个代理”的数字是一个保守的估计:主机自己的份额(至少1.5 GB或15%)之后剩下的内存,除以每个沙箱1 GB,上限为每个CPU 2个。经过测量的数字将取代它。
一个Autopilot和一个Hotcell版本
dl 包 autopilot-ai 在一个确切的版本(它的会话客户端)和引脚 hotcell 完全正确,并在它设置的每个地方安装相同的版本,包括沙盒映像,因此客户机和服务器永远不会漂移,两个人安装相同的版本 dl 使用相同的沙盒。 dl update NAME 将一个位置带回两个引脚:服务器得到它的 dl 首先刷新(安装脚本,在本笔记本电脑上) dl 版本,所以两端匹配),然后 dl up;这台计算机重新运行它的安装程序。设置服务器安装这台笔记本电脑 dl 版本也在那里,从来不是npm的最新版本。当笔记本电脑是自己的 dl 在npm之后, dl update 用一个修复它的命令就可以这么说。
命令
dl 是英文的缩写 directionallylocal;这两个工作。
在你的笔记本电脑上
| 命令 | 它是做什么的 |
|---|---|
dl | 与代理交谈:每次一个新的会话。没有任何设置,很简单 autopilot 在这个文件夹中(它的第一次运行选择提供程序);没有安装任何东西。在这台电脑上:简单 autopilot 在这个文件夹,任何文件夹,与您自己的Autopilot配置(dl -- ARGS 传递ARGS给它)。在服务器上:在GitHub存储库中,该存储库的代理会话;别的地方,聊聊天;当你离开时,它还在运行。 |
dl -c, dl --continue | 在这台电脑上, autopilot -c。在服务器上,重新打开从该文件夹开始的最新对话。 |
dl setup | 设置或修复运行后台任务的位置。可以安全地重新运行。 --identity FILE 指定要使用的SSH密钥。 |
dl new | 和bare一样 dl这里有一个新的会议。作为释放的别名。 |
dl status | 你的代理在哪里运行,他们的供应商、型号、Autopilot和Hotcell版本(在这台笔记本电脑的引脚旁边),以及他们在做什么。在任何地方工作。 |
dl connect URL | 连接到别人设置的服务器;批准它显示的代码。 |
dl run "TASK" | 在沙箱中运行任务,在后台,从GitHub存储库内部;它以pull请求结束。Ctrl-C停止观看,而不是停止任务。第一次,它询问任务在哪里运行并设置。 |
dl runs | 您的任务及其拉取请求。 --json 为脚本。 |
dl watch ID / dl cancel ID | 完成一个任务,或者停止一个任务。 |
dl pull ID | 在这里查看任务的分支。 |
dl preview ID | 使用Serverless Objects在服务器上部署任务的Workers分支,并在这里通过SSH隧道打开它。 |
dl servers | 代理运行的地方。 dl servers rename OLD NEW, dl servers remove NAME。 |
dl use [NAME] | 任务和裸露的地方 dl 不 --server。没有名字,显示它。 |
dl provider | 每个地方的提供者和GitHub令牌。 dl provider set 在Autopilot列表中选择另一个供应商、密钥和型号; dl provider github 替换GitHub令牌。 --server NAME 选好地方。 dl keys 是同一个命令。 |
dl model [ID] | 一个地方的任务和会话模型。没有ID,自动驾驶仪自己的模型选择器。 |
dl update [NAME] | 更新一个地方的Autopilot, Hotcell和sandbox图像到版本 dl 别针。通过SSH的服务器(它的) dl 首先,这台电脑就位。 --wait 等待正在运行的任务,而不是请求;由于没有终端,它无论如何都要等待。 |
dl local status | 在此计算机上运行的代理:正在运行?,在哪里,有多少适合。 |
dl local uninstall [--purge] | 停止并移除它们。 --purge 也删除键和数据。 |
运行选项: --server NAME, -m/--model MODEL, --repo OWNER/NAME, --detach。
在服务器上
以root用户运行这些文件。 dl 它本身显示了这是什么,它是否健康,连接的笔记本电脑和运行。
| 命令 | 它是做什么的 |
|---|---|
dl up | 安装或修复一切。重新运行安全:它保留您的密钥和生成的秘密,并跳过已经完成的工作。 |
dl up --dry-run | 打印什么 up 会改变,不改变任何东西。 |
dl connect-laptop | 如何连接笔记本电脑,以及在浏览器中批准它的链接。 dl connect-laptop CODE 批准笔记本电脑显示的代码。 |
dl laptops | 连接笔记本电脑。 dl laptops remove NAME 断开一个。 |
dl runs | 正在运行或已完成的任务及其拉取请求。 |
dl logs [hotcell|autopilot] [-f] | 服务的日志。 |
dl preview ID [--remove] | 将任务的分支部署为预览,或者停止它。需要 DL_PREVIEWS_BUCKET。 |
dl previews | 实时预览:任务、端口、分支。 |
dl doctor | 检查每个部件,并对每个故障进行修复;提供商的路由必须在Hotcell中处于活动状态。 |
dl keys [set <provider>|github] | 设置了哪些键,或者替换一个键(隐藏输入)。任何自动驾驶仪提供商id (openrouter, deepseek, openai, ollama,……);定制的需要 --base-url URL (和 --auth-header H --auth-format F 当它不是承载时)。 |
dl status | 显示已安装的版本以及访问服务器的位置。 |
dl uninstall | 删除服务和软件,但保留配置和数据。添加 --purge 要删除这些,再加上服务帐户和沙箱映像。 |
无人值守安装
将答案设置为环境变量: DL_TAILSCALE_AUTH_KEY, DL_PROVIDER (提供者id; openrouter (未设置时)用 DL_PROVIDER_API_KEY (和 DL_PROVIDER_BASE_URL 对于一个提供商,Hotcell没有内置路由; DL_OPENROUTER_API_KEY 是OpenRouter的缩写),和 DL_GITHUB_TOKEN。 DL_ACCESS 选择如何到达服务器: tailscale (默认), loopback (仅限这台机器),或者 ssh (笔记本电脑的设置使用)。 DL_SKIP_CREDENTIAL_CHECK=1 跳过离线安装的在线密钥检查。
笔记本电脑的设置通过SSH驱动服务器 dl up --access ssh --answers-stdin --events json,它将答案作为一个JSON对象放在stdin ({"provider": {"id", "baseUrl", "apiKey", "apiKeyEnv", "authHeader"?, "authFormat"?}, "githubToken"};旧的笔记本电脑 "openrouterKey" 仍然可以工作),并将进度报告为JSON行。它运行两次:一次用于安装,使用 {}一次是用钥匙,在自动驾驶仪的选择器之后。 dl up --needs 回答这个问题的报告仍然缺乏,没有任何改变。服务器将提供程序写入Aster的 aster.json 作为 "provider": {"id", "baseUrl", "apiKeyEnv"} 与 "models": "catalog"。
单行安装
用于笔记本电脑或服务器:
curl -fsSL https://directionallylocal.run | sh
在笔记本电脑上 (macOS或Linux,如您所愿),它会安装 dl 成 ~/.directionallylocal 没有sudo:当你的Node.js足够新(22.23.4+,24.22.1+或26.12.1+)时,它会使用你的Node.js,否则它会从nodejs.org下载Node.js 24到同一个文件夹中,并根据其发布的SHA-256进行检查 dl 独自一人(你的壳) node 保持原样)。它增加了 ~/.directionallylocal/bin 到shell启动文件中的PATH (.zshrc, .bashrc 或 .bash_profile、鱼的 conf.d,否则 .profile)和开始 dl 在你运行它的文件夹里。管道化的脚本不能更改运行它的shell的PATH,所以当 ~/.local/bin 或 ~/bin 已经在PATH上了吗 dl 在那里, dl 在同一终端工作;否则,它会显示要运行的一行(例如 source ~/.bashrc),当你第一次离开的时候 dl. 新的终端总是有它。 DL_NO_START=1 跳过开始 dl, DL_NO_MODIFY_PATH=1 让您的启动文件单独存在,并且 DL_HOME=DIR 安装在其他地方。 dl local uninstall --purge 保持 dl 本身。
在服务器上 (Ubuntu或Debian,作为根用户: curl -fsSL https://directionallylocal.run | sudo sh),如果需要,它会安装Node.js directionallylocal 全局,并运行 dl up. 笔记本电脑的设置使用相同的脚本通过SSH引导服务器,使用 DL_INSTALL_ONLY=1 还有笔记本电脑自己的 dl 版本 DL_VERSION。
哪一个是:当它在Linux上以root身份运行时,当笔记本电脑的设置运行它时(DL_INSTALL_ONLY=1),或者在Linux机器上 dl up 已经成立;其他的都是笔记本电脑。就是这条线 dl 在没有安装服务器的机器上,root获得服务器的指令,而其他人则获得笔记本电脑的指令。 DL_MODE=server 或 DL_MODE=laptop 覆盖它。
它在服务器上设置了什么
- Node.js 24 LTS 如果Node缺少或缺少CVE-2026-111497的修复程序(接受22.23.4+,24.22.1+和26.12.1+)。来自NodeSource的节点安全版本被添加到Ubuntu的自动更新中,否则会跳过它们。删除
/etc/apt/apt.conf.d/52directionallylocal-nodejs选择退出。 - 码头工人, 如果没有,再加上一条规则,使沙箱远离云元数据端点。Docker不会自动更新,因为它的repo会发布重大升级,重启Docker守护进程可能会停止运行沙箱。
- 来自npm的Hotcell和Autopilot, 下
/opt/directionallylocal/releases/<versions>,current指向活动释放。 - 三个系统单位:
hotcell.service(沙箱和凭据网关,在环回)和autopilot.service(与笔记本电脑配对的API)127.0.0.1:4096),每个账户都有自己的非特权账户,加上directionallylocal-metadata-block.service,沙盒的防火墙规则。只有在使用Tailscale访问时,Tailscale Serve才会公开API。 - 沙盒图像 内置了Node、git、Python和Autopilot运行时。
- 配置 在
/etc/hotcell,/etc/autopilot和/etc/directionallylocal,仅由root和匹配的服务帐户可读。数据存在于/var/lib/hotcell和/var/lib/autopilot。
支持:Ubuntu 24.04和22.04和Debian 12,在x86_64或arm64上,至少有4gb的RAM和15gb的空闲 /var。
安装脚本的地址
site/ Cloudflare Worker是做什么用的 https://directionallylocal.run. 它 install.sh 来 curl 在裸域(和 /install.sh),将浏览器发送到directionallylocal.com,而不提供任何其他服务。子域的 directionallylocal.run 是用户的即时地址,并且域名在公共后缀列表中,因此Worker永远不会设置cookie。将其部署为 npx wrangler deploy -c site/wrangler.toml。
site/wrangler.jsonc 是cell和Serverless Objects读取的可移植配置; site/wrangler.toml 只使用cloudflare routes 和 workers_dev. 安装脚本签入为 site/install-script.ts 所以Worker没有非javascript的导入;用 npm run sync:site-script 后编辑 install.sh。 sobjects build --strict site 检查Worker是否可移植。名称服务和审批页面的设计已经完成 docs/plans/portable-services.md。
发展
npm install
npm test # node:test through tsx; a simulated server exercises up, doctor, and uninstall
npm run typecheck
npm run build
npm run sync:site-script # after editing install.sh
要使用未发布的Autopilot或Hotcell版本测试整个流程,请设置 DL_AUTOPILOT_SPEC 和/或 DL_HOTCELL_SPEC 到一个NPM规范或者到一个 .tgz (npm pack 在他们的结帐处)。当地的设置, dl up 在服务器和沙盒映像上构建,然后安装它们而不是 autopilot-ai@<pinned version> / hotcell@<pinned version>;该发布名为 dev 并且在每次运行时重新安装和重新构建,因为开发构建可能已经更改。构建报告的版本最终会出现在状态文件中。
DL_AUTOPILOT_SPEC=~/autopilot/autopilot-ai-3.1.0.tgz DL_HOTCELL_SPEC=~/hotcell/hotcell-1.5.0.tgz dl
许可证
apache - 2.0。看到 许可证。