@team-agent/installer 0.5.119 → 0.5.120

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.
Files changed (59) hide show
  1. package/Cargo.lock +1 -1
  2. package/Cargo.toml +1 -1
  3. package/README.md +46 -1
  4. package/README.zh.md +46 -1
  5. package/crates/team-agent/src/cli/adapters.rs +11 -0
  6. package/crates/team-agent/src/cli/arguments.rs +401 -0
  7. package/crates/team-agent/src/cli/emit.rs +241 -142
  8. package/crates/team-agent/src/cli/intent/runtime.rs +1139 -0
  9. package/crates/team-agent/src/cli/intent/runtime_tests.rs +584 -0
  10. package/crates/team-agent/src/cli/intent/tests.rs +654 -0
  11. package/crates/team-agent/src/cli/intent.rs +642 -0
  12. package/crates/team-agent/src/cli/mod.rs +49 -5
  13. package/crates/team-agent/src/cli/named_address.rs +10 -1
  14. package/crates/team-agent/src/cli/spec.rs +22 -10
  15. package/crates/team-agent/src/cli/status_port/brief.rs +117 -16
  16. package/crates/team-agent/src/cli/tests/base.rs +6 -1
  17. package/crates/team-agent/src/cli/tests/parser_safety.rs +383 -0
  18. package/crates/team-agent/src/cli/tests/run_delegation.rs +63 -19
  19. package/crates/team-agent/src/cli/tests/verb_install_skill.rs +3 -2
  20. package/crates/team-agent/src/cli/tests/verb_profile.rs +3 -1
  21. package/crates/team-agent/src/contract_runtime/backend.rs +1 -1
  22. package/crates/team-agent/src/lifecycle/launch/quick_start.rs +166 -77
  23. package/crates/team-agent/src/lifecycle/launch.rs +28 -0
  24. package/crates/team-agent/src/lifecycle/restart.rs +17 -0
  25. package/crates/team-agent/src/lifecycle/tests/acceptance_b_batch_red.rs +1 -3
  26. package/crates/team-agent/src/lifecycle/tests/behavioral_diff_264_red.rs +5 -15
  27. package/crates/team-agent/src/lifecycle/tests/claude_compatible_config_red.rs +2 -3
  28. package/crates/team-agent/src/lifecycle/tests/claude_profile_launch_red.rs +2 -3
  29. package/crates/team-agent/src/lifecycle/tests/cli_argv_routing_red.rs +10 -2
  30. package/crates/team-agent/src/lifecycle/tests/clone_agent_preserves_source_tools.rs +8 -1
  31. package/crates/team-agent/src/lifecycle/tests/clone_fork_copilot_perms_red.rs +3 -2
  32. package/crates/team-agent/src/lifecycle/tests/communication_mode_runtime_contract_red.rs +6 -9
  33. package/crates/team-agent/src/lifecycle/tests/copilot_provider_red.rs +7 -5
  34. package/crates/team-agent/src/lifecycle/tests/cursor_mcp_overlay.rs +4 -2
  35. package/crates/team-agent/src/lifecycle/tests/cursor_require_explicit_model_red.rs +5 -2
  36. package/crates/team-agent/src/lifecycle/tests/cursor_restart_resume_red.rs +4 -3
  37. package/crates/team-agent/src/lifecycle/tests/grok_effort_argv_red.rs +2 -4
  38. package/crates/team-agent/src/lifecycle/tests/grok_mcp_overlay_red.rs +3 -4
  39. package/crates/team-agent/src/lifecycle/tests/grok_require_explicit_model_red.rs +5 -4
  40. package/crates/team-agent/src/lifecycle/tests/grok_restart_resume_red.rs +2 -4
  41. package/crates/team-agent/src/lifecycle/tests/launch_spawn.rs +78 -36
  42. package/crates/team-agent/src/lifecycle/tests/phase_b_contracts.rs +8 -4
  43. package/crates/team-agent/src/lifecycle/tests/phase_golden.rs +6 -12
  44. package/crates/team-agent/src/lifecycle/tests/pi_fork_session_inheritance_red.rs +4 -0
  45. package/crates/team-agent/src/lifecycle/tests/startup_latency_contract.rs +1 -3
  46. package/crates/team-agent/src/lifecycle/tests/status_credential_redaction_contract.rs +7 -0
  47. package/crates/team-agent/src/lifecycle/tests/team_in_team_identity_scope_red.rs +1 -3
  48. package/crates/team-agent/src/lifecycle/tests/verify_rs031_window_consistency_red.rs +2 -1
  49. package/crates/team-agent/src/lifecycle/types.rs +10 -0
  50. package/crates/team-agent/src/tmux_backend/tests.rs +37 -0
  51. package/crates/team-agent/src/tmux_backend.rs +8 -1
  52. package/package.json +4 -4
  53. package/skills/team-agent/SKILL.md +71 -54
  54. package/skills/team-agent/command-coverage.json +283 -13
  55. package/skills/team-agent/docs/reference/team-agent-operator.md +220 -0
  56. package/skills/team-agent/references/bug-as-artifact-flow.md +1 -1
  57. package/skills/team-agent/references/recovery-runbook.md +61 -212
  58. package/skills/team-agent/references/team-agent-operator.md +181 -48
  59. package/skills/team-agent/references/team-in-team.md +47 -80
@@ -2217,6 +2217,43 @@ fn kill_session_and_kill_window_argv() {
2217
2217
  );
2218
2218
  }
2219
2219
 
2220
+ #[test]
2221
+ fn issue336_session_listing_accepts_tab_and_literal_escape_without_rewriting_names() {
2222
+ for separator in ["\t", "\\t"] {
2223
+ let (backend, calls) = backend_with(
2224
+ MockResp::Out(ok("")),
2225
+ vec![
2226
+ MockResp::Out(ok(&format!("%7{separator}worker\\tname\n"))),
2227
+ MockResp::Out(ok("%8\n")),
2228
+ ],
2229
+ );
2230
+ backend.preserve_session_before_stop(
2231
+ &SessionName::new("sess"),
2232
+ &[Target::SessionWindow {
2233
+ session: SessionName::new("sess"),
2234
+ window: WindowName::new("worker\\tname"),
2235
+ }],
2236
+ ).unwrap();
2237
+ assert_eq!(calls.lock().unwrap().len(), 4, "separator={separator:?}");
2238
+ }
2239
+ }
2240
+
2241
+ #[test]
2242
+ fn issue336_escaped_listing_keeps_survivors_and_malformed_rows_fail_closed() {
2243
+ let (backend, calls) = backend_with(MockResp::Out(ok("%7\\tworker\n%8\\tleader\n")), vec![]);
2244
+ backend.preserve_session_before_stop(
2245
+ &SessionName::new("sess"), &[Target::Pane(PaneId::new("%7"))],
2246
+ ).unwrap();
2247
+ assert_eq!(calls.lock().unwrap().len(), 1);
2248
+ for row in ["%7 worker", "%7", ""] {
2249
+ let (backend, calls) = backend_with(MockResp::Out(ok(row)), vec![]);
2250
+ assert!(backend.preserve_session_before_stop(
2251
+ &SessionName::new("sess"), &[Target::Pane(PaneId::new("%7"))],
2252
+ ).is_err());
2253
+ assert_eq!(calls.lock().unwrap().len(), 1);
2254
+ }
2255
+ }
2256
+
2220
2257
  #[test]
2221
2258
  fn stop_session_preservation_creates_processless_anchor_by_exact_pane_id() {
2222
2259
  let (be, rec) = backend_with(
@@ -4201,13 +4201,20 @@ impl Transport for TmuxBackend {
4201
4201
  return Err(subprocess_error(list_argv, output));
4202
4202
  }
4203
4203
  for line in output.stdout.lines() {
4204
- let Some((pane, window)) = line.split_once('\t') else {
4204
+ // Some tmux/runner combinations return the literal escape. Split
4205
+ // only the first column boundary; window names are not unescaped.
4206
+ let separator = line.find('\t').map(|at| (at, 1)).into_iter()
4207
+ .chain(line.find("\\t").map(|at| (at, 2)))
4208
+ .min_by_key(|(at, _)| *at);
4209
+ let Some((at, width)) = separator else {
4205
4210
  return Err(TransportError::Subprocess {
4206
4211
  argv: list_argv,
4207
4212
  code: output.code,
4208
4213
  stderr: "tmux returned an invalid session pane listing".to_string(),
4209
4214
  });
4210
4215
  };
4216
+ let (pane, rest) = line.split_at(at);
4217
+ let window = &rest[width..];
4211
4218
  if !targets.iter().any(|target| match target {
4212
4219
  Target::Pane(id) => id.as_str() == pane,
4213
4220
  Target::SessionWindow {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@team-agent/installer",
3
- "version": "0.5.119",
3
+ "version": "0.5.120",
4
4
  "description": "npx installer for Team Agent",
5
5
  "keywords": [
6
6
  "codex",
@@ -20,9 +20,9 @@
20
20
  "team-agent-installer": "npm/install.mjs"
21
21
  },
22
22
  "optionalDependencies": {
23
- "@team-agent/cli-darwin-arm64": "0.5.119",
24
- "@team-agent/cli-darwin-x64": "0.5.119",
25
- "@team-agent/cli-linux-x64": "0.5.119"
23
+ "@team-agent/cli-darwin-arm64": "0.5.120",
24
+ "@team-agent/cli-darwin-x64": "0.5.120",
25
+ "@team-agent/cli-linux-x64": "0.5.120"
26
26
  },
27
27
  "scripts": {
28
28
  "postinstall": "node npm/bincheck.mjs",
@@ -5,27 +5,30 @@ requires_team_agent: ">=0.5.0"
5
5
  ---
6
6
  # Team Agent
7
7
 
8
- The current assistant is the **leader**. Workers use separate role files and report through Team Agent. Start from a tmux-addressable terminal or supported agent pane, in the workspace root (the parent of the team directory).
8
+ Use the authorized **Leader's** native tool context for lifecycle operations. Workers report through their team-scoped MCP tools; loading this skill does not promote a worker to Leader. Operate in the workspace root, not inside another team's role directory.
9
9
 
10
- ## Decide before creating a team
10
+ ## Check the actual CLI
11
+
12
+ Check `team-agent --version`, `team-agent start --help` and `team-agent team --help` before using this guide. It requires the intuitive `start`, `stop`, `team` and `agent` surface. A version string or this skill's compatibility floor is not proof those commands exist. If missing, ask for an authorized installation of a supporting build; do not silently switch binaries, rewrite bindings or fall back to an old creation recipe.
13
+
14
+ ## User decisions come first
11
15
 
12
16
  **The user decides each worker's provider and permission bypass. Do not silently choose Pi, true, or false.** Reuse an explicit user policy when it covers the worker; otherwise explain the choices and ask before starting.
13
17
 
14
- Use existing resources rather than establishing new accounts: `team-agent doctor --workspace . --json` reports discovered tools, but installed does not mean authenticated and an absent entry or unknown auth is not proof of unavailability. For providers supported by `models`, use `team-agent models --provider NAME` to check exact model IDs. Do not inspect credentials, automatically log in, or silently substitute a provider after a failed probe.
18
+ Use existing resources rather than establishing accounts. `team-agent doctor --workspace . --json` reports discovered tools; installed is not authenticated, and an unknown probe is not proof of unavailability. Use `team-agent models --provider NAME` where supported for exact model IDs. Do not inspect credentials, automatically log in, or silently substitute providers.
15
19
 
16
- | Choice | What to explain |
20
+ | Choice | Explain |
17
21
  |---|---|
18
- | Pi | One Agent tool can use several model catalogs; explicit models require a qualified ID such as `openai-codex/gpt-6-luna` |
19
- | Codex | The user's existing Codex workflow, native tools, permissions and resumable sessions |
20
- | Claude / Claude Code | The user's existing Claude workflow, models, native tools and session behavior |
21
- | Bypass `true` | Fewer permission interruptions, but broader automatic execution authority |
22
- | Bypass `false` | Keep the selected tool's native permissions; human confirmation may interrupt unattended work |
22
+ | Pi | Several model catalogs; an explicit model needs a qualified ID such as `openai-codex/gpt-6-luna` |
23
+ | Codex / Claude / other native CLIs | The user's existing workflow, native permissions, model catalog and supported session capabilities |
24
+ | Bypass `true` | Fewer interruptions, broader automatic authority |
25
+ | Bypass `false` | Native permissions remain; human confirmation may interrupt unattended work |
23
26
 
24
- False is **not** a read-only or sandbox guarantee. Native permission capabilities differ between tools. Suggest combinations based on the user's installed tools, subscriptions and task: for example, an explicitly chosen Codex implementer and Claude reviewer, or two Pi workers when those are the available resources. Different workers may use different providers; an existing worker cannot change provider.
27
+ False is **not** a read-only or sandbox guarantee. Different workers may use different providers; an existing worker cannot change provider. Do not invent a model or effort when the user left it unset.
25
28
 
26
- ## Create and start
29
+ ## Prepare once, start every day
27
30
 
28
- Keep the goal in `TEAM.md` and each worker's instructions in `agents/*.md`. The filename stem is the worker's in-team short name.
31
+ Keep the goal in `TEAM.md` and each worker's instructions in `agents/*.md`. The filename stem is the worker's in-team short name:
29
32
 
30
33
  ```text
31
34
  .team/current/
@@ -33,7 +36,7 @@ Keep the goal in `TEAM.md` and each worker's instructions in `agents/*.md`. The
33
36
  agents/reviewer.md
34
37
  ```
35
38
 
36
- For a **new plan**, record the user's two decisions in every role. This example assumes the user selected Pi and bypass false; it is not a default:
39
+ Record provider and boolean bypass in every new role. This example assumes the user explicitly chose Pi and bypass false; it is not a default:
37
40
 
38
41
  ```markdown
39
42
  ---
@@ -43,43 +46,58 @@ dangerously_skip_permissions: false
43
46
  Review the change and report concrete regression risks.
44
47
  ```
45
48
 
49
+ From the authorized Leader context, select the intended workspace/team:
50
+
46
51
  ```sh
47
- team-agent quick-start .team/current
48
- team-agent send reviewer "Review this change"
49
- team-agent inbox reviewer -n 3
52
+ team-agent start --from .team/current --workspace . --team project-team
53
+ team-agent start --workspace . --team project-team
54
+ team-agent send reviewer "Review this change" --workspace . --team project-team
55
+ team-agent inbox leader --workspace . --team project-team -n 3
50
56
  ```
51
57
 
52
- Traditional file-based quick-start/compile behavior remains supported, including legacy minimal role documents; no conversion to CLI-created roles is required. Legacy interpretation is not permission to silently choose settings for a new user plan. Model and effort may remain unset; preserve the existing file compiler's native/default interpretation rather than inventing a model or effort.
58
+ The first `start` creates a complete configured team through the original creation path. Later `start` keeps physically verified, drift-free live seats unchanged and starts stopped non-paused seats, including explicitly stopped seats. It is not a reset. Missing configuration, ambiguous scope or unknown physical identity is a refusal, not permission to overwrite state. `--dry-run` plans without lifecycle effects; final locked admission is still deferred.
59
+
60
+ Accepted/queued send is **not** the worker's answer. Wait for a natural reply/result. `ok: true` with pending readiness is not business readiness. A live no-op does not synchronize edited role bodies or apply changed launch settings.
53
61
 
54
- To add a **new** seat to an existing team, provider and bypass must be explicitly defined in the CLI or role file. A complete traditional role file needs no repeated flags. If both sources define a field, equal values are accepted and **conflicting values are rejected before any write or startup**:
62
+ ## Stop, wake and restart
55
63
 
56
64
  ```sh
57
- # These values must be the user's choices, not inferred defaults.
58
- team-agent add-agent analyst --provider pi --bypass true --prompt "Analyze the proposed change"
59
- # auditor.md already contains the user's provider and bypass decisions.
60
- team-agent add-agent auditor --role-file /absolute/path/to/auditor.md
65
+ team-agent stop reviewer --workspace . --team project-team
66
+ team-agent start reviewer --workspace . --team project-team
67
+ team-agent restart reviewer --workspace . --team project-team
68
+ team-agent stop --workspace . --team project-team --json
69
+ team-agent start --workspace . --team project-team
70
+ team-agent team restart --workspace . --team project-team --json
61
71
  ```
62
72
 
63
- Add creates and immediately starts the seat. Ordinary add rejects an occupied ID, including stopped seats. Disaster recovery has one explicit exception: `add-agent ID --role-file FILE --force` may reuse the existing force-recreate lifecycle only when the registered old pane is positively confirmed dead and no live target cohort exists. A live seat or unknown/missing death proof is refused; force is not a routine configuration-update shortcut. External role files are imported into the team's `agents/ID.md` and left untouched. A file already at that path is used in place, without copying itself.
73
+ | Intent | Rule |
74
+ |---|---|
75
+ | `start AGENT` | Wake a stopped registered seat; verified live/no-drift is a no-op. A RoleOnly seat can be added from its complete role file |
76
+ | `start` | Explicitly activate the selected non-paused roster; do not use it unless that activation is authorized |
77
+ | `stop AGENT` / `stop` | Retain saved session associations; whole-team stop also checks scoped residual resources |
78
+ | `restart AGENT` / `team restart` | Default `--session auto`: resume when proven, otherwise only the original legal fresh fallback. **Auto does not guarantee preserved memory** |
79
+ | `--session preserve` | Require available continuation evidence; refuse before stopping when continuation is known unavailable |
80
+
81
+ Team restart preserves explicitly stopped and paused seats; use `start` when intentionally waking the roster. Paused seats are not implicitly unpaused. A same-named directory makes `restart ID` ambiguous: use `agent restart ID`. `reviewer.v2` remains an agent ID; choose a team source with `--from DIR`, `team start DIR` or an explicit path such as `./roles`.
82
+
83
+ For strict recovery, prefer `team-agent team restart --session preserve --workspace . --team project-team`. Do not convert a refusal or partial/unknown replacement into reset, force or blind retry. Inspect `status`/`doctor` in the same scope first. Native unsupported capabilities remain refusals, never a legacy fallback.
64
84
 
65
- ## Change and start an existing worker
85
+ ## Add or change one worker
66
86
 
67
- **Stop first if it is running.** Start never implicitly kills or restarts a running worker:
87
+ With the user's provider/bypass choices, `start` unifies adding an absent seat and waking an existing one:
68
88
 
69
89
  ```sh
70
- team-agent stop-agent reviewer
71
- team-agent start-agent reviewer --effort high --bypass true
72
- team-agent stop-agent reviewer
73
- team-agent start-agent reviewer --prompt "Review only regression risks; do not change product code"
90
+ team-agent start auditor --role-file /absolute/path/to/auditor.md
91
+ team-agent start analyst --provider pi --bypass false --prompt "Analyze the proposed change"
92
+ team-agent stop reviewer
93
+ team-agent start reviewer --effort high --bypass false
74
94
  ```
75
95
 
76
- Start updates the same role file and recompiles it before normal startup. Omitted options preserve the file's values and body; `--prompt` replaces the permanent role body, not a one-time task message. `--bypass true` and `--bypass false` are explicit values, not bare switches. Model, effort and an existing profile can also be set. Direct file edits followed by start use the same reload path.
96
+ The Pi/false example above still requires the user's explicit choices. File/CLI conflicts are rejected before writing or startup. Omitted settings/body are preserved; `--prompt` replaces the permanent role body, not a one-time task. Stop a running worker before changing settings or instructions. Provider changes are refused. Startup failure restores role/spec bytes and reports failure, not an applied update.
77
97
 
78
- A different `--provider`, including a manually edited role provider, is rejected before launch. A matching provider is allowed. Create a separate ID to use a different engine. If startup fails, the role file and runtime spec are restored to their pre-command contents; the command reports failure, not an applied update.
98
+ Use `agent add/remove/reset/clone/fork` only for those explicit operations. Reset needs intentional approval and `--discard-session`; fork requires `--as NEW_ID`, and `--in-place` is not supported. See [the operator reference](references/team-agent-operator.md) for capability, profile, force and import boundaries. Never put secrets in role text or copy authentication from another directory.
79
99
 
80
- Profiles keep provider authentication, endpoints and custom-model settings local. Imported roles use this team's/workspace's `profiles`, never the original external directory. Prepare a named profile locally through the public profile commands; do not search for or copy external credentials. Never put secrets in `TEAM.md` or a role file. See [the operator reference](references/team-agent-operator.md) for existing profile and field details. Supported metadata also includes `agent_id` (legacy `name`), `role`, `auth_mode`, and `communication_mode`; old `tools`, `permission_mode`, and `label` keys do not configure a worker.
81
-
82
- ## Global native CLI argv (optional)
100
+ ## Optional native CLI argv routing
83
101
 
84
102
  Default OFF; no workspace or provider login is needed to manage routes:
85
103
 
@@ -93,29 +111,28 @@ team-agent route clear pi
93
111
  team-agent route disable
94
112
  ```
95
113
 
96
- `set` replaces one mapping, `add` appends without deduplication, `clear` removes it;
97
- none changes the switch. `enable`/`disable` preserve mappings in `~/.team-agent/argv-routing.json`.
98
- `TEAM_AGENT_CLI_ARGV_ROUTING` overrides the switch: `1/true/on`, `0/false/off` (case-insensitive,
99
- trimmed); invalid values disable routing. Check `persisted_enabled`, `effective_enabled` and
100
- `override_status` rather than assuming `enable` defeats an environment OFF.
114
+ `set` replaces one mapping, `add` appends without deduplication, `clear` removes it; none changes the switch. `enable`/`disable` preserve mappings in `~/.team-agent/argv-routing.json`. `TEAM_AGENT_CLI_ARGV_ROUTING` overrides the switch: `1/true/on`, `0/false/off` (case-insensitive, trimmed); invalid values disable routing. Check `persisted_enabled`, `effective_enabled` and `override_status`.
101
115
 
102
- Keys: `claude`, `codex`, `copilot`, `gemini_cli`, `grok`, `cursor_agent`, `pi`.
103
- Claude/Claude Code share `claude`; aliases `claude_code/claude-code`, `agent/cursor` are accepted.
104
- The first `--` ends control parsing: subsequent tokens, including `--help`, `--json`, empty strings
105
- and `{workspace}`, are literal data. Tokens go after the executable and before its original tail;
106
- there is no shell expansion. Do not route secrets or override framework-managed session/MCP/permission flags.
116
+ Keys: `claude`, `codex`, `copilot`, `gemini_cli`, `grok`, `cursor_agent`, `pi`. Claude/Claude Code share `claude`; aliases `claude_code/claude-code`, `agent/cursor` are accepted. Everything after the first `--`, including `--help`, `--json`, empty strings and `{workspace}`, is literal argv. No shell expansion. Do not route secrets or override framework-managed session/MCP/permission flags.
107
117
 
108
- The current mapping affects the next actual Leader/worker spawn (also restart, single-seat start/reset,
109
- add/clone, Pi new-seat fork and remove rollback), not running/attached processes, dry-run or helper probes.
110
- Enabled bad configuration prevents native spawn; an emergency environment OFF avoids reading it,
111
- while `route disable` will not overwrite a broken file. Pi `--mode rpc` does not provide an RPC host
112
- or change the existing Team Agent transport.
118
+ Mappings affect the next actual native spawn, not running/attached processes, dry-run or helper probes. Invalid enabled configuration refuses spawn; an emergency environment OFF avoids reading it, while `route disable` will not overwrite a broken file. Pi `--mode rpc` does not provide an RPC host or replace Team Agent's transport.
113
119
 
114
- ## Inspect and stop
120
+ ## Observe, communicate and clean up
115
121
 
116
- Use `team-agent status --json` for readiness and the installed command's `--help` for syntax. `ok: true` with `ready: false` means the team is not ready; follow the reported action. Accepted/queued send is not the worker's reply: wait for a natural response or result. Use `<workspace>::<team>/<agent>` when a fully qualified recipient is needed.
122
+ Use `team-agent status --json` (or `team status`) for the concise node projection and `doctor` for diagnosis; `--detail` does not restore old internal status dumps. Use `<workspace>::<team>/<agent>` for an explicitly qualified logical recipient, or the in-team short name. Workers have exactly `send_message`, `report_result` and optional `get_team_status`; lifecycle stays on the authorized CLI. Read [nested teams](references/team-in-team.md) only when explicitly requested and [recovery](references/recovery-runbook.md) for incidents.
117
123
 
118
- Worker MCP provides `send_message`, `report_result`, and `get_team_status`. Lifecycle actions remain on the authorized CLI. See [nested teams](references/team-in-team.md) only when needed. Stop the selected team with `team-agent shutdown --workspace .` when authorized.
124
+ Finish with `team-agent stop --workspace . --team project-team --json` when authorized. Check the actual scoped residual report; exit0 alone is not proof of zero resources. Do not kill shared servers or touch sibling workspaces.
119
125
 
120
- ---
121
- This skill is a concise public guide. Do not infer a tested version from package metadata; verify the installed CLI with `team-agent --version` when version-specific behavior matters.
126
+ ## Compatibility bridges, not the daily workflow
127
+
128
+ Old commands remain available for existing scripts; their output/defaults are not silently rewritten:
129
+
130
+ | Compatibility entry | Preferred daily surface |
131
+ |---|---|
132
+ | `quick-start` | `start --from TEAMDIR` for creation and later `start` for activation |
133
+ | `shutdown` | `stop` / `team stop` |
134
+ | `add-agent` / `start-agent` / `stop-agent` | `agent add` for strict add, or `start AGENT` / `stop AGENT` |
135
+ | `remove-agent` / `reset-agent` / `clone-agent` / `fork-agent` | The corresponding `agent` operation |
136
+ | Bare or explicit-path `restart` | Frozen preserve bridge; deliberate `team restart` defaults to auto |
137
+
138
+ These are not all byte-equivalent aliases: legacy single-seat start refuses a running seat, while new start can prove a no-op. Do not mechanically rename automation, assume unsupported provider capabilities, or infer deployment from package metadata.