Machine fleet management CLI + MCP for developers
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio · streamable-http · http counts 70 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
machines_agent_status
-
machines_apps_apply
-
machines_apps_diff
-
machines_apps_list
-
machines_apps_plan
-
machines_apps_status
-
machines_backup_apply
-
machines_backup_preview
-
machines_browserplan_fleet
-
machines_cert_apply
-
machines_cert_preview
-
machines_command_matrix
-
machines_compatibility
-
machines_daemon_service_plan
-
machines_daemon_status
-
machines_details
-
machines_diff
-
machines_dispatch_fleet_smoke
-
machines_dns_add
-
machines_dns_list
-
machines_dns_render
-
machines_doctor
-
machines_events_emit
-
machines_events_list
-
machines_events_replay
-
machines_friendly_name_clear
-
machines_friendly_name_get
-
machines_friendly_name_set
-
machines_install_claude_apply
-
machines_install_claude_diff
-
machines_install_claude_preview
-
machines_install_claude_status
-
machines_install_tailscale_apply
-
machines_install_tailscale_preview
-
machines_loop_preflight
-
machines_machine_health
-
machines_manifest
-
machines_manifest_bootstrap
-
machines_manifest_get
-
machines_manifest_remove
-
machines_manifest_validate
-
machines_notes_context
-
machines_notes_trash_policies
-
machines_notifications_add
-
machines_notifications_dispatch
-
machines_notifications_list
-
machines_notifications_remove
-
machines_notifications_test
-
machines_ports
-
machines_route_resolve
-
machines_routing
-
machines_self_test
-
machines_serve_dashboard
-
machines_serve_info
-
machines_setup_apply
-
machines_setup_preview
-
machines_ssh_resolve
-
machines_status
-
machines_sync_apply
-
machines_sync_preview
-
machines_topology
-
machines_webhooks_add
-
machines_webhooks_list
-
machines_webhooks_remove
-
machines_webhooks_test
-
machines_workspace_resolve
-
storage_pull
-
storage_push
-
storage_status
-
storage_sync
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed v0.2.39 · analyzer v33 · 3w ago
danger signals3
- suspicious endpoint 169.254.169.254 (cloud metadata) package/dist/cli/index.js :12118
runcmd.push("( TOKEN=$(curl -sX PUT http://169.254.169.254/latest/api/token -H 'X-aws-ec2-metadata-token-ttl-seconds: 300') && " + 'REGION=$(curl -sH "X-aws-ec2-metadata-token: $TOKEN" http://169.254. - suspicious endpoint 1.1.1.1 package/dist/cli/index.js :22999
internetUrl: "https://1.1.1.1", - credential in logs credential in log package/dist/cli/index.js :25547
console.log(`${result.machineId.padEnd(14)} user=${result.user ?? "(missing)"} passwordSecret=${result.passwordSecretKey} (${secret})`);
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 118
filesystem 11
- fs package/dist/agent/index.js :5524
var st = fs.createReadStream(file); - fs package/dist/cli/index.js :2153
import { existsSync as existsSync2, mkdirSync } from "fs"; - fs package/dist/consumer.js :18
import { existsSync as existsSync4 } from "fs"; - fs package/dist/exact-bun-bootstrap.js :34
} from "fs"; - fs package/dist/index.js :22
import { existsSync, mkdirSync } from "fs"; - fs package/dist/mcp/index.js :22
import { existsSync, readFileSync, realpathSync } from "fs"; - fs package/dist/server/index.js :20
import { existsSync, readFileSync, realpathSync } from "fs"; - fs package/dist/storage.js :22
import { existsSync, mkdirSync } from "fs"; - fs (weak) package/dist/test-profile.js :19
import { existsSync as existsSync2, mkdirSync as mkdirSync2, readFileSync, renameSync, rmSync, writeFileSync } from "fs"; - fs package/postinstall.js :8
import { existsSync, mkdirSync } from "node:fs"; - fs (weak) package/scripts/consumer-conformance.mjs :13
} from "node:fs";
shell / exec 8
- shell package/dist/agent/index.js :7753
import { spawnSync } from "child_process"; - shell package/dist/cli/index.js :3302
import { execFileSync as execFileSync4 } from "child_process"; - shell package/dist/consumer.js :20
import { spawnSync } from "child_process"; - shell package/dist/exact-bun-bootstrap.js :18
import { spawnSync } from "child_process"; - shell package/dist/index.js :1517
import { spawnSync } from "child_process"; - shell package/dist/mcp/index.js :4245
const result = Bun.spawnSync(["bash", "-lc", step.command], { - shell (weak) package/dist/test-profile.js :18
import { execFileSync } from "child_process"; - shell (weak) package/scripts/consumer-conformance.mjs :3
import { spawnSync } from "node:child_process";
network 3
- net package/dist/cli/index.js :14058
const response = await fetch(url, { signal: AbortSignal.timeout(5000) }); - net package/dist/index.js :13394
const response = await fetch(url, { signal: AbortSignal.timeout(5000) }); - net package/dist/mcp/index.js :41
import { createServer } from "http";
secrets 1
- secrets package/dist/server/index.js :975
const secret = process.env["HASNA_MACHINES_API_SIGNING_KEY"] || process.env["API_KEY_SIGNING_SECRET"] || process.env["HASNA_API_SIGNING_KEY"];
database 5
- db package/dist/cli/index.js :2882
import pg2 from "pg"; - db package/dist/index.js :522
import pg from "pg"; - db package/dist/mcp/index.js :9191
import pg from "pg"; - db package/dist/server/index.js :365
import pg from "pg"; - db package/dist/storage.js :522
import pg from "pg";
tool registrations 70
- machines_status package/dist/mcp/index.js :12959
- machines_doctor package/dist/mcp/index.js :12964
- machines_self_test package/dist/mcp/index.js :12965
- machines_apps_list package/dist/mcp/index.js :12968
- machines_apps_status package/dist/mcp/index.js :12969
- machines_apps_diff package/dist/mcp/index.js :12970
- machines_apps_plan package/dist/mcp/index.js :12971
- machines_apps_apply package/dist/mcp/index.js :12972
- machines_manifest package/dist/mcp/index.js :12987
- machines_manifest_validate package/dist/mcp/index.js :12990
- machines_manifest_bootstrap package/dist/mcp/index.js :12993
- machines_manifest_get package/dist/mcp/index.js :12997
show 28 more
- machines_friendly_name_get package/dist/mcp/index.js :12998
- machines_friendly_name_set package/dist/mcp/index.js :12999
- machines_friendly_name_clear package/dist/mcp/index.js :13012
- machines_details package/dist/mcp/index.js :13024
- machines_browserplan_fleet package/dist/mcp/index.js :13035
- machines_notes_context package/dist/mcp/index.js :13049
- machines_notes_trash_policies package/dist/mcp/index.js :13093
- machines_manifest_remove package/dist/mcp/index.js :13109
- machines_agent_status package/dist/mcp/index.js :13113
- machines_daemon_status package/dist/mcp/index.js :13121
- machines_daemon_service_plan package/dist/mcp/index.js :13135
- machines_setup_preview package/dist/mcp/index.js :13163
- machines_setup_apply package/dist/mcp/index.js :13164
- machines_sync_preview package/dist/mcp/index.js :13174
- machines_sync_apply package/dist/mcp/index.js :13175
- machines_topology package/dist/mcp/index.js :13185
- machines_machine_health package/dist/mcp/index.js :13237
- machines_routing package/dist/mcp/index.js :13276
- machines_command_matrix package/dist/mcp/index.js :13291
- machines_loop_preflight package/dist/mcp/index.js :13310
- machines_dispatch_fleet_smoke package/dist/mcp/index.js :13355
- machines_compatibility package/dist/mcp/index.js :13393
- machines_diff package/dist/mcp/index.js :13417
- machines_install_claude_status package/dist/mcp/index.js :13423
- machines_install_claude_diff package/dist/mcp/index.js :13427
- machines_install_claude_preview package/dist/mcp/index.js :13431
- machines_install_claude_apply package/dist/mcp/index.js :13435
- machines_install_tailscale_preview package/dist/mcp/index.js :13452
30 more not shown — this panel samples each group; the count above is the real total.
install hooks 4
- prepack package/package.json :67
bun run verify:pack - prepublishOnly package/package.json :68
bun run verify:release - postinstall package/package.json :69
node postinstall.js - prepare package/package.json :70
bun run build:js
declared dependencies 14
- @modelcontextprotocol/sdk@^1.26.0
- @hasna/contracts@0.14.1
- @hasna/events@^0.1.7
- @hasna/mcp-harness@^0.1.0
- @hasna/paths@0.1.0
- chalk@^5.6.2
- commander@^13.1.0
- pg@^8.16.3
- zod@^3.24.2
- @types/bun@latest
- @types/node@^20.14.0
- @types/pg@^8.15.6
show 2 more
- bun-types@1.3.14
- typescript@^5.7.3
clipboard 1
- clipboard shell call package/dist/cli/index.js :22664
const result = Bun.spawnSync(["pbpaste"], { stdout: "pipe", stderr: "pipe" });
transport_posture 1
- binds all interfaces (0.0.0.0) package/dist/cli/index.js :22752
server.listen(port, "0.0.0.0", () => {});