Skip to content
    ↑↓ select↵ openesc close
    English中文
    PostHog

    @posthog/opencode

    v0.1.1Observability
    @posthog/opencode

    PostHog LLM Analytics plugin for OpenCode

    GitHub stars

    5

    Monthly installs

    238

    77 in 7 days

    Composite scoreSCORE

    40.9

    Multi-signal model

    Last commit

    5 days ago

    2026-08-15

    Install and configure

    opencode.json

    Writes to this project's opencode.json — applies to this repository only.

    opencode.json

    {
      "$schema": "https://opencode.ai/config.json",
      "plugin": ["@posthog/opencode@0.1.1"]
    }

    opencode loads npm dependencies through its embedded runtime on startup and caches them locally — no manual global install needed.

    PostHog LLM Analytics plugin for OpenCode. Captures LLM generations, tool executions, and conversation traces, sending them to PostHog as structured $ai_* events for the LLM Analytics dashboard.

    Installation

    Add @posthog/opencode to your opencode.json:

    {
        "$schema": "https://opencode.ai/config.json",
        "plugin": ["@posthog/opencode"]
    }
    

    The package is installed automatically at startup and cached in ~/.cache/opencode/node_modules/.

    Local development

    Place the plugin source in your project's .opencode/plugins/ directory (or ~/.config/opencode/plugins/ for global use). Add posthog-node to .opencode/package.json so OpenCode installs it at startup:

    {
        "dependencies": {
            "posthog-node": "^5.0.0"
        }
    }
    

    Configuration

    All configuration is via environment variables:

    Variable Default Description
    POSTHOG_API_KEY (required) PostHog project API key
    POSTHOG_HOST https://us.i.posthog.com PostHog instance URL
    POSTHOG_PRIVACY_MODE false Redact all LLM input/output content when true
    POSTHOG_ENABLED true Set false to disable
    POSTHOG_DISTINCT_ID machine hostname The distinct_id for all events
    POSTHOG_PROJECT_NAME cwd basename Project name in all events
    POSTHOG_TAGS (none) Custom tags: key1:val1,key2:val2
    POSTHOG_MAX_ATTRIBUTE_LENGTH 12000 Max length for serialized tool input/output

    If POSTHOG_API_KEY is not set, the plugin is a no-op.

    Events

    $ai_generation — per LLM call

    Emitted for each LLM roundtrip (step-finish part). Properties include:

    • $ai_model, $ai_provider — model and provider identifiers
    • $ai_input_tokens, $ai_output_tokens, $ai_reasoning_tokens — token counts
    • $ai_cache_read_input_tokens, $ai_cache_creation_input_tokens — cache token counts
    • $ai_total_cost_usd — cost in USD
    • $ai_latency — not available per-step (use trace-level latency)
    • $ai_stop_reasonstop, tool_calls, error, etc.
    • $ai_input, $ai_output_choices — message content (null in privacy mode)
    • $ai_trace_id, $ai_span_id, $ai_session_id — correlation IDs

    $ai_span — per tool execution

    Emitted when a tool call completes or errors. Properties include:

    • $ai_span_name — tool name (read, write, bash, edit, etc.)
    • $ai_latency — execution time in seconds
    • $ai_input_state, $ai_output_state — tool input/output (null in privacy mode)
    • $ai_parent_id — span ID of the generation that triggered this tool
    • $ai_is_error, $ai_error — error status

    $ai_trace — per user prompt

    Emitted on session.idle (agent finished responding). Properties include:

    • $ai_trace_id, $ai_session_id — correlation IDs
    • $ai_latency — total trace time in seconds
    • $ai_total_input_tokens, $ai_total_output_tokens — accumulated token counts
    • $ai_input_state, $ai_output_state — user prompt and final response
    • $ai_is_error — whether any step/tool errored

    Privacy

    When POSTHOG_PRIVACY_MODE=true, all content fields ($ai_input, $ai_output_choices, $ai_input_state, $ai_output_state) are set to null. Token counts, costs, latency, and model metadata still flow.

    Sensitive keys (matching api_key, token, secret, password, authorization, credential, private_key) are always redacted in tool inputs/outputs regardless of privacy mode.

    Credits

    Originally created by Nejc Drobnič and adopted as an official PostHog plugin.

    License

    MIT