directionallylocal

中文文档
0.10.1发布于 2026/11/03Apache-2.0ES Module构建来源已验证

定向本地:在您自己的服务器上后台编码代理。一行服务器安装,以及用于服务器和笔记本电脑的dl命令。

中文使用文档
文档目录14 节
  1. 从你的笔记本电脑开始
  2. 提供者和模型
  3. GitHub令牌
  4. 然后是一个疗程
  5. 一个Autopilot和一个Hotcell版本
  6. 命令
  7. 在你的笔记本电脑上
  8. 在服务器上
  9. 无人值守安装
  10. 单行安装
  11. 它在服务器上设置了什么
  12. 安装脚本的地址
  13. 发展
  14. 许可证

定向本地安装程序

编写在您自己的计算机或服务器上运行的代理程序。发送任务;它自己运行 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。看到 许可证。

版本与发布记录

directionallylocal 共发布 20 个版本,首次发布于 2026/10/28;过去 12 个月发布了 20 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.10.1latest2026/11/03今天
0.10.02026/11/03今天
0.9.42026/10/304 天前
0.9.32026/10/304 天前
0.9.22026/10/304 天前
0.9.12026/10/304 天前

关于 directionallylocal 的常见问题

directionallylocal 是什么?

定向本地:在您自己的服务器上后台编码代理。一行服务器安装,以及用于服务器和笔记本电脑的dl命令。

如何安装 directionallylocal?

在项目目录运行 npm install directionallylocal,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 dl、directionallylocal,可以用 npx dl 直接运行。

directionallylocal 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/directionallylocal 是否存在。

directionallylocal 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

directionallylocal 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js ^22.23.4 || ^24.22.1 || >=26.12.1。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

directionallylocal 可以商用吗?

directionallylocal 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

directionallylocal 还在维护吗?

最新版本 0.10.1 发布于 2026/11/03(今天);至今共发布 20 个版本,其中过去 12 个月发布了 20 个;首次发布于 2026/10/28。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。