agentwheel 0.21.7 → 0.22.1

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
@@ -139,6 +139,25 @@ refused unless `--carry-drift` is passed: the dry-run prints the runtime hash, t
139
139
  `--expected-runtime-hash <sha256>`, and the manifest keeps the recorded hash so the next install
140
140
  still reports the drift. Merge and managed-block entries never carry drift.
141
141
 
142
+ Qualify a Fleet-owned source with `--from-fleet <id>` together with its exact
143
+ `--from-workspace-root`; use `--to-fleet <id>` for a Fleet-owned destination. Both IDs must
144
+ be registered at the specified roots. These options qualify ownership, whereas `--fleet`
145
+ selects the governing workspace. `--from-fleet` cannot be combined with
146
+ `--from-unknown-owner`. For example, preview returning one entry to its original plain owner:
147
+
148
+ ```bash
149
+ agentwheel ownership handoff skills/example-skill --local --agent local-codex --installation-type user \
150
+ --source-state-key codex.user.existing-state \
151
+ --from-workspace-root /fleet/control --from-fleet example-fleet \
152
+ --to-workspace-root /original/workspace --dry-run
153
+ ```
154
+
155
+ Reverse handoffs require a fresh reviewed plan against the post-handoff state; they do not
156
+ reuse old manifest revisions or erase audit history. For run-as targets, also pass the reviewed
157
+ `--plan-digest` and `--expected-inventory-revision` when applying. The qualified old/new owner
158
+ identities are included in the native plan, its digest and the audit. Each handoff changes the
159
+ inventory revision, so review subsequent operations against their exact intermediate states.
160
+
142
161
  Use `--source-state-key <exact-key>` when an existing source manifest must be selected explicitly.
143
162
  This is a command-local equivalent of a named agent's `stateKey`; it does not edit agent configuration,
144
163
  move state files, or reconstruct graph locks. The key must be canonical and match the selected adapter
@@ -422,6 +441,50 @@ current directory, then fallback to the current directory. `--all-detected` is a
422
441
  for applying to every runtime marker found in the current directory or `--target-root`; `--all` remains
423
442
  reserved for configured agents.
424
443
 
444
+ ### Linux service-user targets
445
+
446
+ A named `local-run-as` agent installs into another non-root account's passwd home.
447
+ Run Agentwheel from the caller's workspace: sources, graph locks and receipts stay
448
+ with the caller; confined reads, writes, manifests and rollback run as the service.
449
+ A non-login account works with an explicitly configured noninteractive sudo grant.
450
+ Add the agent/profile to a workspace that already declares its source packages:
451
+
452
+ ```jsonc
453
+ {
454
+ "schemaVersion": 4,
455
+ "agents": {
456
+ "service": {
457
+ "adapter": "openclaw",
458
+ "root": "/home/example",
459
+ "transport": "local-run-as",
460
+ "runAs": "example",
461
+ "installationType": "user"
462
+ }
463
+ },
464
+ "profiles": { "service": { "runtimes": [{ "agent": "service" }] } }
465
+ }
466
+ ```
467
+
468
+ ```bash
469
+ agentwheel plan --local --profile service
470
+ agentwheel --reason "Install reviewed service profile" install --local --profile service
471
+ ```
472
+
473
+ Require durable journaling in the workspace mutation policy while retaining its
474
+ revision policy. Linux 5.6+ `openat2`, Python 3 and immutable worker/interpreter
475
+ paths are required. OpenClaw validation additionally needs Linux POSIX ACLs and a
476
+ trusted immutable OpenClaw package; includes, programmatic adapters, arbitrary
477
+ commands and runtime reloads are rejected. See the [transport requirements and
478
+ sudo example](docs/design/artifact-harness-compatibility.md#built-in-matrix).
479
+
480
+ Changing transport creates a distinct state identity. Inspect legacy claims with
481
+ `ownership recovery-plan`, then review the exact JSON plan from `adopt-legacy`,
482
+ `retire-stale`, `release-claim` or `handoff --dry-run --json`. Apply only with its
483
+ matching digest and revisions. These commands preserve runtime bytes and modes;
484
+ a caller-home manifest is never reused as service-home ownership evidence.
485
+ Same-fleet normalization is limited to one service endpoint. Cross-account
486
+ migration and runtime restarts are separate operations.
487
+
425
488
  ### Target state identity
426
489
 
427
490
  Graph-backed installs keep two target fingerprints with different purposes: