@daomar/agentfleet
Advanced tools
+1
-1
@@ -72,3 +72,3 @@ #!/usr/bin/env node | ||
| .description((0, i18n_1.t)('init.description')) | ||
| .requiredOption('--backend <name>', (0, i18n_1.t)('init.option_backend'), 'local-folder') | ||
| .option('--backend <name>', (0, i18n_1.t)('init.option_backend'), 'onedrive') | ||
| .option('--path <dir>', (0, i18n_1.t)('init.option_path')) | ||
@@ -75,0 +75,0 @@ .option('--force', 'Overwrite existing configuration') |
+28
-6
@@ -45,2 +45,3 @@ "use strict"; | ||
| const protocol_engine_1 = require("../services/protocol-engine"); | ||
| const init_1 = require("./init"); | ||
| const fs = __importStar(require("fs")); | ||
@@ -123,8 +124,29 @@ const path = __importStar(require("path")); | ||
| catch (err) { | ||
| console.error(`\n❌ ${(0, i18n_1.t)('run.error', { message: err.message })}`); | ||
| daemonService.removePid(); | ||
| if (logger) | ||
| logger.restore(); | ||
| exit(1); | ||
| return undefined; | ||
| const msg = err.message; | ||
| // Auto-init if config not found | ||
| if (msg.includes('agentfleet init')) { | ||
| console.log(`\n🔧 ${(0, i18n_1.t)('run.auto_init')}`); | ||
| try { | ||
| await (0, init_1.initCommand)({ backend: 'onedrive' }); | ||
| const loadConfigFn = dependencies.loadConfigFn ?? config_1.loadConfig; | ||
| config = await loadConfigFn(); | ||
| } | ||
| catch (initErr) { | ||
| console.error(`\n❌ ${(0, i18n_1.t)('run.auto_init_failed', { message: initErr.message })}`); | ||
| console.log(` ${(0, i18n_1.t)('run.auto_init_hint')}`); | ||
| daemonService.removePid(); | ||
| if (logger) | ||
| logger.restore(); | ||
| exit(1); | ||
| return undefined; | ||
| } | ||
| } | ||
| else { | ||
| console.error(`\n❌ ${(0, i18n_1.t)('run.error', { message: msg })}`); | ||
| daemonService.removePid(); | ||
| if (logger) | ||
| logger.restore(); | ||
| exit(1); | ||
| return undefined; | ||
| } | ||
| } | ||
@@ -131,0 +153,0 @@ // Apply CLI overrides |
@@ -43,2 +43,3 @@ "use strict"; | ||
| const index_1 = require("../backends/index"); | ||
| const init_1 = require("./init"); | ||
| async function submitCommand(options, _command, dependencies = {}) { | ||
@@ -52,5 +53,22 @@ // Load v3 config | ||
| catch (err) { | ||
| console.error(`❌ ${(0, i18n_1.t)('submit.error', { message: err.message })}`); | ||
| process.exitCode = 1; | ||
| return; | ||
| const msg = err.message; | ||
| // Auto-init if config not found | ||
| if (msg.includes('agentfleet init')) { | ||
| console.log(`\n🔧 ${(0, i18n_1.t)('submit.auto_init')}`); | ||
| try { | ||
| await (0, init_1.initCommand)({ backend: 'onedrive' }); | ||
| config = await loadConfigFn(); | ||
| } | ||
| catch (initErr) { | ||
| console.error(`\n❌ ${(0, i18n_1.t)('submit.auto_init_failed', { message: initErr.message })}`); | ||
| console.log(` ${(0, i18n_1.t)('submit.auto_init_hint')}`); | ||
| process.exitCode = 1; | ||
| return; | ||
| } | ||
| } | ||
| else { | ||
| console.error(`❌ ${(0, i18n_1.t)('submit.error', { message: msg })}`); | ||
| process.exitCode = 1; | ||
| return; | ||
| } | ||
| } | ||
@@ -57,0 +75,0 @@ // Create backend |
@@ -202,4 +202,11 @@ { | ||
| "run.auto_init": "No configuration found. Initializing AgentFleet with OneDrive...", | ||
| "run.auto_init_failed": "Auto-initialization failed: {message}", | ||
| "run.auto_init_hint": "Run `agentfleet init --backend onedrive` manually, or use `--backend local-folder --path <dir>` for a local workspace.", | ||
| "submit.created": "Task {taskId} created via v3 protocol", | ||
| "submit.error": "Failed to submit task: {message}", | ||
| "submit.auto_init": "No configuration found. Initializing AgentFleet with OneDrive...", | ||
| "submit.auto_init_failed": "Auto-initialization failed: {message}", | ||
| "submit.auto_init_hint": "Run `agentfleet init --backend onedrive` manually, or use `--backend local-folder --path <dir>` for a local workspace.", | ||
@@ -206,0 +213,0 @@ "config.unsupported_version": "Config at {path} has an unsupported version. Run `agentfleet init --force` to recreate.", |
@@ -202,4 +202,11 @@ { | ||
| "run.auto_init": "未找到配置。正在使用 OneDrive 初始化 AgentFleet...", | ||
| "run.auto_init_failed": "自动初始化失败: {message}", | ||
| "run.auto_init_hint": "请手动运行 `agentfleet init --backend onedrive`,或使用 `--backend local-folder --path <目录>` 创建本地工作区。", | ||
| "submit.created": "任务 {taskId} 已通过 v3 协议创建", | ||
| "submit.error": "提交任务失败: {message}", | ||
| "submit.auto_init": "未找到配置。正在使用 OneDrive 初始化 AgentFleet...", | ||
| "submit.auto_init_failed": "自动初始化失败: {message}", | ||
| "submit.auto_init_hint": "请手动运行 `agentfleet init --backend onedrive`,或使用 `--backend local-folder --path <目录>` 创建本地工作区。", | ||
@@ -206,0 +213,0 @@ "config.unsupported_version": "{path} 的配置版本不受支持。请运行 `agentfleet init --force` 重新创建。", |
+1
-1
| { | ||
| "name": "@daomar/agentfleet", | ||
| "version": "3.1.3", | ||
| "version": "3.1.4", | ||
| "description": "Distributed agent orchestration, without a control plane.", | ||
@@ -5,0 +5,0 @@ "main": "dist/cli.js", |
+78
-25
@@ -8,7 +8,7 @@ <p align="center"> | ||
| <p align="center"> | ||
| <strong>Turn your own laptops, desktops, and lab machines into a distributed coding-agent fleet.</strong> | ||
| <strong>Orchestrate AI coding agents across every machine you own.</strong> | ||
| </p> | ||
| <p align="center"> | ||
| Run one prompt across many devices in parallel — no server, no SSH mesh, no control plane. AgentFleet coordinates through your existing OneDrive sync. | ||
| Submit one prompt, let every enrolled device run it with its own local agent, and compare results side by side — no server, no SSH mesh, no control plane. | ||
| </p> | ||
@@ -25,3 +25,3 @@ | ||
| <a href="README.md">English</a> | <a href="README.zh-CN.md">简体中文</a> · | ||
| <a href="https://agentfleet.daomar.dev/">Live dashboard</a> · | ||
| <a href="https://agentfleet.daomar.dev/web/">Dashboard</a> · | ||
| <a href="https://agentfleet.daomar.dev/donate.html">Support the project</a> | ||
@@ -32,20 +32,18 @@ </p> | ||
| ## Why star AgentFleet? | ||
| ## Built for agent developers | ||
| Experienced developers increasingly have more compute than orchestration: a work laptop, a desktop, a mini PC, a home server, maybe several agent CLIs with different strengths. AgentFleet gives those machines a shared task fabric so they can all attack the same prompt independently and return comparable results. | ||
| AgentFleet is designed for developers who work with AI coding agents — Claude Code, GitHub Copilot CLI, Cursor, Aider, or any command-line tool that accepts a prompt and produces code. If you have more than one machine, AgentFleet lets them all work in parallel on the same task and return independent results. | ||
| Use it when you want to: | ||
| - **Compare agents side by side** — run the same security review with Claude Code, Copilot CLI, Cursor, or any local command template. | ||
| - **Compare agents side by side** — run the same prompt with Claude Code on one machine and Copilot CLI on another, then compare output quality. | ||
| - **Parallelize exploratory work** — ask multiple machines to inspect different clones, branches, or configurations at the same time. | ||
| - **Benchmark prompts** — evaluate the same prompt across different models, tools, hardware, or repository states. | ||
| - **Keep data local** — tasks and results sync through your OneDrive; AgentFleet runs no hosted backend. | ||
| - **Work behind firewalls** — no inbound ports, tunnels, SSH bastions, queues, or control-plane credentials. | ||
| - **Operate like a personal CI lab** — submit tasks from CLI or browser and watch every enrolled node report back. | ||
| If this is the kind of distributed-agent workflow you want to see mature, please **star**, **fork**, and share your use cases. | ||
| ## Quick start | ||
| ## 60-second start | ||
| **One command to start.** Run this on every machine you want in the fleet: | ||
| Run this on every machine you want in the fleet: | ||
| ```bash | ||
@@ -55,4 +53,9 @@ npx -y @daomar/agentfleet run | ||
| Then submit a task from any one machine: | ||
| That's it. AgentFleet will: | ||
| 1. Automatically detect your OneDrive and initialize the workspace (first run only). | ||
| 2. Register the `agentfleet` shortcut command so you can use it directly next time. | ||
| 3. Start watching for tasks. | ||
| Then submit a task from any machine: | ||
| ```bash | ||
@@ -71,7 +74,33 @@ agentfleet submit \ | ||
| agentfleet status | ||
| agentfleet status task-20260402-abc123 | ||
| ``` | ||
| Prefer a browser? Open **[agentfleet.daomar.dev](https://agentfleet.daomar.dev/)**, sign in with the Microsoft account that owns the OneDrive, submit tasks, monitor nodes, and inspect results. | ||
| Prefer a browser? Open **[agentfleet.daomar.dev/web/](https://agentfleet.daomar.dev/web/)**, sign in with the Microsoft account that owns the OneDrive, submit tasks, monitor nodes, and inspect results. | ||
| ## Agent compatibility | ||
| AgentFleet works with any command-line tool that accepts a prompt. The default agent is **Claude Code**: | ||
| | Agent | Command template | Notes | | ||
| |---|---|---| | ||
| | Claude Code | `claude -p {prompt}` | Default, works out of the box | | ||
| | GitHub Copilot CLI | `gh copilot suggest "{prompt}"` | Requires `gh` CLI with Copilot extension | | ||
| | Cursor | `cursor --prompt "{prompt}"` | Requires Cursor CLI | | ||
| | Aider | `aider --message "{prompt}"` | Requires aider installed | | ||
| | Custom | Any command with `{prompt}` | Set via `defaultAgentCommand` in config | | ||
| Override per-task with `--agent`: | ||
| ```bash | ||
| agentfleet submit --prompt "Fix the login bug" --agent 'aider --message "{prompt}"' | ||
| ``` | ||
| Or change the default globally in `~/.agentfleet/config.json`: | ||
| ```json | ||
| { | ||
| "defaultAgent": "claude-code", | ||
| "defaultAgentCommand": "claude -p {prompt}" | ||
| } | ||
| ``` | ||
| ## Concrete workflows | ||
@@ -130,6 +159,6 @@ | ||
| 1. AgentFleet detects OneDrive and creates stable local paths under `~/.agentfleet/`. | ||
| 1. `agentfleet run` detects OneDrive and initializes the shared workspace (auto-init on first run). | ||
| 2. `tasks/` and `output/` are backed by the synced OneDrive workspace. | ||
| 3. `agentfleet submit` writes an immutable task file. | ||
| 4. Each `agentfleet run` process sees new tasks and executes them locally. | ||
| 4. Each `agentfleet run` process sees new tasks and executes them with the local coding agent. | ||
| 5. Results are written with hostname prefixes, so multiple machines never overwrite each other. | ||
@@ -151,14 +180,13 @@ | ||
| <details> | ||
| <summary><strong>Install and run</strong></summary> | ||
| <summary><strong>Run</strong></summary> | ||
| ```bash | ||
| # Recommended: run without installing globally | ||
| # Start watching for tasks (auto-initializes on first run) | ||
| npx -y @daomar/agentfleet run | ||
| # Or install globally | ||
| npm install -g @daomar/agentfleet | ||
| # After first run, the shortcut is available: | ||
| agentfleet run | ||
| ``` | ||
| Useful run options: | ||
| Options: | ||
@@ -189,2 +217,13 @@ - `--poll-interval <seconds>` — polling interval, default `10` | ||
| <details> | ||
| <summary><strong>Status and stop</strong></summary> | ||
| ```bash | ||
| agentfleet status # overview of all tasks | ||
| agentfleet status <task-id> # details for a specific task | ||
| agentfleet stop # stop the running instance | ||
| ``` | ||
| </details> | ||
| <details> | ||
| <summary><strong>Daemon and auto-start</strong></summary> | ||
@@ -194,4 +233,4 @@ | ||
| agentfleet run --daemon | ||
| npx -y @daomar/agentfleet install # install auto-start | ||
| npx -y @daomar/agentfleet uninstall # remove auto-start | ||
| agentfleet install # install auto-start on login | ||
| agentfleet uninstall # remove auto-start | ||
| agentfleet stop | ||
@@ -206,2 +245,16 @@ ``` | ||
| <details> | ||
| <summary><strong>Initialize (advanced)</strong></summary> | ||
| Normally `run` and `submit` auto-initialize with OneDrive. For manual control: | ||
| ```bash | ||
| agentfleet init # default: OneDrive | ||
| agentfleet init --backend onedrive-business # OneDrive for Business | ||
| agentfleet init --backend local-folder --path /shared/fleet # local folder | ||
| agentfleet init --force # reinitialize | ||
| ``` | ||
| </details> | ||
| <details> | ||
| <summary><strong>Workspace layout</strong></summary> | ||
@@ -229,3 +282,3 @@ | ||
| The hosted Pages app at **[agentfleet.daomar.dev](https://agentfleet.daomar.dev/)** is a PWA for: | ||
| The hosted Pages app at **[agentfleet.daomar.dev/web/](https://agentfleet.daomar.dev/web/)** is a PWA for: | ||
@@ -284,3 +337,3 @@ - submitting tasks from desktop or mobile; | ||
| - [npm](https://www.npmjs.com/package/@daomar/agentfleet) — package install | ||
| - [Web dashboard](https://agentfleet.daomar.dev/) — submit and monitor tasks | ||
| - [Web dashboard](https://agentfleet.daomar.dev/web/) — submit and monitor tasks | ||
| - [About](https://agentfleet.daomar.dev/about.html) — architecture overview | ||
@@ -287,0 +340,0 @@ - [Contributing](CONTRIBUTING.md) — development setup |
+78
-25
@@ -8,7 +8,7 @@ <p align="center"> | ||
| <p align="center"> | ||
| <strong>把你自己的笔记本、台式机、实验室机器变成一个分布式编码智能体集群。</strong> | ||
| <strong>在你的所有设备上编排 AI 编码智能体。</strong> | ||
| </p> | ||
| <p align="center"> | ||
| 在多台设备上并行运行同一个提示词 — 不需要服务器、不需要 SSH 组网、不需要控制平面。AgentFleet 直接使用你已有的 OneDrive 同步来协调任务。 | ||
| 提交一次提示词,让每台设备使用自己的本地 agent 独立执行,然后横向比较结果 — 不需要服务器、不需要 SSH 组网、不需要控制平面。 | ||
| </p> | ||
@@ -25,3 +25,3 @@ | ||
| <a href="README.md">English</a> | <a href="README.zh-CN.md">简体中文</a> · | ||
| <a href="https://agentfleet.daomar.dev/">在线仪表板</a> · | ||
| <a href="https://agentfleet.daomar.dev/web/">在线仪表板</a> · | ||
| <a href="https://agentfleet.daomar.dev/donate.html">支持项目</a> | ||
@@ -32,20 +32,18 @@ </p> | ||
| ## 为什么值得 Star? | ||
| ## 为 Agent 开发者而生 | ||
| 很多有经验的开发者现在并不缺算力,而是缺少一种轻量的编排方式:工作笔记本、台式机、迷你主机、家用服务器,也许还装着不同能力的 agent CLI。AgentFleet 的目标就是把这些机器变成一个共享任务网络,让它们同时处理同一个任务,并返回可比较的结果。 | ||
| AgentFleet 专为使用 AI 编码智能体的开发者设计 — Claude Code、GitHub Copilot CLI、Cursor、Aider,或任何接受提示词并生成代码的命令行工具。如果你有不止一台机器,AgentFleet 可以让它们并行处理同一个任务,并返回独立的结果。 | ||
| 你可以用它来: | ||
| - **横向比较不同智能体** — 用 Claude Code、Copilot CLI、Cursor 或任意本地命令模板执行同一个安全审查提示词。 | ||
| - **横向比较不同智能体** — 在一台机器上用 Claude Code、另一台上用 Copilot CLI 执行同一个提示词,然后比较输出质量。 | ||
| - **并行探索复杂问题** — 让多台机器同时检查不同 clone、分支、配置或方案。 | ||
| - **让数据留在本地环境** — 任务和结果只通过你的 OneDrive 同步;AgentFleet 不运行托管后端。 | ||
| - **基准测试提示词** — 在不同模型、工具、硬件和仓库状态下评估同一个提示词。 | ||
| - **让数据留在本地** — 任务和结果只通过你的 OneDrive 同步;AgentFleet 不运行托管后端。 | ||
| - **适合防火墙内环境** — 不需要入站端口、隧道、SSH 堡垒机、队列或控制平面凭据。 | ||
| - **像个人 CI 实验室一样工作** — 通过 CLI 或浏览器提交任务,观察每个节点回传结果。 | ||
| 如果你也希望分布式智能体工作流变得更成熟,欢迎 **Star**、**Fork**,并分享你的真实使用场景。 | ||
| ## 快速开始 | ||
| ## 60 秒上手 | ||
| **一条命令启动。** 在每台要加入集群的机器上运行: | ||
| 在每台要加入集群的机器上运行: | ||
| ```bash | ||
@@ -55,2 +53,7 @@ npx -y @daomar/agentfleet run | ||
| 就这样。AgentFleet 会自动: | ||
| 1. 检测你的 OneDrive 并初始化工作区(仅首次运行)。 | ||
| 2. 注册 `agentfleet` 快捷命令,之后可以直接使用。 | ||
| 3. 开始监听任务。 | ||
| 然后从任意一台机器提交任务: | ||
@@ -71,7 +74,33 @@ | ||
| agentfleet status | ||
| agentfleet status task-20260402-abc123 | ||
| ``` | ||
| 更喜欢浏览器?打开 **[agentfleet.daomar.dev](https://agentfleet.daomar.dev/)**,用拥有该 OneDrive 的 Microsoft 账户登录,即可提交任务、监控节点、查看结果。 | ||
| 更喜欢浏览器?打开 **[agentfleet.daomar.dev/web/](https://agentfleet.daomar.dev/web/)**,用拥有该 OneDrive 的 Microsoft 账户登录,即可提交任务、监控节点、查看结果。 | ||
| ## 智能体兼容性 | ||
| AgentFleet 可以与任何接受提示词的命令行工具配合使用。默认智能体为 **Claude Code**: | ||
| | 智能体 | 命令模板 | 说明 | | ||
| |---|---|---| | ||
| | Claude Code | `claude -p {prompt}` | 默认,开箱即用 | | ||
| | GitHub Copilot CLI | `gh copilot suggest "{prompt}"` | 需要安装 `gh` CLI + Copilot 扩展 | | ||
| | Cursor | `cursor --prompt "{prompt}"` | 需要 Cursor CLI | | ||
| | Aider | `aider --message "{prompt}"` | 需要安装 aider | | ||
| | 自定义 | 任何包含 `{prompt}` 的命令 | 通过配置 `defaultAgentCommand` | | ||
| 单次任务覆盖 agent: | ||
| ```bash | ||
| agentfleet submit --prompt "修复登录 bug" --agent 'aider --message "{prompt}"' | ||
| ``` | ||
| 或在 `~/.agentfleet/config.json` 中更改全局默认: | ||
| ```json | ||
| { | ||
| "defaultAgent": "claude-code", | ||
| "defaultAgentCommand": "claude -p {prompt}" | ||
| } | ||
| ``` | ||
| ## 具体使用案例 | ||
@@ -130,6 +159,6 @@ | ||
| 1. AgentFleet 自动检测 OneDrive,并在 `~/.agentfleet/` 下创建稳定本地路径。 | ||
| 1. `agentfleet run` 检测 OneDrive 并初始化共享工作区(首次运行自动完成)。 | ||
| 2. `tasks/` 和 `output/` 由同步的 OneDrive 工作区承载。 | ||
| 3. `agentfleet submit` 写入不可变任务文件。 | ||
| 4. 每个 `agentfleet run` 进程发现新任务并在本机执行。 | ||
| 4. 每个 `agentfleet run` 进程发现新任务并使用本地编码智能体执行。 | ||
| 5. 结果文件带主机名前缀,多台机器不会互相覆盖。 | ||
@@ -151,14 +180,13 @@ | ||
| <details> | ||
| <summary><strong>安装与运行</strong></summary> | ||
| <summary><strong>运行</strong></summary> | ||
| ```bash | ||
| # 推荐:无需全局安装 | ||
| # 启动任务监听(首次运行自动初始化) | ||
| npx -y @daomar/agentfleet run | ||
| # 或全局安装 | ||
| npm install -g @daomar/agentfleet | ||
| # 首次运行后,快捷命令即可使用: | ||
| agentfleet run | ||
| ``` | ||
| 常用运行选项: | ||
| 选项: | ||
@@ -189,2 +217,13 @@ - `--poll-interval <seconds>` — 轮询间隔,默认 `10` | ||
| <details> | ||
| <summary><strong>状态与停止</strong></summary> | ||
| ```bash | ||
| agentfleet status # 所有任务概览 | ||
| agentfleet status <task-id> # 查看指定任务详情 | ||
| agentfleet stop # 停止运行中的实例 | ||
| ``` | ||
| </details> | ||
| <details> | ||
| <summary><strong>守护进程与自启动</strong></summary> | ||
@@ -194,4 +233,4 @@ | ||
| agentfleet run --daemon | ||
| npx -y @daomar/agentfleet install # 安装自启动 | ||
| npx -y @daomar/agentfleet uninstall # 移除自启动 | ||
| agentfleet install # 安装登录自启动 | ||
| agentfleet uninstall # 移除自启动 | ||
| agentfleet stop | ||
@@ -206,2 +245,16 @@ ``` | ||
| <details> | ||
| <summary><strong>初始化(高级)</strong></summary> | ||
| 通常 `run` 和 `submit` 会使用 OneDrive 自动初始化。如需手动控制: | ||
| ```bash | ||
| agentfleet init # 默认使用 OneDrive | ||
| agentfleet init --backend onedrive-business # OneDrive 企业版 | ||
| agentfleet init --backend local-folder --path /shared/fleet # 本地文件夹 | ||
| agentfleet init --force # 重新初始化 | ||
| ``` | ||
| </details> | ||
| <details> | ||
| <summary><strong>工作区结构</strong></summary> | ||
@@ -229,3 +282,3 @@ | ||
| 托管在 **[agentfleet.daomar.dev](https://agentfleet.daomar.dev/)** 的 GitHub Pages 应用是一个 PWA,可用于: | ||
| 托管在 **[agentfleet.daomar.dev/web/](https://agentfleet.daomar.dev/web/)** 的 GitHub Pages 应用是一个 PWA,可用于: | ||
@@ -284,3 +337,3 @@ - 从桌面或移动端提交任务; | ||
| - [npm](https://www.npmjs.com/package/@daomar/agentfleet) — npm 安装包 | ||
| - [Web 仪表板](https://agentfleet.daomar.dev/) — 提交和监控任务 | ||
| - [Web 仪表板](https://agentfleet.daomar.dev/web/) — 提交和监控任务 | ||
| - [关于](https://agentfleet.daomar.dev/about.html) — 架构概览 | ||
@@ -287,0 +340,0 @@ - [贡献指南](CONTRIBUTING.md) — 开发环境 |
AI-detected potential malware
Supply chain riskAI has identified this package as malware. This is a strong signal that the package may be malicious.
Found 1 instance in 1 package
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
Found 2 instances in 1 package
AI-detected potential malware
Supply chain riskAI has identified this package as malware. This is a strong signal that the package may be malicious.
Found 1 instance in 1 package
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
Found 3 instances in 1 package
403078
1.53%4107
1.28%334
18.86%22
-4.35%