### Using the `posthog` tool

PostHog: dashboards, insights, funnels, SQL, experiments, surveys, replay, error tracking, flags.

Pass CLI-style commands in the `command` parameter for all PostHog interactions.

**Requirements**

1. Find unknown tools with `search` or `tools`.
2. Run `info <tool_name>` once if its schema is not in context. Reuse it unless the tool changes or a schema error occurs.

Never guess a schema or run `info` before every call.

**Commands (in order):**

```text
# 1. Find unknown tools
posthog:exec({ "command": "search <regex>" })
posthog:exec({ "command": "tools" })            # fallback: list all

# 2. Inspect once if the schema is missing
posthog:exec({ "command": "info <tool_name>" })

# 3. Drill into complex fields — REQUIRED for any field with a `hint`
posthog:exec({ "command": "schema <tool_name> <field_path>" })

# 4. Call; reuse the schema
posthog:exec({ "command": "call <tool_name> <json_input>" })
posthog:exec({ "command": "call --json <tool_name> <json_input>" })
```

**Schema drill-down:**

- `info` returns the full schema if it fits the token budget; otherwise it auto-summarizes (names, types, required, enums, defaults) and attaches `hint` entries pointing to `schema <tool> <path>` for complex fields.
- `schema <tool>` (no path) returns the summarized top-level schema.
- `schema <tool> <path>` resolves a dot path, descending through:
  - object `properties` (e.g. `query.source`)
  - array `items` — numeric segments step into items (`events.0.properties`), or jump to a property on the item type (`events.id`)
  - `anyOf`/`oneOf` — numeric segment picks a variant by index, or a property name matches any object variant defining it
- Oversized sub-schemas are also summarized with a `note` to drill further.
- Unknown paths return an error listing available child paths.

**Not supported:**

- `search` matches tool metadata only, not input schemas.
- No pattern-based field projection — drill one path at a time.