> ## Documentation Index
> Fetch the complete documentation index at: https://opensre.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Interactive Shell Privacy

> How OpenSRE redacts secrets from your command history and LLM prompt/response logs, and the controls you have over persistence and cloud telemetry

## Overview

The OpenSRE interactive shell persists every line you type to a history file so up-arrow recall and `/history` work across sessions, and separately records each LLM prompt/response turn for local debugging and `/resume`. Incident prompts can include sensitive identifiers and tokens, so the shell:

* redacts known token shapes before each entry is written to disk
* supports disabling persistence entirely (memory-only mode)
* caps how many entries are kept (oldest pruned)
* offers a one-shot `/history clear` to wipe the file on demand

The history file lives at `~/.opensre/interactive_history`. See [Prompt and response logging](#prompt-and-response-logging) below for the separate LLM turn log and its PostHog forwarding behavior.

## Defaults

| Setting       | Default          | Effect                                                                   |
| ------------- | ---------------- | ------------------------------------------------------------------------ |
| Persistence   | **on**           | Lines you type are appended to the history file.                         |
| Redaction     | **on**           | Known token shapes are replaced with `[REDACTED:<kind>]` before writing. |
| Retention cap | **5000 entries** | Older entries are pruned when the cap is exceeded.                       |

## Redaction patterns

The built-in pattern set targets token shapes that are unique enough to keep false positives on natural-language incident text very low. Each match is replaced with a labeled placeholder.

| Kind            | Examples                     |
| --------------- | ---------------------------- |
| `aws_key`       | `AKIA…`, `ASIA…`             |
| `aws_secret`    | `aws_secret_access_key=…`    |
| `github_pat`    | `ghp_…`, `github_pat_…`      |
| `anthropic_key` | `sk-ant-…`                   |
| `openai_key`    | `sk-…`                       |
| `slack_token`   | `xoxb-…`, `xoxp-…`, `xoxa-…` |
| `stripe_key`    | `sk_live_…`, `sk_test_…`     |
| `bearer`        | `Bearer <opaque>` headers    |
| `jwt`           | `eyJ…` three-segment tokens  |
| `password`      | `--password=…`, `password=…` |
| `private_key`   | PEM-encoded private keys     |

Redaction applies only to **persistent history**. The line you typed is still passed to OpenSRE's normal pipeline as you typed it.

## Slash commands

| Command                  | Effect                                                                       |
| ------------------------ | ---------------------------------------------------------------------------- |
| `/history`               | Show all persisted entries.                                                  |
| `/history clear`         | Wipe the history file. Up-arrow recall resets on next launch.                |
| `/history off`           | Pause persistence for this session. New entries are not written.             |
| `/history on`            | Resume persistence for this session.                                         |
| `/history retention <N>` | Keep at most N entries on disk. Prunes immediately.                          |
| `/privacy`               | Show current persistence + redaction state, retention cap, and threat model. |

## Configuration

Settings resolve from (highest wins):

1. Environment variables
2. The `interactive.history` block in `~/.opensre/config.yml`
3. Built-in defaults

### Environment variables

| Variable                      | Default | Effect                                                                  |
| ----------------------------- | ------- | ----------------------------------------------------------------------- |
| `OPENSRE_HISTORY_ENABLED`     | `1`     | Set to `0`/`false`/`off` to skip persistence entirely (in-memory only). |
| `OPENSRE_HISTORY_REDACT`      | `1`     | Set to `0`/`false`/`off` to disable redaction (raw `FileHistory`).      |
| `OPENSRE_HISTORY_MAX_ENTRIES` | `5000`  | Non-negative integer. `0` disables the cap (unlimited).                 |

### Config file

```yaml theme={null}
interactive:
  history:
    enabled: true
    redact: true
    max_entries: 5000
```

## Prompt and response logging

Separately from typed-command history, the interactive shell records each LLM turn — the full prompt sent and the full response received — for chat and follow-up routes. This log is richer than command history (it includes model output, not just what you typed) and is used for two purposes:

1. **Local debugging / `/resume`**: appended as JSON Lines to `~/.opensre/prompt_log.jsonl`, and folded into the session file so `/resume` can restore conversation context.
2. **Product analytics**: forwarded to PostHog as an `$ai_generation` event (model, provider, latency, token counts, and the prompt/response text) so we can track usage and quality of the AI features.

### Defaults

| Setting            | Default | Effect                                                                                                              |
| ------------------ | ------- | ------------------------------------------------------------------------------------------------------------------- |
| Logging            | **on**  | Each LLM turn is recorded.                                                                                          |
| Local JSONL file   | **on**  | Turns are appended to `~/.opensre/prompt_log.jsonl`.                                                                |
| PostHog forwarding | **on**  | Turns are also sent as a PostHog `$ai_generation` event.                                                            |
| Redaction          | **on**  | Known token shapes (same patterns as command history) are stripped from the prompt and response before either sink. |

### Environment variables

| Variable                            | Default                       | Effect                                                                                            |
| ----------------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------- |
| `OPENSRE_PROMPT_LOG_DISABLED`       | `0`                           | Set to `1` to disable prompt/response logging entirely (both local file and PostHog).             |
| `OPENSRE_PROMPT_LOG_LOCAL_DISABLED` | `0`                           | Set to `1` to skip the local JSONL file while leaving PostHog forwarding (if enabled) unaffected. |
| `OPENSRE_PROMPT_LOG_REDACT`         | `1`                           | Set to `0` to log/send raw, unredacted prompt and response text.                                  |
| `OPENSRE_PROMPT_LOG_PATH`           | `~/.opensre/prompt_log.jsonl` | Override the local JSONL file path.                                                               |

PostHog forwarding for this event additionally honors the global telemetry opt-outs: set **`OPENSRE_NO_TELEMETRY=1`**, `OPENSRE_ANALYTICS_DISABLED=1`, or `DO_NOT_TRACK=1` to stop all PostHog traffic (including `$ai_generation`) without touching the local JSONL file. See [Environment Variables](/configuration/environment-variables#telemetry-monitoring).

### Config file

```yaml theme={null}
interactive:
  prompt_log:
    posthog_enabled: true
    redact: true
    max_chars: 32000
    path: ~/.opensre/prompt_log.jsonl
```

Redaction here uses the same built-in pattern set as command history (see [Redaction patterns](#redaction-patterns) above) — it catches known secret shapes, not arbitrary sensitive content. Raw incident details, hostnames, or business context in a prompt are not redacted; only credential-shaped substrings are.

## Threat model

The history file is **plain text on local disk** at `~/.opensre/interactive_history`, with the user's default file permissions. Built-in redaction targets common token shapes only — it is not a substitute for proper secret handling. Treat the file as confidential and be aware:

* A determined attacker with read access to your home directory can still read pre-existing entries written before redaction was enabled.
* Redaction cannot detect tokens that look like normal text (for example a natural-language password). Don't paste secrets you wouldn't be comfortable seeing in a system log.
* Custom redaction patterns are not yet supported in v1. If you need to redact internal token shapes, use `/history off` for that session and run `/history clear` afterwards.

The prompt/response log carries the same caveat, plus one more: with PostHog forwarding on (the default), redacted prompt/response text leaves your machine. If you discuss confidential systems or data in the interactive shell, set `OPENSRE_NO_TELEMETRY=1` (or `OPENSRE_PROMPT_LOG_DISABLED=1` to also stop the local file) rather than relying on redaction alone.

For the strongest posture: set `OPENSRE_HISTORY_ENABLED=0` and `OPENSRE_NO_TELEMETRY=1`, accept the loss of cross-session up-arrow recall and `/resume` context, and rely on the in-memory ring instead.
