Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
89 commits
Select commit Hold shift + click to select a range
d111802
docs: add versioned agent-client capability matrix and policy controls
roodboi Oct 12, 2026
58c485a
fix(mcp): harden run argv and tool input contract
roodboi Oct 12, 2026
c6c0db3
fix(env): harden legacy env key files and AES-GCM envelope parsing
roodboi Oct 12, 2026
de862d7
Merge remote-tracking branch 'origin/next' into w14-rework
roodboi Oct 12, 2026
dc88c6b
Merge remote-tracking branch 'origin/next' into w06-rework
roodboi Oct 12, 2026
ffeecce
fix(agents): generate capability matrix doc and parse all guidance co…
roodboi Oct 12, 2026
56bac3a
fix(mcp): make typed refusals value-free and keep unknown-tool in-band
roodboi Oct 12, 2026
12e80af
chore: merge origin/next into wf/w15-w5-6
roodboi Oct 12, 2026
cd76b26
test(env): pin AES-GCM IV, size and tag-length guards with discrimina…
roodboi Oct 12, 2026
bcf88ec
fix(init): stop writing repo-local agent files by default
roodboi Oct 12, 2026
c005262
fix(env): resolve --env base and default the same way on every command
roodboi Oct 12, 2026
6136946
fix(agents): count corrupted and unreadable integrations as drift
roodboi Oct 12, 2026
9854d1b
test(env): pin the console logger backend for CLI refusal tests
roodboi Oct 12, 2026
6e1ff63
test(mcp): assert closed ambiguous_project refusal in project-name suite
roodboi Oct 12, 2026
1f8b51e
chore(x01): temporary witness cost trace for hosted measurement
roodboi Oct 12, 2026
0911e6d
perf(storage): coalesce witness helper work per native command
roodboi Oct 12, 2026
eb9a678
chore(x01): revert temporary witness cost trace
roodboi Oct 12, 2026
7b2ccfc
test(e2e): restore the networks scenario budget after witness coalescing
roodboi Oct 12, 2026
fa7741c
Merge remote-tracking branch 'origin/next' into wf/x03-witness-probes
roodboi Oct 12, 2026
37f093a
perf(storage): make witness engine and executable fences cheaper
roodboi Oct 12, 2026
6a4e118
chore(x03): temporary witness probe trace for hosted measurement
roodboi Oct 12, 2026
2b11ed3
fix(storage): keep closed probe cancellation for direct engine-ID fences
roodboi Oct 12, 2026
a777bc4
test(storage): pin witness fence counts and refusal controls
roodboi Oct 12, 2026
994ddb8
chore(x03): revert temporary witness probe trace
roodboi Oct 12, 2026
3edbd54
feat(agents): package offline skill references and the HACK-P pattern…
roodboi Oct 12, 2026
726cc27
test(e2e): add agent-surface-freeze negative control for guidance writes
roodboi Oct 12, 2026
9b971fa
ci: add gated Bun crash experiment and read-only crash census
roodboi Oct 12, 2026
1342871
perf(storage): read engine identity directly for docker context selec…
roodboi Oct 12, 2026
c2ecf9c
chore(x04): temporary witness probe trace for hosted measurement
roodboi Oct 12, 2026
5cf9f0f
chore(x04): revert temporary witness probe trace
roodboi Oct 12, 2026
ebe0539
test(agents): cover reference generation and reference-style and HTML…
roodboi Oct 12, 2026
6b54980
test: keep the Bun crash loop tests free of real crash reports
roodboi Oct 12, 2026
7a05b84
Merge branch 'next' into wf/w15-w5-6
roodboi Oct 12, 2026
c00468c
Merge branch 'next' into wf/w06-w5-3
roodboi Oct 12, 2026
e9b1252
Merge branch 'next' into wf/w13-w5b-2
roodboi Oct 12, 2026
af786b5
Merge branch 'next' into wf/w10-w5b-0
roodboi Oct 12, 2026
9db4dba
Merge branch 'next' into wf/w14-w5-5
roodboi Oct 12, 2026
5a731cc
Merge remote-tracking branch 'origin/wf/w06-w5-3' into train/queue-pr…
roodboi Oct 12, 2026
38d9d7f
Merge remote-tracking branch 'origin/wf/w14-w5-5' into train/queue-pr…
roodboi Oct 12, 2026
d50e935
Merge remote-tracking branch 'origin/wf/w15-w5-6' into train/queue-pr…
roodboi Oct 12, 2026
8bab674
Merge remote-tracking branch 'origin/wf/w10-w5b-0' into train/queue-p…
roodboi Oct 12, 2026
26958c9
Merge remote-tracking branch 'origin/wf/w13-w5b-2' into train/queue-p…
roodboi Oct 12, 2026
07a1834
Merge remote-tracking branch 'origin/wf/w07-w6-3' into train/queue-pr…
roodboi Oct 12, 2026
a92e3ab
Merge remote-tracking branch 'origin/wf/w02-w6-1' into train/queue-pr…
roodboi Oct 12, 2026
3e261d5
Merge remote-tracking branch 'origin/wf/w05-w6-2' into train/queue-pr…
roodboi Oct 12, 2026
6b22e00
test(patterns): add validated HACK-P01 and HACK-P02 example fixtures
roodboi Oct 12, 2026
b07121f
feat(exec): warn value-free when a running service's env changed sinc…
roodboi Oct 12, 2026
9f20366
fix(env): write .hack/.env and the encrypted store atomically with 0600
roodboi Oct 12, 2026
42e7b3b
fix(mcp): separate log cutoffs from backend failures
roodboi Oct 12, 2026
e2c41a9
fix(mcp): align budget docs with log cutoffs and keep byte-cut failures
roodboi Oct 12, 2026
cea44f8
feat(mcp): add exec, doctor, env explain/keys and instances tools
roodboi Oct 12, 2026
85c67b0
fix(ci): allowlist the synthetic MCP inspect-tool canary for gitleaks
roodboi Oct 12, 2026
10b6d73
fix(agents): point the env matrix bullet at the offline env guide
roodboi Oct 12, 2026
77da332
Merge remote-tracking branch 'origin/wf/w13-w5b-2' into train/queue-p…
roodboi Oct 12, 2026
4e3acee
test(exec): cover failed targeted restart env digest handling
roodboi Oct 12, 2026
cb665d5
fix(env): scope the env-file symlink refusal doc to write paths
roodboi Oct 12, 2026
3a6f73c
docs(mcp): clarify which instances hack.project.instances lists
roodboi Oct 12, 2026
c2b41ff
chore: merge train/queue-preview into wf/y3-envfile-b6
roodboi Oct 12, 2026
d9a5627
chore: merge train/queue-preview into wf/y1-logs-b6
roodboi Oct 12, 2026
09b4e83
Merge remote-tracking branch 'origin/train/queue-preview' into wf/y4-…
roodboi Oct 12, 2026
5afaf19
Merge remote-tracking branch 'origin/train/queue-preview' into wf/y5-…
roodboi Oct 12, 2026
36cd272
test(e2e): keep Hack diagnostics out of exec-stale-env probe output
roodboi Oct 12, 2026
b9ae28c
chore: merge wf/y1-logs-b6 into wf/y2-mcptools-b6
roodboi Oct 12, 2026
919de8b
test(e2e): reproduce dependency config-hash drift for hack run/exec
roodboi Oct 12, 2026
de55236
feat(env): accept secret values on stdin with --value-stdin
roodboi Oct 12, 2026
5078855
feat(doctor): add value-free env key strength diagnostic
roodboi Oct 12, 2026
5f8cb79
fix(logger): pass messages to gum after an end-of-options marker
roodboi Oct 12, 2026
378f75f
fix(env): refuse invalid env key arguments without echoing them
roodboi Oct 12, 2026
4acac81
fix(env): refuse env scope arguments without echoing them
roodboi Oct 12, 2026
b1bc6db
fix(env): refuse value-bearing --env, --project and --target without …
roodboi Oct 12, 2026
0a26c64
Merge branch 'next' into wf/c5-confighash-b7
roodboi Oct 12, 2026
07413d0
Merge branch 'next' into wf/c4-keydiag-b7
roodboi Oct 12, 2026
6a043c0
Merge branch 'next' into wf/c6-gum-dash-b7
roodboi Oct 12, 2026
13165f9
Merge branch 'next' into wf/y4-patterns-b6
roodboi Oct 12, 2026
92c2ee1
Merge branch 'next' into wf/y5-staleenv-b6
roodboi Oct 12, 2026
4243d60
Merge branch 'next' into wf/y3-envfile-b6
roodboi Oct 12, 2026
c044445
Merge branch 'next' into wf/y1-logs-b6
roodboi Oct 12, 2026
6dadbe5
Merge branch 'wf/y1-logs-b6' into wf/y2-mcptools-b6
roodboi Oct 12, 2026
ed7d2f4
Merge branch 'next' into wf/c1-stdin-b7
roodboi Oct 12, 2026
989fcea
Merge branch 'wf/c6-gum-dash-b7' into wf/y3-envfile-b6
roodboi Oct 12, 2026
c6055dd
Merge branch 'wf/y3-envfile-b6' into wf/c4-keydiag-b7
roodboi Oct 12, 2026
6a754df
Merge branch 'wf/c4-keydiag-b7' into wf/y4-patterns-b6
roodboi Oct 12, 2026
ef04f02
Merge branch 'wf/y4-patterns-b6' into wf/c5-confighash-b7
roodboi Oct 12, 2026
b0cde14
Merge branch 'wf/c5-confighash-b7' into wf/y5-staleenv-b6
roodboi Oct 12, 2026
5a258e6
Merge branch 'wf/y5-staleenv-b6' into wf/y1-logs-b6
roodboi Oct 12, 2026
642775e
Merge branch 'wf/y1-logs-b6' into wf/y2-mcptools-b6
roodboi Oct 12, 2026
2fa96a2
Merge branch 'wf/y2-mcptools-b6' into wf/c1-stdin-b7
roodboi Oct 12, 2026
63e1d39
test(native): use a canonical overlay name in the env selection case
roodboi Oct 12, 2026
d25d8c0
Merge branch 'next' into wf/c1-stdin-b7
roodboi Oct 12, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .codex/skills/hack-cli/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ Use `hack` as the primary interface for local-first development.

- These instructions were generated by hack CLI v4.2.1; use the content revision and command behavior to assess freshness.
- Check guidance only when Hack is relevant and there is evidence of drift; use targeted `hack setup` checks for a read-only inventory. Routine tasks do not require a startup audit.
- Content revision: `51163ae32e56` (version alone is not a freshness guarantee).
- Content revision: `c3c646a036aa` (version alone is not a freshness guarantee).

## Product boundary

Expand Down Expand Up @@ -151,6 +151,7 @@ Use `hack` as the primary interface for local-first development.
- Layer order: `.hack/hack.env.default.yaml`, the selected `.hack/hack.env.<overlay>.yaml`, then worktree-local `.hack/hack.env.local.yaml` and `.hack/hack.env.<overlay>.local.yaml`; service values override `global`, and host commands apply `host` values last.
- Omit `--env` to use the configured default overlay; `--env base` (or `default`/`none`) selects base layers only, the same on every command. An overlay name grants no production authority and no network or instance isolation.
- Use `hack env explain <KEY> --env <overlay> --service <service>` for provenance without the value; use `hack env get <KEY>` only when a plaintext value is explicitly needed, and treat its output as secret.
- Store a secret by piping it: `<secret-source> | hack env add <KEY> --service <service> --secret --value-stdin` (or the hidden prompt in a terminal); never pass secret values as command arguments, where shell history and process listings expose them.
- Running containers keep the env they were created with; after an env change, refresh with `hack env apply --service <service>` or `hack restart`.
- Accepted flags, injection timing and refresh path per command: the command and delivery matrix in Hack's env guide (`docs/env.md` in the Hack repository).

Expand Down
3 changes: 2 additions & 1 deletion .cursor/rules/hack.mdc
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ Prefer `hack` when shell access is available. Use MCP only when shell access is

- These instructions were generated by hack CLI v4.2.1; use the content revision and command behavior to assess freshness.
- Check guidance only when Hack is relevant and there is evidence of drift; use targeted `hack setup` checks for a read-only inventory. Routine tasks do not require a startup audit.
- Content revision: `51163ae32e56` (version alone is not a freshness guarantee).
- Content revision: `c3c646a036aa` (version alone is not a freshness guarantee).

## Product boundary

Expand Down Expand Up @@ -70,6 +70,7 @@ Prefer `hack` when shell access is available. Use MCP only when shell access is
- Layer order: `.hack/hack.env.default.yaml`, the selected `.hack/hack.env.<overlay>.yaml`, then worktree-local `.hack/hack.env.local.yaml` and `.hack/hack.env.<overlay>.local.yaml`; service values override `global`, and host commands apply `host` values last.
- Omit `--env` to use the configured default overlay; `--env base` (or `default`/`none`) selects base layers only, the same on every command. An overlay name grants no production authority and no network or instance isolation.
- Use `hack env explain <KEY> --env <overlay> --service <service>` for provenance without the value; use `hack env get <KEY>` only when a plaintext value is explicitly needed, and treat its output as secret.
- Store a secret by piping it: `<secret-source> | hack env add <KEY> --service <service> --secret --value-stdin` (or the hidden prompt in a terminal); never pass secret values as command arguments, where shell history and process listings expose them.
- Running containers keep the env they were created with; after an env change, refresh with `hack env apply --service <service>` or `hack restart`.
- Accepted flags, injection timing and refresh path per command: the command and delivery matrix in Hack's env guide (`docs/env.md` in the Hack repository).

Expand Down
43 changes: 36 additions & 7 deletions docs/env.md
Original file line number Diff line number Diff line change
Expand Up @@ -139,8 +139,11 @@ Projects can set a default overlay in `.hack/hack.config.json`:
Use `--env=base` to bypass that default and read only `.hack/hack.env.default.yaml`
(plus local overrides). `default` and `none` are aliases for `base`, in any case, on every
command that accepts `--env`; an overlay file named after one of those spellings is never
selected by name. Other names are normalized (for example ` QA ` selects `qa`), and a
non-empty value with no usable name characters is refused with `Invalid --env value.`
selected by name. Any other value must already be a canonical overlay name: lowercase
letters and digits joined by single hyphens (`^[a-z0-9]+(-[a-z0-9]+)*$`, for example
`qa` or `qa-2`); surrounding whitespace is ignored. Hack never rewrites a requested name,
so `QA`, `q_a` or `X=1` is refused with a fixed `Invalid --env value.` message that does
not repeat the argument, before any project file is read or any child process starts.
See the [command and delivery matrix](#command-and-delivery-matrix) for what each command
does with the selection.

Expand Down Expand Up @@ -226,9 +229,9 @@ For example, `hack host exec --scope api -- bun db:migrate` still runs on the ho

Every command that accepts `--env` resolves it with the same rule: omitted selects
the configured default overlay (`env.defaultOverlay`); `base`, `default` or `none`
selects base layers only; any other value selects that normalized overlay name. The
table lists every such command; `tests/env-command-matrix.test.ts` fails when a
command gains or loses `--env` without a matching row, or when a row's selectors
selects base layers only; any other value must be a canonical overlay name and selects
that overlay. The table lists every such command; `tests/env-command-matrix.test.ts`
fails when a command gains or loses `--env` without a matching row, or when a row's selectors
drift from the CLI. Commands not listed here refuse `--env` as an option that is not
valid for them (arguments after a standalone `--` belong to the child command).

Expand Down Expand Up @@ -350,21 +353,46 @@ Add or update values:

```bash
hack env add API_BASE_URL https://api.example.com
hack env add SERVICE_TOKEN abc123 --service api --secret
hack env add --env qa API_BASE_URL https://qa.example.com
hack env add API_BASE_URL https://api.example.com --local
```

`hack env set` still works as a compatibility alias for `hack env add`, but `add` is the primary UX now.

### Entering secret values

Never pass a secret value as a command argument: arguments land in shell history and are
visible to other local users and tools through process listings. Use one of these instead:

```bash
# Pipe the value from a secret manager or file; it never appears in argv.
<secret-source> | hack env add SERVICE_TOKEN --service api --secret --value-stdin
hack env add SERVICE_TOKEN --service api --secret --value-stdin < token.txt

# In an interactive terminal, omit the value to use the hidden prompt.
hack env add SERVICE_TOKEN --service api --secret
```

`--value-stdin` works on `hack env add` and `hack env set`, with or without `--secret`.
It reads all of stdin, up to 64 KiB, and strips exactly one trailing newline (`\n` or
`\r\n`), so `printf '%s\n' "$value"` and `printf '%s' "$value"` store the same value; any
further trailing newlines are kept. It refuses, with a fixed message that never repeats the
input and without writing anything:

- an interactive terminal on stdin (pipe the value, or drop `--value-stdin` for the hidden prompt)
- a value argument alongside the flag, including `KEY=value`
- a missing key argument
- empty input, input over 64 KiB, invalid UTF-8, or a NUL byte

`--local` writes to the worktree-local override file (`.hack/hack.env.local.yaml` or
`.hack/hack.env.<overlay>.local.yaml`) instead of the shared repo env file — use it for
per-checkout values you don't want to commit.

If you omit `key`, `value`, or `--service`, `hack env add` prompts for them interactively.
Pass `--no-interactive` (or set `HACK_NO_INTERACTIVE=1`) for scripted/agent usage: the
command applies documented defaults or fails fast with `E_INTERACTIVE_REQUIRED` instead of
blocking on a prompt. `hack env unset` and `hack env set` accept `--local` and
blocking on a prompt. In scripts, supply secret values with `--value-stdin` rather than as
arguments. `hack env unset` and `hack env set` accept `--local` and
`--no-interactive` too.

Remove a value:
Expand Down Expand Up @@ -603,6 +631,7 @@ If you are writing new docs or new project setup flows, document the YAML overla
- Commit `.hack/hack.env.<overlay>.yaml` when the overlay is team-shared
- Never commit `.hack.secret.key`
- Prefer `hack env add` over hand-editing encrypted values
- Enter secrets with `--value-stdin` or the hidden prompt, never as command arguments
- Prefer direct runtime injection over materializing `.hack/.env`
- Use `hack host exec` or env-aware sessions for host-side scripts like migrations, generators, and admin tasks

Expand Down
6 changes: 6 additions & 0 deletions docs/reference/cli.md
Original file line number Diff line number Diff line change
Expand Up @@ -2334,6 +2334,8 @@ Add or update an env value
hack env add [key] [value] [options]
```

Non-secret values may be passed as arguments. For secrets, pipe the value with --value-stdin (for example `<secret-source> \| hack env add API_TOKEN --secret --value-stdin`) or omit the value in a terminal to use the hidden prompt, so the value never appears in argv, shell history, or process listings.

### Arguments

| Arg | Description |
Expand All @@ -2349,6 +2351,7 @@ hack env add [key] [value] [options]
| `--project <name>` | Target a registered project by name (from ~/.hack/projects.json) |
| `--env <name|base|default>` | Select an env overlay by name; omit for the configured default overlay, or use 'base' or 'default' for base layers only |
| `--secret` | Store value as an encrypted secure entry |
| `--value-stdin` | Read the value from piped stdin (max 64 KiB, one trailing newline stripped) so it never appears in argv or shell history |
| `--local` | Write to the worktree-local env override file instead of the shared repo env file |
| `--service <global|service>` | Target scope (global or a discovered service name) |
| `--no-interactive` | Never prompt: apply documented defaults or fail with E_INTERACTIVE_REQUIRED (also via HACK_NO_INTERACTIVE=1) |
Expand All @@ -2365,6 +2368,8 @@ Alias for env add
hack env set [key] [value] [options]
```

Same value rules as `hack env add`: pipe secrets with --value-stdin or use the hidden prompt instead of passing them as arguments.

### Arguments

| Arg | Description |
Expand All @@ -2380,6 +2385,7 @@ hack env set [key] [value] [options]
| `--project <name>` | Target a registered project by name (from ~/.hack/projects.json) |
| `--env <name|base|default>` | Select an env overlay by name; omit for the configured default overlay, or use 'base' or 'default' for base layers only |
| `--secret` | Store value as an encrypted secure entry |
| `--value-stdin` | Read the value from piped stdin (max 64 KiB, one trailing newline stripped) so it never appears in argv or shell history |
| `--local` | Write to the worktree-local env override file instead of the shared repo env file |
| `--service <global|service>` | Target scope (global or a discovered service name) |
| `--no-interactive` | Never prompt: apply documented defaults or fail with E_INTERACTIVE_REQUIRED (also via HACK_NO_INTERACTIVE=1) |
Expand Down
3 changes: 2 additions & 1 deletion examples/basic/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ Use `hack` as the single interface for local-first runtime orchestration (compos
Integration freshness:
- These instructions were generated by hack CLI v4.2.1; use the content revision and command behavior to assess freshness.
- Check guidance only when Hack is relevant and there is evidence of drift; use targeted `hack setup` checks for a read-only inventory. Routine tasks do not require a startup audit.
- Content revision: `51163ae32e56` (version alone is not a freshness guarantee).
- Content revision: `c3c646a036aa` (version alone is not a freshness guarantee).

Product boundary:
- Supported CLI surface: project init, up/down/restart, open, logs, env, host exec/shell, sessions, doctor, and daemon.
Expand Down Expand Up @@ -128,6 +128,7 @@ Env composition:
- Layer order: `.hack/hack.env.default.yaml`, the selected `.hack/hack.env.<overlay>.yaml`, then worktree-local `.hack/hack.env.local.yaml` and `.hack/hack.env.<overlay>.local.yaml`; service values override `global`, and host commands apply `host` values last.
- Omit `--env` to use the configured default overlay; `--env base` (or `default`/`none`) selects base layers only, the same on every command. An overlay name grants no production authority and no network or instance isolation.
- Use `hack env explain <KEY> --env <overlay> --service <service>` for provenance without the value; use `hack env get <KEY>` only when a plaintext value is explicitly needed, and treat its output as secret.
- Store a secret by piping it: `<secret-source> | hack env add <KEY> --service <service> --secret --value-stdin` (or the hidden prompt in a terminal); never pass secret values as command arguments, where shell history and process listings expose them.
- Running containers keep the env they were created with; after an env change, refresh with `hack env apply --service <service>` or `hack restart`.
- Accepted flags, injection timing and refresh path per command: the command and delivery matrix in Hack's env guide (`docs/env.md` in the Hack repository).

Expand Down
3 changes: 2 additions & 1 deletion examples/basic/CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ Use `hack` as the single interface for local-first runtime orchestration (compos
Integration freshness:
- These instructions were generated by hack CLI v4.2.1; use the content revision and command behavior to assess freshness.
- Check guidance only when Hack is relevant and there is evidence of drift; use targeted `hack setup` checks for a read-only inventory. Routine tasks do not require a startup audit.
- Content revision: `51163ae32e56` (version alone is not a freshness guarantee).
- Content revision: `c3c646a036aa` (version alone is not a freshness guarantee).

Product boundary:
- Supported CLI surface: project init, up/down/restart, open, logs, env, host exec/shell, sessions, doctor, and daemon.
Expand Down Expand Up @@ -128,6 +128,7 @@ Env composition:
- Layer order: `.hack/hack.env.default.yaml`, the selected `.hack/hack.env.<overlay>.yaml`, then worktree-local `.hack/hack.env.local.yaml` and `.hack/hack.env.<overlay>.local.yaml`; service values override `global`, and host commands apply `host` values last.
- Omit `--env` to use the configured default overlay; `--env base` (or `default`/`none`) selects base layers only, the same on every command. An overlay name grants no production authority and no network or instance isolation.
- Use `hack env explain <KEY> --env <overlay> --service <service>` for provenance without the value; use `hack env get <KEY>` only when a plaintext value is explicitly needed, and treat its output as secret.
- Store a secret by piping it: `<secret-source> | hack env add <KEY> --service <service> --secret --value-stdin` (or the hidden prompt in a terminal); never pass secret values as command arguments, where shell history and process listings expose them.
- Running containers keep the env they were created with; after an env change, refresh with `hack env apply --service <service>` or `hack restart`.
- Accepted flags, injection timing and refresh path per command: the command and delivery matrix in Hack's env guide (`docs/env.md` in the Hack repository).

Expand Down
3 changes: 2 additions & 1 deletion plugins/hack/rules/hack.mdc
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ Prefer `hack` when shell access is available. Use MCP only when shell access is

- These instructions were generated by hack CLI v4.2.1; use the content revision and command behavior to assess freshness.
- Check guidance only when Hack is relevant and there is evidence of drift; use targeted `hack setup` checks for a read-only inventory. Routine tasks do not require a startup audit.
- Content revision: `51163ae32e56` (version alone is not a freshness guarantee).
- Content revision: `c3c646a036aa` (version alone is not a freshness guarantee).

## Product boundary

Expand Down Expand Up @@ -75,6 +75,7 @@ Prefer `hack` when shell access is available. Use MCP only when shell access is
- Layer order: `.hack/hack.env.default.yaml`, the selected `.hack/hack.env.<overlay>.yaml`, then worktree-local `.hack/hack.env.local.yaml` and `.hack/hack.env.<overlay>.local.yaml`; service values override `global`, and host commands apply `host` values last.
- Omit `--env` to use the configured default overlay; `--env base` (or `default`/`none`) selects base layers only, the same on every command. An overlay name grants no production authority and no network or instance isolation.
- Use `hack env explain <KEY> --env <overlay> --service <service>` for provenance without the value; use `hack env get <KEY>` only when a plaintext value is explicitly needed, and treat its output as secret.
- Store a secret by piping it: `<secret-source> | hack env add <KEY> --service <service> --secret --value-stdin` (or the hidden prompt in a terminal); never pass secret values as command arguments, where shell history and process listings expose them.
- Running containers keep the env they were created with; after an env change, refresh with `hack env apply --service <service>` or `hack restart`.
- Accepted flags, injection timing and refresh path per command: the command and delivery matrix in Hack's env guide (`docs/env.md` in the Hack repository).

Expand Down
3 changes: 2 additions & 1 deletion plugins/hack/skills/hack-cli/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ Use `hack` as the primary interface for local-first development.

- These instructions were generated by hack CLI v4.2.1; use the content revision and command behavior to assess freshness.
- Check guidance only when Hack is relevant and there is evidence of drift; use targeted `hack setup` checks for a read-only inventory. Routine tasks do not require a startup audit.
- Content revision: `51163ae32e56` (version alone is not a freshness guarantee).
- Content revision: `c3c646a036aa` (version alone is not a freshness guarantee).

## Product boundary

Expand Down Expand Up @@ -151,6 +151,7 @@ Use `hack` as the primary interface for local-first development.
- Layer order: `.hack/hack.env.default.yaml`, the selected `.hack/hack.env.<overlay>.yaml`, then worktree-local `.hack/hack.env.local.yaml` and `.hack/hack.env.<overlay>.local.yaml`; service values override `global`, and host commands apply `host` values last.
- Omit `--env` to use the configured default overlay; `--env base` (or `default`/`none`) selects base layers only, the same on every command. An overlay name grants no production authority and no network or instance isolation.
- Use `hack env explain <KEY> --env <overlay> --service <service>` for provenance without the value; use `hack env get <KEY>` only when a plaintext value is explicitly needed, and treat its output as secret.
- Store a secret by piping it: `<secret-source> | hack env add <KEY> --service <service> --secret --value-stdin` (or the hidden prompt in a terminal); never pass secret values as command arguments, where shell history and process listings expose them.
- Running containers keep the env they were created with; after an env change, refresh with `hack env apply --service <service>` or `hack restart`.
- Accepted flags, injection timing and refresh path per command: the command and delivery matrix in Hack's env guide (`docs/env.md` in the Hack repository).

Expand Down
Loading
Loading