ds-status ยท diff

git:20260725.18f8707 to git:20260727.68dec2e

18 added, 0 removed. Audit A to A.

---
name: ds-status
description: "Read-only inspection of the agentic-engineering activation resolver."
user-invocable: true
---
# /ds-status
Read-only inspection of the agentic-engineering activation resolver.
Dumps the resolved global config, project marker, profile, and
first-activation sentinel state. Writes nothing. Always exits 0.
Implementation: `bin/agentic-status` (Python 3 stdlib).
## Usage
```
agentic-status
```
No subcommands, no flags. Reads:
- `~/.claude/agentic-engineering.json` (global config)
- `<cwd>/AGENTS.md` (project marker; resolves through `CLAUDE.md` `@AGENTS.md` import if present)
- `<cwd>/.agentic/.activated` (first-activation sentinel)
- `<cwd>/.agentic/config.json` (project config; surfaces the `deferred_wrap_daemon` toggle - prints its value, or `false` when the file or key is absent)
+ - `<cwd>/.agentic/wrap/lock` plus its `owner.json` / `owner` bodies (wrap-lock state: held / abandoned / free, plus the hold age)
## Output
```
agentic-engineering status
global config: /Users/<you>/.claude/agentic-engineering.json (found)
mode: opt-out (source: global config)
profile: default (source: global)
set_at: 2026-04-15T12:00:00Z
project marker file: /path/to/project/AGENTS.md
marker: none
active: yes (mode=opt-out + marker=none -> active: opt-out activates everywhere unless a project opts out)
sentinel: .agentic/.activated (present)
deferred_wrap_daemon: false (source: .agentic/config.json; out-of-session daemon for deferred /ds-wrap jobs)
+ wrap lock: free
+ Held examples (only when .agentic/wrap/lock exists):
+ wrap lock: held role=agent session=f176f720-a218-4cac-84a0-1489abe7aa1d age=3m
+ wrap lock: held role=agent session=(none) age=10h18m - past the abandonment threshold; the next `agentic-wrap-acquire-lock` clears it if the holder is gone
+
DEPRECATED example (only shown when a legacy preset key is present at some scope):
DEPRECATED: preset key 'strict' (global) resolved to profile=strict; migrate by setting
profile=strict directly - preset support will be removed after the deprecation window.
What this means
Active here: yes. The methodology governs how work gets done in this project.
Profile 'default': single-file behavioral edits run directly with a self-check;
multi-file changes, new files, shared utilities, config, and anything risky
spawn a Worker plus an independent Skeptic review.
(relaxed: single-file behavioral edits, small pure-UI multi-file changes, AND
bounded 2-3-file behavioral edits (connectivity-bound, <=30 changed lines,
zero other Elevated signals) run directly - lighter review, faster iteration.)
(strict: UI-copy tweaks, file renames, and targeted wording fixes are all treated
as Elevated and get Worker + Skeptic - broadest review coverage.)
How to adjust
Change the profile for THIS project:
add a line to /path/to/project/AGENTS.md: agentic-engineering-profile: relaxed (or default / strict)
Change the profile GLOBALLY:
edit /Users/<you>/.claude/agentic-engineering.json -> "profile": "relaxed" | "default" | "strict"
Turn the skill OFF for this project: /ds-disable
Turn it off EVERYWHERE: /ds-disable --global
See every command: /ds-help
Note: deleting the sentinel re-arms the first-activation notice only.
To opt out, use /ds-disable.
```
The `source` annotation on `mode` and `profile` records where
the effective value came from:
- `mode` source: `global config` - the mode was read from a valid
`~/.claude/agentic-engineering.json`; `global config (default; file missing)`
- the config file is missing or malformed, so `mode` falls back to its
`opt-out` default.
- `global` - the profile value comes from a valid `profile:` key in
`~/.claude/agentic-engineering.json`.
- `project` - the value comes from a valid `agentic-engineering-profile:`
line in `AGENTS.md`.
- `global (legacy preset)` - no valid `profile` key at global scope, but a
legacy `preset:` key resolved to this value via the deprecated preset
table (see the DEPRECATED notice, which fires on presence of the legacy
key regardless of whether it wins).
- `project (legacy preset)` - no valid `agentic-engineering-profile:` line
in `AGENTS.md`, but a legacy `agentic-engineering-preset:` marker resolved
to this value.
- `global (default; unset)` - nothing valid at any scope; falls back to the
hardcoded `default`.
- `.agentic/config.json` - the `deferred_wrap_daemon` line comes from the
project config file; when the file or the key is absent, the line prints the
documented default (`false`).
+ - `.agentic/wrap/lock` - the `wrap lock` line reports `free` when the directory
+ is absent and `held role=... session=... age=...` when it exists, appending a
+ "past the abandonment threshold" note once the hold exceeds 30 minutes (with a
+ session id) or 4 hours (without one). It is **advisory, not authoritative**:
+ it reports observable facts and does not re-derive the abandonment predicate,
+ which lives once in `wrapLockAbandoned` (`hooks/lib/wrap-marker.js`) and is
+ acted on only by `agentic-wrap-acquire-lock`. This line exists because **no
+ operator-invocable command could previously reveal a wedged lock** - the
+ 10.3-hour orphan that silently discarded 49 `context.md` writes across 6
+ sessions had to be diagnosed by hand. `context.md` writes are no longer
+ lock-gated, so an abandoned lock is now an inconvenience rather than a
+ data-loss condition, but it still blocks `/ds-wrap` until cleared.
The `active` line carries the derivation that produced the active state -
the `(mode=... + marker=... -> active|inactive: <reason>)` clause - so it is
self-explanatory why the project is or is not governed. The "What this means"
block then explains the resolved profile's review behavior (with the other
two profiles shown as parenthetical contrast), and the "How to adjust" block
lists the exact edits to change the profile or turn the skill off. A
DEPRECATED line appears whenever a legacy `preset` key is present at either
scope, independent of whether it won resolution.
## Sentinel as reset
The `.agentic/.activated` sentinel is the per-project record that the
first-activation notice has already been shown. Deleting it re-arms the
notice only - it does NOT change activation state, the global config,
or the project marker. To actually opt the project out, use
`/ds-disable`.
## Exit code
- `0` - always. The command is read-only and never raises on missing or
malformed input. Missing config, missing AGENTS.md, and parse errors
all render as `missing` / `none` / defaults.