---
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.
