# Clawlens

> What do you use Claw for most? Where do you get stuck? Clawlens analyzes your conversation history to surface usage patterns, friction points, and skill effectiveness — your personal OpenClaw retrospective.

- Skill: `knownasnaffy/clawlens-3` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add knownasnaffy/clawlens-3`
- Raw SKILL.md: https://api.skillmd.com/api/skills/knownasnaffy/clawlens-3/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: knownasnaffy (https://skillmd.com/u/knownasnaffy)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/knownasnaffy/clawlens-3

---


# Clawlens - OpenClaw Usage Insights

Generate a comprehensive usage insights report by analyzing conversation history.

## When to Use

| User Says | Action |
|-----------|--------|
| "show me my usage report" | Run full report |
| "analyze my conversations" | Run full report |
| "how am I using Claw" | Run full report |
| "clawlens" / "claw lens" | Run full report |
| "usage insights" / "usage analysis" | Run full report |

## How to Run

Execute the analysis script:

```bash
python3 scripts/clawlens.py [OPTIONS]
```

### Options

| Flag | Default | Description |
|------|---------|-------------|
| `--agent-id` | `main` | Agent ID to analyze |
| `--days` | `180` | Analysis time window in days |
| `--model` | auto-detect | LLM model in litellm format (e.g. `deepseek/deepseek-chat`). If omitted, auto-detected from OpenClaw config. |
| `--lang` | `zh` | Report language: `zh` or `en` |
| `--format` | `md` | Output format: `md` (Markdown) or `html` (self-contained dark-themed HTML) |
| `--no-cache` | false | Ignore cached facet extraction results |
| `--max-sessions` | `2000` | Maximum sessions to process |
| `--concurrency` | `10` | Max parallel LLM calls |
| `--verbose` | false | Print progress to stderr |
| `-o` / `--output` | stdout | Output file path |

### Model Selection (Agent Interaction)

When the user requests a clawlens report without specifying a model, **you must ask the user before running**:

> 是否使用 OpenClaw 当前配置的模型来生成报告？如果不使用，请告诉我你想用的模型（litellm 格式，如 `deepseek/deepseek-chat`）。

- **User agrees to use OpenClaw model**: Run **without** `--model` (the script auto-detects from `~/.openclaw/openclaw.json`).
- **User specifies a different model**: Run with `--model <user-choice>`. The user must also set the corresponding API key env var (e.g. `DEEPSEEK_API_KEY`).

Note: Each user's OpenClaw model configuration may differ — some use API-key-based providers (e.g. `openai-completions`), others use OAuth-based providers (e.g. `anthropic-messages`). The script handles both transparently.

### Examples

```bash
# Auto-detect model from OpenClaw config (simplest)
python3 scripts/clawlens.py --verbose

# Auto-detect, English, last 7 days
python3 scripts/clawlens.py --lang en --days 7

# Manually specify model (DeepSeek)
DEEPSEEK_API_KEY=sk-xxx python3 scripts/clawlens.py --model deepseek/deepseek-chat

# OpenAI, English, last 7 days
OPENAI_API_KEY=sk-xxx python3 scripts/clawlens.py --model openai/gpt-4o --lang en --days 7

# Verbose, save to file
ANTHROPIC_API_KEY=sk-xxx python3 scripts/clawlens.py --model anthropic/claude-sonnet-4-20250514 --verbose -o /tmp/clawlens-report.md

# HTML report (dark-themed, self-contained)
DEEPSEEK_API_KEY=sk-xxx python3 scripts/clawlens.py --model deepseek/deepseek-chat --format html -o /tmp/clawlens-report.html
```

## Output

The script outputs a report to stdout (or to the file specified by `-o`). Progress messages go to stderr when `--verbose` is set.

- **Markdown** (`--format md`, default): Plain Markdown report. Present it directly to the user.
- **HTML** (`--format html`): Self-contained dark-themed HTML file with glassmorphism styling, animated stat cards, CSS bar charts, and interactive navigation. Opens directly in any browser — no external dependencies. Requires the `markdown` Python package for Markdown-to-HTML conversion.

The report includes all dimensions: usage overview, task classification, friction analysis, skills ecosystem, autonomous behavior audit, and multi-channel analysis.

**Present the output directly to the user.** Do not summarize or truncate it.

## Model Configuration

`--model` is optional. If omitted, the model is automatically resolved from OpenClaw configuration:

1. Reads primary model from `~/.openclaw/openclaw.json` (`agents.defaults.model.primary`, e.g. `kimi-code/kimi-for-coding`)
2. Looks up the provider's `baseUrl` and `api` type (e.g. `openai-completions`, `anthropic-messages`)
3. Retrieves API key/token from `~/.openclaw/agents/{agentId}/agent/auth-profiles.json`
4. Maps to litellm format automatically (e.g. `openai/kimi-for-coding` with custom `api_base`)

If you prefer to specify a model manually, use `--model` with [litellm's provider format](https://docs.litellm.ai/docs/providers):

| Provider | `--model` value | Required env var |
|----------|----------------|------------------|
| DeepSeek | `deepseek/deepseek-chat` | `DEEPSEEK_API_KEY` |
| OpenAI | `openai/gpt-4o` | `OPENAI_API_KEY` |
| Anthropic | `anthropic/claude-sonnet-4-20250514` | `ANTHROPIC_API_KEY` |
| OpenAI-compatible | `openai/<model-id>` + set `OPENAI_API_BASE` | `OPENAI_API_KEY` |

The format is always `<provider>/<model-id>`. Refer to litellm docs for the full list of supported providers and their env var naming conventions.

## Data Source

The script reads conversation data from:
- `~/.openclaw/agents/{agentId}/sessions/sessions.json` (session index)
- `~/.openclaw/agents/{agentId}/sessions/*.jsonl` (per-session logs, including unindexed historical files)
- `~/.openclaw/skills/` (installed skills directory for ecosystem analysis)

Cache is written to `~/.openclaw/agents/{agentId}/sessions/.clawlens-cache/facets/` to avoid re-analyzing the same sessions.

## Privacy Notice

This skill sends conversation transcript data to an **external LLM provider** (specified by `--model`) for analysis. Specifically:

- **Stage 2 (Facet Extraction)**: Each session's conversation transcript (truncated to ~80K chars) is sent to the LLM to extract structured analysis (task categories, friction points, etc.). Results are cached locally so each session is only sent once.
- **Stage 4 (Report Generation)**: Aggregated statistics and session summaries (not raw transcripts) are sent to the LLM to generate the report sections.

**API key handling:** When `--model` is omitted, this skill reads `openclaw.json` and `auth-profiles.json` to auto-detect the model and retrieve the API key. The API key is used only for LLM calls during report generation and is not stored or transmitted elsewhere. When `--model` is specified explicitly, the user must provide the API key via environment variables — no OpenClaw config files are accessed for credentials.

