@mutagent/cli 0.2.21 → 0.2.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
  MutagenT CLI is the command-line client for the MutagenT AI platform. It handles
20
20
  authentication, BYOK LLM providers, workspace Environments, managed agents, cloud
21
- sandboxes and Helix sessions, and the standalone Helix binary installer.
21
+ sandboxes and Helix sessions, and the Helix binary installer.
22
22
 
23
23
  **Status:** all commands and flags below were verified against `mutagent --help`
24
24
  (and each subcommand's `--help`) on this branch. `sandbox` is internal (everyday
@@ -47,7 +47,7 @@ For where the CLI sits relative to the rest of the platform, see the
47
47
  - **LLM providers (BYOK)**: configure and test your own provider keys (`mutagent providers`), or copy them from a local Helix login (`mutagent providers mirror`)
48
48
  - **Workspace Environments**: `mutagent env` holds the variables and secrets an agent's tools need, separate from LLM provider keys
49
49
  - **Managed agents**: `mutagent agent` checks, packages, deploys and runs `agent.md` folders; `mutagent helix agent @slug` runs a deployed one in the cloud
50
- - **Helix installer**: `mutagent install helix` installs the standalone Helix binary into `~/.mutagent/bin` (no login needed)
50
+ - **Helix installer**: `mutagent install helix` installs the Helix binary into `~/.mutagent/bin` (no login needed)
51
51
  - **Claude Code integration**: install the CLI skill (`mutagent skills install`) and session-telemetry hooks (`mutagent hooks install`)
52
52
  - **Built-in feedback**: `mutagent feedback send` reports bugs and product feedback, optionally with your coding-agent session transcript
53
53
 
package/dist/bin/cli.js CHANGED
@@ -19762,15 +19762,18 @@ var LEAVES = {
19762
19762
  get: {
19763
19763
  details: `Reads a revision's agentspec, parsed: id, kind, version, description,
19764
19764
  criteria, tools, skills, harnesses, targets and instructions. Without --revision:
19765
- the default slot's active revision, else the newest. A revision whose spec cannot
19766
- be read answers status unreadable with the reason (exit 0: it is data).
19765
+ the default slot's active revision, else the newest. A revision with no
19766
+ agentspec answers status absent (agent.md defines the agent; the spec is
19767
+ optional). A revision whose spec cannot be read answers status unreadable with
19768
+ the reason. Both exit 0: they are data.
19767
19769
  --out writes the revision's raw agentspec.yaml bytes to a file; replacing an
19768
19770
  existing file needs --force.
19769
19771
  Examples:
19770
19772
  mutagent agent spec get invoice-pricing --json
19771
19773
  mutagent agent spec get invoice-pricing --out agentspec.yaml --force`,
19772
- directive: ` Read-only on the platform. --json prints { slug, status, revision, path, spec } or,
19773
- when unreadable, { status: "unreadable", reason }. With --out, 'written' names the file
19774
+ directive: ` Read-only on the platform. --json prints { slug, status, revision, path, spec };
19775
+ { status: "absent", path: null } when the revision has no agentspec (not an error);
19776
+ or { status: "unreadable", reason } when one is there but fails to read. With --out, 'written' names the file
19774
19777
  and its digest. Replacing a file is destructive: confirm with the user before --force.`
19775
19778
  },
19776
19779
  diff: {
@@ -19826,29 +19829,40 @@ function parseRevision(value) {
19826
19829
  usageError("--revision must be a revision such as v3 or 3.", "spec get");
19827
19830
  return number;
19828
19831
  }
19829
- function printCard(result) {
19832
+ function specCardLines(result) {
19830
19833
  const where = `${String(result.slug)} v${String(result.revision)} ${typeof result.path === "string" ? result.path : "(no agentspec)"}`;
19834
+ if (result.status === "absent") {
19835
+ return [
19836
+ `${chalk2.bold(where)} ${chalk2.dim("no spec")}`,
19837
+ chalk2.dim(" agent.md defines this agent, so an agentspec is optional.")
19838
+ ];
19839
+ }
19831
19840
  if (result.status !== "readable") {
19832
- console.log(`${chalk2.bold(where)} ${chalk2.yellow("unreadable")}`);
19833
- console.log(` ${String(result.reason)}`);
19834
- } else {
19835
- const spec = result.spec;
19836
- console.log(`${chalk2.bold(where)} ${chalk2.dim(`profile ${spec.profile}`)}`);
19837
- console.log(` id: ${spec.id} kind: ${spec.kind} version: ${spec.version || "(none)"}`);
19838
- if (spec.description)
19839
- console.log(` ${spec.description}`);
19840
- console.log(` criteria (${String(spec.criteria.length)}):`);
19841
- for (const c of spec.criteria)
19842
- console.log(` ${c.id || "-"} ${c.type ? `[${c.type}] ` : ""}${c.statement}`);
19843
- for (const [label, values] of [["tools", spec.tools], ["skills", spec.skills], ["harnesses", spec.harnesses]]) {
19844
- console.log(` ${label}: ${values.length > 0 ? values.join(", ") : "-"}`);
19845
- }
19846
- console.log(` targets: ${spec.targets.length > 0 ? spec.targets.map((t) => `${t.type}:${t.name}`).join(", ") : "-"}`);
19847
- if (spec.instructions)
19848
- console.log(` instructions: ${spec.instructions.split(`
19841
+ return [`${chalk2.bold(where)} ${chalk2.yellow("unreadable")}`, ` ${String(result.reason)}`];
19842
+ }
19843
+ const spec = result.spec;
19844
+ const lines = [
19845
+ `${chalk2.bold(where)} ${chalk2.dim(`profile ${spec.profile}`)}`,
19846
+ ` id: ${spec.id} kind: ${spec.kind} version: ${spec.version || "(none)"}`
19847
+ ];
19848
+ if (spec.description)
19849
+ lines.push(` ${spec.description}`);
19850
+ lines.push(` criteria (${String(spec.criteria.length)}):`);
19851
+ for (const c of spec.criteria)
19852
+ lines.push(` ${c.id || "-"} ${c.type ? `[${c.type}] ` : ""}${c.statement}`);
19853
+ for (const [label, values] of [["tools", spec.tools], ["skills", spec.skills], ["harnesses", spec.harnesses]]) {
19854
+ lines.push(` ${label}: ${values.length > 0 ? values.join(", ") : "-"}`);
19855
+ }
19856
+ lines.push(` targets: ${spec.targets.length > 0 ? spec.targets.map((t) => `${t.type}:${t.name}`).join(", ") : "-"}`);
19857
+ if (spec.instructions)
19858
+ lines.push(` instructions: ${spec.instructions.split(`
19849
19859
  `)[0] ?? ""}${spec.instructions.includes(`
19850
19860
  `) ? " …" : ""}`);
19851
- }
19861
+ return lines;
19862
+ }
19863
+ function printCard(result) {
19864
+ for (const line of specCardLines(result))
19865
+ console.log(line);
19852
19866
  const written = result.written;
19853
19867
  if (written)
19854
19868
  console.log(chalk2.green(`✓ Wrote ${written.file} (${String(written.bytes)} bytes)`));
@@ -23273,7 +23287,7 @@ name: mutagent-cli
23273
23287
  description: |
23274
23288
  Mutagent CLI - the command-line client for the Mutagent platform.
23275
23289
  Guides coding agents through setup (login, init, providers, workspaces),
23276
- installing the standalone Helix binary, and sending
23290
+ installing Helix, and sending
23277
23291
  product feedback, and deploying and running managed agents (agent.md folders).
23278
23292
  Triggers: "mutagent", "mutagent cli", "mutagent login", "set up mutagent",
23279
23293
  "install diagnostics", "install evaluator", "install helix", "mutagent install",
@@ -23407,7 +23421,7 @@ skill never inlines flags. The active surface:
23407
23421
  | \`usage\` | Show usage + quota | [workflows/setup.md](./workflows/setup.md) |
23408
23422
  | \`skills install\` | Install this skill into a project | [workflows/setup.md](./workflows/setup.md) |
23409
23423
  | \`hooks install\` | Install Claude Code telemetry hooks | [workflows/setup.md](./workflows/setup.md) |
23410
- | \`install helix\` | Install the standalone Helix binary (diagnostics / evaluator are retired) | [workflows/install.md](./workflows/install.md) |
23424
+ | \`install helix\` | Install the Helix binary (diagnostics / evaluator are retired) | [workflows/install.md](./workflows/install.md) |
23411
23425
  | \`agent\` | Check, pack, run locally, deploy, activate, list, inspect and retire managed agents | [workflows/agent-deployment.md](./workflows/agent-deployment.md) |
23412
23426
  | \`feedback send\` | Send product feedback | [workflows/feedback.md](./workflows/feedback.md) |
23413
23427
 
@@ -23432,7 +23446,7 @@ Match the user's first request. Load ONLY the matching subfile per the table. Do
23432
23446
  | User said / signal detected | Load subfile | Why |
23433
23447
  |---|---|---|
23434
23448
  | "log in", "authenticate", "set up mutagent", "init", "which workspace", "what models", "usage", "quota", "install the skill", "install hooks" | [workflows/setup.md](./workflows/setup.md) | Auth + project setup + discovery commands |
23435
- | "install helix", "install diagnostics", "install evaluator", "add mutagent package" | [workflows/install.md](./workflows/install.md) | Standalone Helix binary installer, no login (diagnostics/evaluator are retired → helix) |
23449
+ | "install helix", "install diagnostics", "install evaluator", "add mutagent package" | [workflows/install.md](./workflows/install.md) | Helix binary installer, no login (diagnostics/evaluator are retired → helix) |
23436
23450
  | "agent.md", "deploy agent", "managed agent", "mutagent agent", "helix agent @slug" | [workflows/agent-deployment.md](./workflows/agent-deployment.md) | agent.md folder → check → deploy to a slot → run with \`helix agent @slug\` |
23437
23451
  | "send feedback", "report a bug", "file feedback", "the CLI crashed" | [workflows/feedback.md](./workflows/feedback.md) | Product feedback (+ optional transcript) |
23438
23452
  | Unclear / first time | run \`mutagent --help --json\` then reroute | Discover the surface before acting |
@@ -23444,7 +23458,7 @@ Match the user's first request. Load ONLY the matching subfile per the table. Do
23444
23458
  | File | WHEN to load | WHY |
23445
23459
  |---|---|---|
23446
23460
  | [workflows/setup.md](./workflows/setup.md) | User is onboarding: login, init, config, workspaces, providers, usage, skill/hooks install | Auth + configuration + discovery |
23447
- | [workflows/install.md](./workflows/install.md) | User wants to install Helix | \`install helix\`: the standalone binary into ~/.mutagent/bin |
23461
+ | [workflows/install.md](./workflows/install.md) | User wants to install Helix | \`install helix\`: the Helix binary into ~/.mutagent/bin |
23448
23462
  | [workflows/agent-deployment.md](./workflows/agent-deployment.md) | User wants to deploy or run a managed agent, or run an agent.md locally | Slots (\`--env\`), revisions (\`vN\`), \`@slug\` runs, rollback and retire |
23449
23463
  | [workflows/feedback.md](./workflows/feedback.md) | User wants to send feedback or report a bug | \`feedback send\` + \`--attach-transcript\` |
23450
23464
 
@@ -23673,8 +23687,8 @@ how they learn something sensitive was in the file at all.
23673
23687
  "workflows/install.md": `---
23674
23688
  name: mutagent-cli-workflows-install
23675
23689
  description: |
23676
- Install workflow. \`mutagent install helix\` installs the standalone Helix
23677
- binary into ~/.mutagent/bin, the same result as
23690
+ Install workflow. \`mutagent install helix\` installs the Helix binary
23691
+ into ~/.mutagent/bin, the same result as
23678
23692
  \`curl -fsSL https://install.mutagent.io/helix | bash\`. No login needed.
23679
23693
  \`diagnostics\` and \`evaluator\` are RETIRED as install targets — both skills
23680
23694
  now ship inside helix.
@@ -23691,7 +23705,7 @@ triggers:
23691
23705
  # Workflow — Install Helix
23692
23706
 
23693
23707
  > **\`helix\` is the only install target.** \`mutagent install helix\` installs the
23694
- > standalone Helix binary at \`~/.mutagent/bin/helix\`, the same result as
23708
+ > Helix binary (the Helix harness) at \`~/.mutagent/bin/helix\`, the same result as
23695
23709
  > \`curl -fsSL https://install.mutagent.io/helix | bash\`.
23696
23710
  >
23697
23711
  > \`diagnostics\` and \`evaluator\` are **retired** — their npm packages are no
@@ -24003,7 +24017,7 @@ confirm before running (Core Rule 5).
24003
24017
  ## Cross-references
24004
24018
 
24005
24019
  - [SKILL.md](../SKILL.md) → Core Rules + Task Router
24006
- - [workflows/install.md](./install.md) → install the standalone Helix binary (diagnostics / evaluator are retired)
24020
+ - [workflows/install.md](./install.md) → install the Helix binary (diagnostics / evaluator are retired)
24007
24021
  `
24008
24022
  };
24009
24023
  var SKILL_CONTENT = SKILL_FILES["SKILL.md"] ?? "";
@@ -24187,7 +24201,7 @@ It never prompts. Without a sign-in it exits 3 (AUTH_REQUIRED) and names the sig
24187
24201
  } else {
24188
24202
  console.log("");
24189
24203
  console.log(chalk17.bold(` What's next:`));
24190
- console.log(` ${chalk17.cyan("mutagent install helix".padEnd(30))}${chalk17.dim("# the standalone Helix binary")}`);
24204
+ console.log(` ${chalk17.cyan("mutagent install helix".padEnd(30))}${chalk17.dim("# the Helix binary")}`);
24191
24205
  console.log("");
24192
24206
  console.log(chalk17.dim(" Your coding agent now knows these workflows — restart it to pick up"));
24193
24207
  console.log(chalk17.dim(' the skill, then just say "set up Mutagent on this project".'));
@@ -25493,7 +25507,7 @@ var BY_DESIGN_ENTRIES = [
25493
25507
  id: "mutagent-helix-not-on-npm",
25494
25508
  title: "@mutagent/helix is not published to npm — on purpose",
25495
25509
  looksLike: pairPatterns(HELIX_PKG, NOT_FOUND),
25496
- reality: "Helix is not distributed through the public npm registry, so a 404 there is expected. It ships as a standalone binary from install.mutagent.io, verified against the checksums published beside it. Install it with: mutagent install helix"
25510
+ reality: "Helix is not distributed through the public npm registry, so a 404 there is expected. It ships as the Helix binary from install.mutagent.io, verified against the checksums published beside it. Install it with: mutagent install helix"
25497
25511
  },
25498
25512
  {
25499
25513
  id: "trace-lives-in-a-different-binary",
@@ -25818,13 +25832,13 @@ init_errors();
25818
25832
  import { Command as Command12 } from "commander";
25819
25833
  import chalk23 from "chalk";
25820
25834
  function createInstallCommand(deps) {
25821
- const install = new Command12("install").description("Install the standalone Helix binary on this machine").argument("<package>", `Package to install: ${VALID_PACKAGES.join(", ")}`).option("--channel <channel>", `Release channel: ${HELIX_CHANNELS.join(" or ")} (default: latest)`).addHelpText("after", `
25835
+ const install = new Command12("install").description("Install the Helix binary on this machine").argument("<package>", `Package to install: ${VALID_PACKAGES.join(", ")}`).option("--channel <channel>", `Release channel: ${HELIX_CHANNELS.join(" or ")} (default: latest)`).addHelpText("after", `
25822
25836
  ${chalk23.bold("Examples:")}
25823
25837
  ${chalk23.dim("$")} mutagent install helix
25824
25838
  ${chalk23.dim("$")} mutagent install helix --channel candidate
25825
25839
  ${chalk23.dim("$")} mutagent install helix --json
25826
25840
 
25827
- ${chalk23.bold("helix")}: the standalone Helix binary, the same one
25841
+ ${chalk23.bold("helix")}: the Helix binary (the Helix harness), the same one
25828
25842
  \`curl -fsSL https://install.mutagent.io/helix | bash\` installs. It downloads
25829
25843
  helix-<os>-<arch> for macOS or Linux (x64, arm64), verifies it against
25830
25844
  checksums.txt from the same origin, writes ~/.mutagent/bin/helix and points the
@@ -30212,7 +30226,7 @@ function createHelixCommand() {
30212
30226
  " Choose -p (one-shot), --mode json or --mode rpc (a steerable session) explicitly.",
30213
30227
  " Without --prime the full Helix orchestrator runs; --prime runs the lean Prime agent.",
30214
30228
  " Keep the session reference (hs1_...) printed on stderr; attach, send, signal and checkpoint take it.",
30215
- " mutagent install helix installs the standalone Helix binary on this machine; this command runs it in the cloud.",
30229
+ " mutagent install helix installs the Helix binary on this machine; this command runs it in the cloud.",
30216
30230
  " Inside a git checkout, pass the git remote's owner/name to start with it checked out: --repository <owner/name> [--branch <name>].",
30217
30231
  " On a refusal, show the returned fix: the Run: lines, the notes, and who has to act; do not invent other commands.",
30218
30232
  " In --mode rpc/json a launch refusal is one JSON line on stderr: {success:false, code, error, suggestedAction,",
@@ -37860,7 +37874,7 @@ ${chalk64.yellow("Get started:")}
37860
37874
  ${chalk64.dim("Create an Environment: the variables and secrets a sandbox gets")}
37861
37875
  4. mutagent helix --env staging -p "<task>"
37862
37876
  ${chalk64.dim("Run Helix on the task in a cloud sandbox and print its answer")}
37863
- ${chalk64.dim("To run Helix on this machine instead: mutagent install helix installs the standalone binary")}
37877
+ ${chalk64.dim("To run Helix on this machine instead: mutagent install helix installs the Helix binary")}
37864
37878
 
37865
37879
  ${chalk64.yellow("Managed agents:")}
37866
37880
  mutagent agent deploy <agent.md> ${chalk64.dim("Check, upload and activate an agent.md folder (--env names the Environment whose slot is used)")}
@@ -37980,4 +37994,4 @@ if (process.env.CLI_VERSION) {
37980
37994
  }
37981
37995
  runCli(process.argv.slice(2), cliVersion);
37982
37996
 
37983
- //# debugId=6B702C81145D372764756E2164756E21
37997
+ //# debugId=02AF2BDB9E29C77264756E2164756E21
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mutagent/cli",
3
- "version": "0.2.21",
3
+ "version": "0.2.23",
4
4
  "description": "Bun-native CLI for the MutagenT AI platform - auth, provider config, and lifecycle-tool installer for AI-native workflows",
5
5
  "type": "module",
6
6
  "bin": {