[{"data":1,"prerenderedAt":1943},["ShallowReactive",2],{"navigation_docs":3,"-docs-key-features-session-telemetry":208,"-docs-key-features-session-telemetry-surround":1938},[4,40,73,112,136,151],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started",[10,15,20,25,30,35],{"title":11,"path":12,"stem":13,"icon":14},"Key Features","\u002Fdocs\u002Fgetting-started\u002Fkey-features","docs\u002F1.getting-started\u002F1.key-features","i-lucide-blocks",{"title":16,"path":17,"stem":18,"icon":19},"Why Zeeq?","\u002Fdocs\u002Fgetting-started\u002Fintroduction","docs\u002F1.getting-started\u002F2.introduction","i-lucide-house",{"title":21,"path":22,"stem":23,"icon":24},"Org Onboarding","\u002Fdocs\u002Fgetting-started\u002Forg-onboarding","docs\u002F1.getting-started\u002F3.org-onboarding","i-lucide-rocket",{"title":26,"path":27,"stem":28,"icon":29},"Connecting Agents","\u002Fdocs\u002Fgetting-started\u002Fconnecting-agents","docs\u002F1.getting-started\u002F4.connecting-agents","i-lucide-plug",{"title":31,"path":32,"stem":33,"icon":34},"Harness Tuning","\u002Fdocs\u002Fgetting-started\u002Fharness-tuning","docs\u002F1.getting-started\u002F5.harness-tuning","i-lucide-wrench",{"title":36,"path":37,"stem":38,"icon":39},"FAQ","\u002Fdocs\u002Fgetting-started\u002Ffaq","docs\u002F1.getting-started\u002F6.faq","i-lucide-circle-question-mark",{"title":41,"icon":6,"path":42,"stem":43,"children":44,"page":6},"Feature Overview","\u002Fdocs\u002Fkey-features","docs\u002F2.key-features",[45,49,53,57,61,65,69],{"title":46,"path":47,"stem":48,"icon":14},"Knowledge Libraries","\u002Fdocs\u002Fkey-features\u002Fknowledge-libraries","docs\u002F2.key-features\u002F1.knowledge-libraries",{"title":50,"path":51,"stem":52,"icon":14},"Code Reviews","\u002Fdocs\u002Fkey-features\u002Fcode-reviews","docs\u002F2.key-features\u002F2.code-reviews",{"title":54,"path":55,"stem":56,"icon":14},"Code Review as Agent Tool","\u002Fdocs\u002Fkey-features\u002Fcode-review-tool","docs\u002F2.key-features\u002F3.code-review-tool",{"title":58,"path":59,"stem":60,"icon":14},"Zeeq Tools Telemetry","\u002Fdocs\u002Fkey-features\u002Ftool-and-docs-telemetry","docs\u002F2.key-features\u002F4.tool-and-docs-telemetry",{"title":62,"path":63,"stem":64,"icon":14},"Session Telemetry","\u002Fdocs\u002Fkey-features\u002Fsession-telemetry","docs\u002F2.key-features\u002F5.session-telemetry",{"title":66,"path":67,"stem":68,"icon":14},"Dynamic Skills","\u002Fdocs\u002Fkey-features\u002Fdynamic-skills","docs\u002F2.key-features\u002F6.dynamic-skills",{"title":70,"path":71,"stem":72,"icon":14},"World Model (2026 Q3)","\u002Fdocs\u002Fkey-features\u002Fworld-model","docs\u002F2.key-features\u002F7.world-model",{"title":74,"path":75,"stem":76,"children":77,"page":6},"Managing Zeeq","\u002Fdocs\u002Fmanaging-zeeq","docs\u002F3.managing-zeeq",[78,83,88,93,97,102,107],{"title":79,"path":80,"stem":81,"icon":82},"Local Development","\u002Fdocs\u002Fmanaging-zeeq\u002Flocal-development","docs\u002F3.managing-zeeq\u002F0.local-development","i-lucide-square-terminal",{"title":84,"path":85,"stem":86,"icon":87},"GitHub Configuration","\u002Fdocs\u002Fmanaging-zeeq\u002Fgithub-configuration","docs\u002F3.managing-zeeq\u002F1.github-configuration","i-lucide-github",{"title":89,"path":90,"stem":91,"icon":92},"Organizations and Membership","\u002Fdocs\u002Fmanaging-zeeq\u002Forgs-membership-invitations","docs\u002F3.managing-zeeq\u002F2.orgs-membership-invitations","i-hugeicons-cube",{"title":46,"path":94,"stem":95,"icon":96},"\u002Fdocs\u002Fmanaging-zeeq\u002Fdocument-libraries","docs\u002F3.managing-zeeq\u002F3.document-libraries","i-lucide-library-big",{"title":98,"path":99,"stem":100,"icon":101},"LLM Settings Configuration","\u002Fdocs\u002Fmanaging-zeeq\u002Fllm-settings-configuration","docs\u002F3.managing-zeeq\u002F4.llm-settings-configuration","i-hugeicons-ai-magic",{"title":103,"path":104,"stem":105,"icon":106},"Agent Code Review","\u002Fdocs\u002Fmanaging-zeeq\u002Fagent-code-reviews","docs\u002F3.managing-zeeq\u002F5.agent-code-reviews","i-hugeicons-chat-spark-01",{"title":108,"path":109,"stem":110,"icon":111},"Credentials & API Tokens","\u002Fdocs\u002Fmanaging-zeeq\u002Fcredentials","docs\u002F3.managing-zeeq\u002F6.credentials","i-hugeicons-key-01",{"title":113,"path":114,"stem":115,"children":116,"page":6},"Runtime Configuration","\u002Fdocs\u002Fconfiguration","docs\u002F5.configuration",[117,122,126,131],{"title":118,"path":119,"stem":120,"icon":121},"Google Cloud Configuration","\u002Fdocs\u002Fconfiguration\u002Fgcp-runtime","docs\u002F5.configuration\u002F1.gcp-runtime","i-hugeicons-google",{"title":84,"path":123,"stem":124,"icon":125},"\u002Fdocs\u002Fconfiguration\u002Fgithub-configuration","docs\u002F5.configuration\u002F2.github-configuration","i-hugeicons-github",{"title":127,"path":128,"stem":129,"icon":130},"Local OpenIddict Certificates","\u002Fdocs\u002Fconfiguration\u002Flocal-openiddict-certificates","docs\u002F5.configuration\u002F3.local-openiddict-certificates","i-lucide-file-lock",{"title":132,"path":133,"stem":134,"icon":135},"System Admin Access","\u002Fdocs\u002Fconfiguration\u002Fsystem-admin-access","docs\u002F5.configuration\u002F4.system-admin-access","i-hugeicons-shield-01",{"title":137,"path":138,"stem":139,"children":140,"page":6},"Metrics","\u002Fdocs\u002Fmetrics","docs\u002F6.metrics",[141,146],{"title":142,"path":143,"stem":144,"icon":145},"Metrics Dashboard","\u002Fdocs\u002Fmetrics\u002Fmetrics-dashboard","docs\u002F6.metrics\u002F1.metrics-dashboard","i-hugeicons-analytics-01",{"title":147,"path":148,"stem":149,"icon":150},"Metrics Pipeline","\u002Fdocs\u002Fmetrics\u002Fmetrics-pipeline","docs\u002F6.metrics\u002F2.metrics-pipeline","i-hugeicons-database-02",{"title":152,"path":153,"stem":154,"children":155,"page":6},"Design and Architecture","\u002Fdocs\u002Farchitecture","docs\u002F9.architecture",[156,161,166,171,176,180,184,189,194,199,204],{"title":157,"path":158,"stem":159,"icon":160},"Key Architecture Principles","\u002Fdocs\u002Farchitecture\u002Fkey-principles","docs\u002F9.architecture\u002F0.key-principles","i-lucide-pencil-ruler",{"title":162,"path":163,"stem":164,"icon":165},"MCP Tools Inventory","\u002Fdocs\u002Farchitecture\u002Ftools-inventory","docs\u002F9.architecture\u002F1.tools-inventory","i-lucide-hammer",{"title":167,"path":168,"stem":169,"icon":170},"Caching","\u002Fdocs\u002Farchitecture\u002Fcaching","docs\u002F9.architecture\u002F2.caching","i-lucide-database",{"title":172,"path":173,"stem":174,"icon":175},"Messaging and Queueing","\u002Fdocs\u002Farchitecture\u002Fmessaging-and-queueing","docs\u002F9.architecture\u002F3.messaging-and-queueing","i-lucide-message-square",{"title":177,"path":178,"stem":179,"icon":87},"GitHub Comment Rendering","\u002Fdocs\u002Farchitecture\u002Fgithub-comment-rendering","docs\u002F9.architecture\u002F4.github-comment-rendering",{"title":181,"path":182,"stem":183,"icon":87},"GitHub Integration","\u002Fdocs\u002Farchitecture\u002Fgithub-integration","docs\u002F9.architecture\u002F5.github-integration",{"title":185,"path":186,"stem":187,"icon":188},"LLM Settings and Secret Storage","\u002Fdocs\u002Farchitecture\u002Fllm-settings-and-secret-storage","docs\u002F9.architecture\u002F6.llm-settings-and-secret-storage","i-lucide-key",{"title":190,"path":191,"stem":192,"icon":193},"Organization Activation and Routes","\u002Fdocs\u002Farchitecture\u002Forganization-activation-and-routes","docs\u002F9.architecture\u002F7.organization-activation-and-routes","i-lucide-door-open",{"title":195,"path":196,"stem":197,"icon":198},"MCP Uploaded-Diff Code Reviews","\u002Fdocs\u002Farchitecture\u002Fmcp-uploaded-diff-code-reviews","docs\u002F9.architecture\u002F8.mcp-uploaded-diff-code-reviews","i-lucide-file-search",{"title":200,"path":201,"stem":202,"icon":203},"Repository Content Ingest","\u002Fdocs\u002Farchitecture\u002Frepository-content-ingest","docs\u002F9.architecture\u002F9.repository-content-ingest","i-lucide-file-stack",{"title":205,"path":206,"stem":207},"Telemetry Ingest (2026 Q3)","\u002Fdocs\u002Farchitecture\u002Ftelemetry-ingest","docs\u002F9.architecture\u002F9.telemetry-ingest",{"id":209,"title":62,"body":210,"description":1932,"extension":307,"links":1933,"meta":1934,"navigation":1935,"path":63,"seo":1936,"stem":64,"__hash__":1937},"docs\u002Fdocs\u002F2.key-features\u002F5.session-telemetry.md",{"type":211,"value":212,"toc":1918},"minimark",[213,218,222,225,238,241,244,251,254,268,272,295,299,302,422,433,436,444,447,493,497,500,894,897,903,906,909,913,916,932,935,939,942,1234,1238,1249,1252,1852,1904,1914],[214,215,217],"h2",{"id":216},"summary","Summary",[219,220,221],"p",{},"Connect support agent harnesses to the Zeeq telemetry endpoint to capture session-level information that can be incorporated into the dashboard and code review records.",[219,223,224],{},"Clients with native telemetry support:",[226,227,228,232,235],"ul",{},[229,230,231],"li",{},"Codex \u002F ChatGPT",[229,233,234],{},"Claude Code \u002F Claude",[229,236,237],{},"VS Code Copilot",[219,239,240],{},"These can be pointed directly at the Zeeq telemetry endpoint via native configuration.",[219,242,243],{},"Other harnesses like OpenCode, Cursor, and Pi can use OpenTelemetry plugins or directly connect to the Zeeq ingest API endpoint.",[219,245,246],{},[247,248],"img",{"alt":249,"src":250},"session-telemetry","\u002Fscreens\u002Fsession-telemetry.png",[219,252,253],{},"Session telemetry captures:",[226,255,256,259,262,265],{},[229,257,258],{},"Conversation roots",[229,260,261],{},"Session prompts and MCP tool usage (it does not capture local tool usage)",[229,263,264],{},"Token usage and cost (calculated based on API rates)",[229,266,267],{},"And option to produce PR level provenance linking to a session by linking the",[214,269,271],{"id":270},"configuring-codex","Configuring Codex",[273,274,275,276,280,281,288,289,294],"note",{},"As of this writing, Codex can only be configured for OTEL via the root configuration at ",[277,278,279],"code",{},"~\u002F.codex\u002Fconfig.toml",". See OpenAI ",[282,283,287],"a",{"href":284,"rel":285},"https:\u002F\u002Flearn.chatgpt.com\u002Fdocs\u002Fconfig-file\u002Fconfig-advanced",[286],"nofollow","Advanced Config"," and ",[282,290,293],{"href":291,"rel":292},"https:\u002F\u002Flearn.chatgpt.com\u002Fdocs\u002Fconfig-file\u002Fconfig-reference",[286],"Config Reference"," for details.",[296,297,298],"tip",{},"Your local client configuration can use the same access token for MCP and for telemetry; no need to create two.  You can name the token anything you like locally.",[219,300,301],{},"Point your Codex client OTEL configuration to the Zeeq OTEL endpoint.",[303,304,309],"pre",{"className":305,"code":306,"filename":279,"language":307,"meta":308,"style":308},"language-md shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[otel]\nenvironment = \"dev\"\ntrace_exporter = \"none\"\nlog_user_prompt = true\n\n[otel.exporter.\"otlp-http\"]\nendpoint = \"https:\u002F\u002Fotel.zeeq.ai\u002Fv1\u002Flogs\"\nprotocol = \"binary\"\n\n# Codex currently requires the OTLP Authorization header to be encoded directly;\n# substitution will not work correctly.\n# Mint this token: https:\u002F\u002Fapp.zeeq.ai\u002Fweb\u002Fsettings\u002Fcredentials\n[otel.exporter.\"otlp-http\".headers]\nauthorization = \"Bearer \u003CZEEQ_ACCESS_TOKEN_HERE>\"\n","md","",[277,310,311,327,334,340,346,353,363,369,375,380,390,398,406,416],{"__ignoreMap":308},[312,313,316,320,324],"span",{"class":314,"line":315},"line",1,[312,317,319],{"class":318},"sMK4o","[",[312,321,323],{"class":322},"sfazB","otel",[312,325,326],{"class":318},"]\n",[312,328,330],{"class":314,"line":329},2,[312,331,333],{"class":332},"sTEyZ","environment = \"dev\"\n",[312,335,337],{"class":314,"line":336},3,[312,338,339],{"class":332},"trace_exporter = \"none\"\n",[312,341,343],{"class":314,"line":342},4,[312,344,345],{"class":332},"log_user_prompt = true\n",[312,347,349],{"class":314,"line":348},5,[312,350,352],{"emptyLinePlaceholder":351},true,"\n",[312,354,356,358,361],{"class":314,"line":355},6,[312,357,319],{"class":318},[312,359,360],{"class":322},"otel.exporter.\"otlp-http\"",[312,362,326],{"class":318},[312,364,366],{"class":314,"line":365},7,[312,367,368],{"class":332},"endpoint = \"https:\u002F\u002Fotel.zeeq.ai\u002Fv1\u002Flogs\"\n",[312,370,372],{"class":314,"line":371},8,[312,373,374],{"class":332},"protocol = \"binary\"\n",[312,376,378],{"class":314,"line":377},9,[312,379,352],{"emptyLinePlaceholder":351},[312,381,383,386],{"class":314,"line":382},10,[312,384,385],{"class":318},"# ",[312,387,389],{"class":388},"sBMFI","Codex currently requires the OTLP Authorization header to be encoded directly;\n",[312,391,393,395],{"class":314,"line":392},11,[312,394,385],{"class":318},[312,396,397],{"class":388},"substitution will not work correctly.\n",[312,399,401,403],{"class":314,"line":400},12,[312,402,385],{"class":318},[312,404,405],{"class":388},"Mint this token: https:\u002F\u002Fapp.zeeq.ai\u002Fweb\u002Fsettings\u002Fcredentials\n",[312,407,409,411,414],{"class":314,"line":408},13,[312,410,319],{"class":318},[312,412,413],{"class":322},"otel.exporter.\"otlp-http\".headers",[312,415,326],{"class":318},[312,417,419],{"class":314,"line":418},14,[312,420,421],{"class":332},"authorization = \"Bearer \u003CZEEQ_ACCESS_TOKEN_HERE>\"\n",[219,423,424,425,428,429,432],{},"If ",[277,426,427],{},"log_user_prompt"," is set to ",[277,430,431],{},"true",", the client will log the user prompt and the model response to the OTEL endpoint.",[219,434,435],{},"Codex responds with the conversation ID reliably when prompted:",[303,437,442],{"className":438,"code":440,"language":441,"meta":308},[439],"language-text","Print your current conversation\u002Fsession ID.\n","text",[277,443,440],{"__ignoreMap":308},[219,445,446],{},"Or more precisely:",[303,448,453],{"className":449,"code":450,"filename":451,"language":452,"meta":308,"style":308},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","printenv CODEX_THREAD_ID\n\n# Or...\nenv | rg '^CODEX_THREAD_ID='\n","Terminal","bash",[277,454,455,463,467,473],{"__ignoreMap":308},[312,456,457,460],{"class":314,"line":315},[312,458,459],{"class":388},"printenv",[312,461,462],{"class":322}," CODEX_THREAD_ID\n",[312,464,465],{"class":314,"line":329},[312,466,352],{"emptyLinePlaceholder":351},[312,468,469],{"class":314,"line":336},[312,470,472],{"class":471},"sHwdD","# Or...\n",[312,474,475,478,481,484,487,490],{"class":314,"line":342},[312,476,477],{"class":388},"env",[312,479,480],{"class":318}," |",[312,482,483],{"class":388}," rg",[312,485,486],{"class":318}," '",[312,488,489],{"class":322},"^CODEX_THREAD_ID=",[312,491,492],{"class":318},"'\n",[214,494,496],{"id":495},"configuring-claude","Configuring Claude",[219,498,499],{},"Claude can be configured either project local or globally; it is recommended to use project local configuration.",[501,502,504,509,517,535,538,542,549,592,595,611,621,625,824,831,834,884],"steps",{"level":503},"3",[505,506,508],"h3",{"id":507},"create-an-access-token","Create an access token",[219,510,511,512,516],{},"Visit ",[282,513,514],{"href":514,"rel":515},"https:\u002F\u002Fapp.zeeq.ai\u002Fweb\u002Fsettings\u002Fcredentials",[286]," and create a new API token.",[219,518,519,520,523,524,527,528,527,531,534],{},"Store this in your local environment as ",[277,521,522],{},"ZEEQ_ACCESS_TOKEN_HERE"," in your shell file (",[277,525,526],{},".zshrc",", ",[277,529,530],{},".bashrc",[277,532,533],{},"$PROFILE",", etc.).",[296,536,537],{},"If you are already using token based auth, you can use the same header you are using for authenticating.",[505,539,541],{"id":540},"configure-dynamic-headers","Configure dynamic headers",[219,543,544,545,548],{},"Then add a dynamic token loader in you project local ",[277,546,547],{},".claude"," directory:",[303,550,553],{"className":449,"code":551,"filename":552,"language":452,"meta":308,"style":308},"#!\u002Fusr\u002Fbin\u002Fenv bash\n\n# See: https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fmonitoring-usage#dynamic-headers\nprintf '{\"Authorization\":\"Bearer %s\"}\\n' \"$ZEEQ_ACCESS_TOKEN_HERE\"\n",".claude\u002Fzeeq-otel-headers.sh",[277,554,555,560,564,569],{"__ignoreMap":308},[312,556,557],{"class":314,"line":315},[312,558,559],{"class":471},"#!\u002Fusr\u002Fbin\u002Fenv bash\n",[312,561,562],{"class":314,"line":329},[312,563,352],{"emptyLinePlaceholder":351},[312,565,566],{"class":314,"line":336},[312,567,568],{"class":471},"# See: https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fmonitoring-usage#dynamic-headers\n",[312,570,571,575,577,580,583,586,589],{"class":314,"line":342},[312,572,574],{"class":573},"s2Zo4","printf",[312,576,486],{"class":318},[312,578,579],{"class":322},"{\"Authorization\":\"Bearer %s\"}\\n",[312,581,582],{"class":318},"'",[312,584,585],{"class":318}," \"",[312,587,588],{"class":332},"$ZEEQ_ACCESS_TOKEN_HERE",[312,590,591],{"class":318},"\"\n",[219,593,594],{},"Ensure it is executable:",[303,596,598],{"className":449,"code":597,"filename":451,"language":452,"meta":308,"style":308},"chmod +x .claude\u002Fzeeq-otel-headers.sh\n",[277,599,600],{"__ignoreMap":308},[312,601,602,605,608],{"class":314,"line":315},[312,603,604],{"class":388},"chmod",[312,606,607],{"class":322}," +x",[312,609,610],{"class":322}," .claude\u002Fzeeq-otel-headers.sh\n",[273,612,613,614,617,618],{},"Don't forget to refresh your shell environment so the token is available to the Claude process: ",[277,615,616],{},"source ~\u002F.zshrc"," or ",[277,619,620],{},"source ~\u002F.bashrc",[505,622,624],{"id":623},"configure-project-local-settings","Configure project local settings",[303,626,632],{"className":627,"code":628,"filename":629,"highlights":630,"language":631,"meta":308,"style":308},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"otelHeadersHelper\": \".claude\u002Fzeeq-otel-headers.sh\",\n  \"env\": {\n    \"CLAUDE_CODE_ENABLE_TELEMETRY\": \"1\",\n    \"OTEL_EXPORTER_OTLP_PROTOCOL\": \"http\u002Fprotobuf\",\n    \"OTEL_EXPORTER_OTLP_ENDPOINT\": \"https:\u002F\u002Fotel.zeeq.ai\",\n    \"OTEL_LOGS_EXPORTER\": \"otlp\",\n    \"OTEL_LOG_USER_PROMPTS\": \"1\",\n    \"OTEL_LOG_TOOL_DETAILS\": \"1\"\n  },\n  \"otherConfigHere\" : \"...\"\n}\n",".claude\u002Fsettings.local.json",[329],"json",[277,633,634,639,665,678,699,719,739,759,778,795,800,819],{"__ignoreMap":308},[312,635,636],{"class":314,"line":315},[312,637,638],{"class":318},"{\n",[312,640,643,646,650,653,656,658,660,662],{"class":641,"line":329},[314,642],"highlight",[312,644,645],{"class":318},"  \"",[312,647,649],{"class":648},"spNyl","otelHeadersHelper",[312,651,652],{"class":318},"\"",[312,654,655],{"class":318},":",[312,657,585],{"class":318},[312,659,552],{"class":322},[312,661,652],{"class":318},[312,663,664],{"class":318},",\n",[312,666,667,669,671,673,675],{"class":314,"line":336},[312,668,645],{"class":318},[312,670,477],{"class":648},[312,672,652],{"class":318},[312,674,655],{"class":318},[312,676,677],{"class":318}," {\n",[312,679,680,683,686,688,690,692,695,697],{"class":314,"line":342},[312,681,682],{"class":318},"    \"",[312,684,685],{"class":388},"CLAUDE_CODE_ENABLE_TELEMETRY",[312,687,652],{"class":318},[312,689,655],{"class":318},[312,691,585],{"class":318},[312,693,694],{"class":322},"1",[312,696,652],{"class":318},[312,698,664],{"class":318},[312,700,701,703,706,708,710,712,715,717],{"class":314,"line":348},[312,702,682],{"class":318},[312,704,705],{"class":388},"OTEL_EXPORTER_OTLP_PROTOCOL",[312,707,652],{"class":318},[312,709,655],{"class":318},[312,711,585],{"class":318},[312,713,714],{"class":322},"http\u002Fprotobuf",[312,716,652],{"class":318},[312,718,664],{"class":318},[312,720,721,723,726,728,730,732,735,737],{"class":314,"line":355},[312,722,682],{"class":318},[312,724,725],{"class":388},"OTEL_EXPORTER_OTLP_ENDPOINT",[312,727,652],{"class":318},[312,729,655],{"class":318},[312,731,585],{"class":318},[312,733,734],{"class":322},"https:\u002F\u002Fotel.zeeq.ai",[312,736,652],{"class":318},[312,738,664],{"class":318},[312,740,741,743,746,748,750,752,755,757],{"class":314,"line":365},[312,742,682],{"class":318},[312,744,745],{"class":388},"OTEL_LOGS_EXPORTER",[312,747,652],{"class":318},[312,749,655],{"class":318},[312,751,585],{"class":318},[312,753,754],{"class":322},"otlp",[312,756,652],{"class":318},[312,758,664],{"class":318},[312,760,761,763,766,768,770,772,774,776],{"class":314,"line":371},[312,762,682],{"class":318},[312,764,765],{"class":388},"OTEL_LOG_USER_PROMPTS",[312,767,652],{"class":318},[312,769,655],{"class":318},[312,771,585],{"class":318},[312,773,694],{"class":322},[312,775,652],{"class":318},[312,777,664],{"class":318},[312,779,780,782,785,787,789,791,793],{"class":314,"line":377},[312,781,682],{"class":318},[312,783,784],{"class":388},"OTEL_LOG_TOOL_DETAILS",[312,786,652],{"class":318},[312,788,655],{"class":318},[312,790,585],{"class":318},[312,792,694],{"class":322},[312,794,591],{"class":318},[312,796,797],{"class":314,"line":382},[312,798,799],{"class":318},"  },\n",[312,801,802,804,807,809,812,814,817],{"class":314,"line":392},[312,803,645],{"class":318},[312,805,806],{"class":648},"otherConfigHere",[312,808,652],{"class":318},[312,810,811],{"class":318}," :",[312,813,585],{"class":318},[312,815,816],{"class":322},"...",[312,818,591],{"class":318},[312,820,821],{"class":314,"line":400},[312,822,823],{"class":318},"}\n",[273,825,826,827,830],{},"Claude does not require the ",[277,828,829],{},"\u002Fv1\u002Flogs"," path in the endpoint; it will automatically append it.",[219,832,833],{},"Like Codex, you can also set the header directly instead of using the helper:",[303,835,837],{"className":627,"code":836,"filename":629,"language":631,"meta":308,"style":308},"{\n  \"env\": {\n    \"OTEL_EXPORTER_OTLP_HEADERS\": \"Authorization=Bearer \u003CZEEQ_ACCESS_TOKEN_HERE>\",\n  }\n}\n",[277,838,839,843,855,875,880],{"__ignoreMap":308},[312,840,841],{"class":314,"line":315},[312,842,638],{"class":318},[312,844,845,847,849,851,853],{"class":314,"line":329},[312,846,645],{"class":318},[312,848,477],{"class":648},[312,850,652],{"class":318},[312,852,655],{"class":318},[312,854,677],{"class":318},[312,856,857,859,862,864,866,868,871,873],{"class":314,"line":336},[312,858,682],{"class":318},[312,860,861],{"class":388},"OTEL_EXPORTER_OTLP_HEADERS",[312,863,652],{"class":318},[312,865,655],{"class":318},[312,867,585],{"class":318},[312,869,870],{"class":322},"Authorization=Bearer \u003CZEEQ_ACCESS_TOKEN_HERE>",[312,872,652],{"class":318},[312,874,664],{"class":318},[312,876,877],{"class":314,"line":342},[312,878,879],{"class":318},"  }\n",[312,881,882],{"class":314,"line":348},[312,883,823],{"class":318},[219,885,886,887,889,890,893],{},"This is the most straightforward way as long as ",[277,888,629],{}," is ",[277,891,892],{},"gitignore","d and not checked into source control.",[219,895,896],{},"Claude can respond with the conversation ID when prompted for:",[303,898,901],{"className":899,"code":900,"language":441,"meta":308},[439],"Get your conversation ID from the current active scratchpad path.\n",[277,902,900],{"__ignoreMap":308},[214,904,237],{"id":905},"vs-code-copilot",[273,907,908],{},"Coming soon",[214,910,912],{"id":911},"direct-import-pi-cursor-opencode-etc","Direct import (Pi, Cursor, OpenCode, etc.)",[219,914,915],{},"Several harnesses do not have native OTEL support and must use either plugins that emulate OTEL or write a custom hook.",[226,917,918,925],{},[229,919,920],{},[282,921,924],{"href":922,"rel":923},"https:\u002F\u002Fgithub.com\u002FLangGuard-AI\u002Fcursor-otel-hook",[286],"Cursor",[229,926,927],{},[282,928,931],{"href":929,"rel":930},"https:\u002F\u002Fgithub.com\u002FDEVtheOPS\u002Fopencode-plugin-otel",[286],"OpenCode",[219,933,934],{},"If preferred, for these harnesses, it is possible to use the Zeeq telemetry import API directly and send a JSON payload.",[505,936,938],{"id":937},"pi","Pi",[219,940,941],{},"Zeeq publishes a first-party Pi extension that posts session telemetry directly to the Zeeq import API so no OTEL config or hook script required.  You can check the source of the hook to write a custom extension for other harnesses.",[501,943,945,950,961,979,982,1002,1009,1021,1025,1031,1044,1067,1070,1077,1081,1087,1091,1094,1114,1125,1128,1149,1166,1170,1173,1185,1188,1208,1211,1217],{"level":944},"4",[946,947,949],"h4",{"id":948},"install-the-extension","Install the extension",[219,951,952,953,960],{},"The extension is published to npm as ",[282,954,957],{"href":955,"rel":956},"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@zeeq-ai\u002Fzeeq-app-pi-telemetry",[286],[277,958,959],{},"@zeeq-ai\u002Fzeeq-app-pi-telemetry",". Run this from the root of the repository you want to emit telemetry from:",[303,962,964],{"className":449,"code":963,"filename":451,"language":452,"meta":308,"style":308},"pi install --local npm:@zeeq-ai\u002Fzeeq-app-pi-telemetry\n",[277,965,966],{"__ignoreMap":308},[312,967,968,970,973,976],{"class":314,"line":315},[312,969,937],{"class":388},[312,971,972],{"class":322}," install",[312,974,975],{"class":322}," --local",[312,977,978],{"class":322}," npm:@zeeq-ai\u002Fzeeq-app-pi-telemetry\n",[219,980,981],{},"To track patch releases automatically while holding the minor version, pin a tilde range instead:",[303,983,985],{"className":449,"code":984,"filename":451,"language":452,"meta":308,"style":308},"pi install --local \"npm:@zeeq-ai\u002Fzeeq-app-pi-telemetry@~1.0.1\"\n",[277,986,987],{"__ignoreMap":308},[312,988,989,991,993,995,997,1000],{"class":314,"line":315},[312,990,937],{"class":388},[312,992,972],{"class":322},[312,994,975],{"class":322},[312,996,585],{"class":318},[312,998,999],{"class":322},"npm:@zeeq-ai\u002Fzeeq-app-pi-telemetry@~1.0.1",[312,1001,591],{"class":318},[219,1003,1004,1005,1008],{},"Pi writes the package source to ",[277,1006,1007],{},".pi\u002Fsettings.json",". Approve the project-local package so Pi trusts and loads it:",[303,1010,1012],{"className":449,"code":1011,"filename":451,"language":452,"meta":308,"style":308},"pi --approve\n",[277,1013,1014],{"__ignoreMap":308},[312,1015,1016,1018],{"class":314,"line":315},[312,1017,937],{"class":388},[312,1019,1020],{"class":322}," --approve\n",[946,1022,1024],{"id":1023},"create-an-access-token-if-using-dcr","Create an access token if using DCR",[219,1026,511,1027,1030],{},[282,1028,514],{"href":514,"rel":1029},[286]," and create a new API token if you are using dynamic client registration (DCR) for your authentication.",[219,1032,1033,1034,527,1036,527,1038,1040,1041,655],{},"Store it in your shell profile (",[277,1035,526],{},[277,1037,530],{},[277,1039,533],{},", etc.) as ",[277,1042,1043],{},"ZEEQ_ACCESS_TOKEN",[303,1045,1047],{"className":449,"code":1046,"filename":451,"language":452,"meta":308,"style":308},"export ZEEQ_ACCESS_TOKEN=\"\u003Ctoken>\"\n",[277,1048,1049],{"__ignoreMap":308},[312,1050,1051,1054,1057,1060,1062,1065],{"class":314,"line":315},[312,1052,1053],{"class":648},"export",[312,1055,1056],{"class":332}," ZEEQ_ACCESS_TOKEN",[312,1058,1059],{"class":318},"=",[312,1061,652],{"class":318},[312,1063,1064],{"class":322},"\u003Ctoken>",[312,1066,591],{"class":318},[296,1068,1069],{},"If you are already using token based auth, you can use the same token you are using for authenticating.",[273,1071,1072,1073,617,1075],{},"Don't forget to refresh your shell environment so the token is available to the Pi process: ",[277,1074,616],{},[277,1076,620],{},[946,1078,1080],{"id":1079},"start-a-session","Start a session",[219,1082,1083,1084,1086],{},"No further configuration is required — the extension sends telemetry to Zeeq's hosted endpoint by default as soon as ",[277,1085,1043],{}," is set. Start Pi as normal in the trusted project and telemetry uploads automatically in the background.",[946,1088,1090],{"id":1089},"configure-prompt-text-privacy","Configure prompt text privacy",[219,1092,1093],{},"By default, the Pi extension exports prompt text. To omit prompt text while keeping prompt length metadata, set:",[303,1095,1097],{"className":449,"code":1096,"filename":451,"language":452,"meta":308,"style":308},"export ZEEQ_OTEL_OMIT_PROMPT=\"1\"\n",[277,1098,1099],{"__ignoreMap":308},[312,1100,1101,1103,1106,1108,1110,1112],{"class":314,"line":315},[312,1102,1053],{"class":648},[312,1104,1105],{"class":332}," ZEEQ_OTEL_OMIT_PROMPT",[312,1107,1059],{"class":318},[312,1109,652],{"class":318},[312,1111,694],{"class":322},[312,1113,591],{"class":318},[219,1115,1116,1117,1120,1121,1124],{},"When enabled, ",[277,1118,1119],{},"prompt_text"," is exported as ",[277,1122,1123],{},"omit_by_config",".",[219,1126,1127],{},"To keep only a prefix of each prompt, set:",[303,1129,1131],{"className":449,"code":1130,"filename":451,"language":452,"meta":308,"style":308},"export ZEEQ_OTEL_TRUNCATE_PROMPT=\"32\"\n",[277,1132,1133],{"__ignoreMap":308},[312,1134,1135,1137,1140,1142,1144,1147],{"class":314,"line":315},[312,1136,1053],{"class":648},[312,1138,1139],{"class":332}," ZEEQ_OTEL_TRUNCATE_PROMPT",[312,1141,1059],{"class":318},[312,1143,652],{"class":318},[312,1145,1146],{"class":322},"32",[312,1148,591],{"class":318},[219,1150,1151,1152,1155,1156,1159,1160,1163,1164,1124],{},"Truncated prompt text is exported as the retained prefix followed by ",[277,1153,1154],{},"...(truncated_by_config)",". A value of ",[277,1157,1158],{},"0",", an empty value, or an omitted variable disables config truncation. Positive values below ",[277,1161,1162],{},"16"," are treated as ",[277,1165,1162],{},[946,1167,1169],{"id":1168},"troubleshooting","Troubleshooting",[219,1171,1172],{},"Confirm the extension is installed and trusted:",[303,1174,1176],{"className":449,"code":1175,"filename":451,"language":452,"meta":308,"style":308},"pi list\n",[277,1177,1178],{"__ignoreMap":308},[312,1179,1180,1182],{"class":314,"line":315},[312,1181,937],{"class":388},[312,1183,1184],{"class":322}," list\n",[219,1186,1187],{},"Enable export error logging so failed uploads print to stderr instead of failing silently:",[303,1189,1191],{"className":449,"code":1190,"filename":451,"language":452,"meta":308,"style":308},"export PI_TELEMETRY_LOG_ERRORS=\"true\"\n",[277,1192,1193],{"__ignoreMap":308},[312,1194,1195,1197,1200,1202,1204,1206],{"class":314,"line":315},[312,1196,1053],{"class":648},[312,1198,1199],{"class":332}," PI_TELEMETRY_LOG_ERRORS",[312,1201,1059],{"class":318},[312,1203,652],{"class":318},[312,1205,431],{"class":322},[312,1207,591],{"class":318},[219,1209,1210],{},"Force an immediate upload instead of waiting for the batch timer, using the extension's own command from inside a Pi session:",[303,1212,1215],{"className":1213,"code":1214,"language":441,"meta":308},[439],"\u002Ftelemetry-flush\n",[277,1216,1214],{"__ignoreMap":308},[273,1218,1219,1220,1223,1224,1226,1227,1229,1230,1233],{},"A ",[277,1221,1222],{},"401"," on export almost always means ",[277,1225,1043],{}," is missing, expired, or shadowed by another token exported earlier in your shell profile (later ",[277,1228,1053],{},"s win). Re-mint a token at ",[282,1231,514],{"href":514,"rel":1232},[286]," if unsure.",[505,1235,1237],{"id":1236},"raw-api-shape","Raw API shape",[219,1239,1240,1241,1244,1245,1248],{},"The API endpoint for this is available at ",[277,1242,1243],{},"https:\u002F\u002Fapp.zeeq.ai\u002Fapi\u002Fv1\u002Ftelemetry\u002Fimport"," and requires an ",[277,1246,1247],{},"Authorization: Bearer \u003Ctoken>"," header with a valid Zeeq API token.",[219,1250,1251],{},"The payload shape:",[1253,1254,1255],"code-collapse",{},[303,1256,1259],{"className":627,"code":1257,"filename":1258,"language":631,"meta":308,"style":308},"{\n  \"conversation_id\": \"conv_local-session-abc123\",\n  \"harness_name\": \"my-harness\",\n  \"harness_version\": \"1.4.0\",\n  \"repository_remote_url\": \"https:\u002F\u002Fgithub.com\u002Fmy-org\u002Fmy-repo\",\n  \"head_branch\": \"main\",\n  \"head_sha\": \"a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2\",\n  \"events\": [\n    {\n      \"kind\": \"Prompt\",\n      \"event.timestamp\": \"2026-07-24T14:35:07.281Z\",\n      \"prompt_text\": \"Tell me a joke\",\n      \"prompt_length\": 15,\n      \"gen_ai.request.model\": \"gpt-5.5\"\n    },\n    {\n      \"kind\": \"ToolResult\",\n      \"event.timestamp\": \"2026-07-24T14:35:08.512Z\",\n      \"gen_ai.tool.name\": \"bash\",\n      \"gen_ai.tool.call.id\": \"call_1\",\n      \"gen_ai.tool.call.arguments\": { \"command\": \"ls\" },\n      \"gen_ai.tool.call.result\": \"README.md\\nsrc\u002F\",\n      \"gen_ai.tool.call.duration_ms\": 42,\n      \"gen_ai.tool.call.success\": true\n    },\n    {\n      \"kind\": \"Completion\",\n      \"event.timestamp\": \"2026-07-24T14:35:10.208Z\",\n      \"gen_ai.request.model\": \"gpt-5.5\",\n      \"gen_ai.usage.input_tokens\": 4267,\n      \"gen_ai.usage.cached_tokens\": 0,\n      \"gen_ai.usage.output_tokens\": 66,\n      \"gen_ai.usage.reasoning_tokens\": 0,\n      \"zeeq.cost.usd\": 0.023315\n    }\n  ]\n}\n","POST \u002Fapi\u002Fv1\u002Ftelemetry\u002Fimport",[277,1260,1261,1265,1285,1305,1325,1345,1365,1385,1399,1404,1425,1445,1464,1481,1499,1505,1510,1530,1550,1570,1591,1625,1652,1669,1684,1689,1694,1714,1734,1753,1770,1787,1804,1820,1835,1841,1847],{"__ignoreMap":308},[312,1262,1263],{"class":314,"line":315},[312,1264,638],{"class":318},[312,1266,1267,1269,1272,1274,1276,1278,1281,1283],{"class":314,"line":329},[312,1268,645],{"class":318},[312,1270,1271],{"class":648},"conversation_id",[312,1273,652],{"class":318},[312,1275,655],{"class":318},[312,1277,585],{"class":318},[312,1279,1280],{"class":322},"conv_local-session-abc123",[312,1282,652],{"class":318},[312,1284,664],{"class":318},[312,1286,1287,1289,1292,1294,1296,1298,1301,1303],{"class":314,"line":336},[312,1288,645],{"class":318},[312,1290,1291],{"class":648},"harness_name",[312,1293,652],{"class":318},[312,1295,655],{"class":318},[312,1297,585],{"class":318},[312,1299,1300],{"class":322},"my-harness",[312,1302,652],{"class":318},[312,1304,664],{"class":318},[312,1306,1307,1309,1312,1314,1316,1318,1321,1323],{"class":314,"line":342},[312,1308,645],{"class":318},[312,1310,1311],{"class":648},"harness_version",[312,1313,652],{"class":318},[312,1315,655],{"class":318},[312,1317,585],{"class":318},[312,1319,1320],{"class":322},"1.4.0",[312,1322,652],{"class":318},[312,1324,664],{"class":318},[312,1326,1327,1329,1332,1334,1336,1338,1341,1343],{"class":314,"line":348},[312,1328,645],{"class":318},[312,1330,1331],{"class":648},"repository_remote_url",[312,1333,652],{"class":318},[312,1335,655],{"class":318},[312,1337,585],{"class":318},[312,1339,1340],{"class":322},"https:\u002F\u002Fgithub.com\u002Fmy-org\u002Fmy-repo",[312,1342,652],{"class":318},[312,1344,664],{"class":318},[312,1346,1347,1349,1352,1354,1356,1358,1361,1363],{"class":314,"line":355},[312,1348,645],{"class":318},[312,1350,1351],{"class":648},"head_branch",[312,1353,652],{"class":318},[312,1355,655],{"class":318},[312,1357,585],{"class":318},[312,1359,1360],{"class":322},"main",[312,1362,652],{"class":318},[312,1364,664],{"class":318},[312,1366,1367,1369,1372,1374,1376,1378,1381,1383],{"class":314,"line":365},[312,1368,645],{"class":318},[312,1370,1371],{"class":648},"head_sha",[312,1373,652],{"class":318},[312,1375,655],{"class":318},[312,1377,585],{"class":318},[312,1379,1380],{"class":322},"a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2",[312,1382,652],{"class":318},[312,1384,664],{"class":318},[312,1386,1387,1389,1392,1394,1396],{"class":314,"line":371},[312,1388,645],{"class":318},[312,1390,1391],{"class":648},"events",[312,1393,652],{"class":318},[312,1395,655],{"class":318},[312,1397,1398],{"class":318}," [\n",[312,1400,1401],{"class":314,"line":377},[312,1402,1403],{"class":318},"    {\n",[312,1405,1406,1409,1412,1414,1416,1418,1421,1423],{"class":314,"line":382},[312,1407,1408],{"class":318},"      \"",[312,1410,1411],{"class":388},"kind",[312,1413,652],{"class":318},[312,1415,655],{"class":318},[312,1417,585],{"class":318},[312,1419,1420],{"class":322},"Prompt",[312,1422,652],{"class":318},[312,1424,664],{"class":318},[312,1426,1427,1429,1432,1434,1436,1438,1441,1443],{"class":314,"line":392},[312,1428,1408],{"class":318},[312,1430,1431],{"class":388},"event.timestamp",[312,1433,652],{"class":318},[312,1435,655],{"class":318},[312,1437,585],{"class":318},[312,1439,1440],{"class":322},"2026-07-24T14:35:07.281Z",[312,1442,652],{"class":318},[312,1444,664],{"class":318},[312,1446,1447,1449,1451,1453,1455,1457,1460,1462],{"class":314,"line":400},[312,1448,1408],{"class":318},[312,1450,1119],{"class":388},[312,1452,652],{"class":318},[312,1454,655],{"class":318},[312,1456,585],{"class":318},[312,1458,1459],{"class":322},"Tell me a joke",[312,1461,652],{"class":318},[312,1463,664],{"class":318},[312,1465,1466,1468,1471,1473,1475,1479],{"class":314,"line":408},[312,1467,1408],{"class":318},[312,1469,1470],{"class":388},"prompt_length",[312,1472,652],{"class":318},[312,1474,655],{"class":318},[312,1476,1478],{"class":1477},"sbssI"," 15",[312,1480,664],{"class":318},[312,1482,1483,1485,1488,1490,1492,1494,1497],{"class":314,"line":418},[312,1484,1408],{"class":318},[312,1486,1487],{"class":388},"gen_ai.request.model",[312,1489,652],{"class":318},[312,1491,655],{"class":318},[312,1493,585],{"class":318},[312,1495,1496],{"class":322},"gpt-5.5",[312,1498,591],{"class":318},[312,1500,1502],{"class":314,"line":1501},15,[312,1503,1504],{"class":318},"    },\n",[312,1506,1508],{"class":314,"line":1507},16,[312,1509,1403],{"class":318},[312,1511,1513,1515,1517,1519,1521,1523,1526,1528],{"class":314,"line":1512},17,[312,1514,1408],{"class":318},[312,1516,1411],{"class":388},[312,1518,652],{"class":318},[312,1520,655],{"class":318},[312,1522,585],{"class":318},[312,1524,1525],{"class":322},"ToolResult",[312,1527,652],{"class":318},[312,1529,664],{"class":318},[312,1531,1533,1535,1537,1539,1541,1543,1546,1548],{"class":314,"line":1532},18,[312,1534,1408],{"class":318},[312,1536,1431],{"class":388},[312,1538,652],{"class":318},[312,1540,655],{"class":318},[312,1542,585],{"class":318},[312,1544,1545],{"class":322},"2026-07-24T14:35:08.512Z",[312,1547,652],{"class":318},[312,1549,664],{"class":318},[312,1551,1553,1555,1558,1560,1562,1564,1566,1568],{"class":314,"line":1552},19,[312,1554,1408],{"class":318},[312,1556,1557],{"class":388},"gen_ai.tool.name",[312,1559,652],{"class":318},[312,1561,655],{"class":318},[312,1563,585],{"class":318},[312,1565,452],{"class":322},[312,1567,652],{"class":318},[312,1569,664],{"class":318},[312,1571,1573,1575,1578,1580,1582,1584,1587,1589],{"class":314,"line":1572},20,[312,1574,1408],{"class":318},[312,1576,1577],{"class":388},"gen_ai.tool.call.id",[312,1579,652],{"class":318},[312,1581,655],{"class":318},[312,1583,585],{"class":318},[312,1585,1586],{"class":322},"call_1",[312,1588,652],{"class":318},[312,1590,664],{"class":318},[312,1592,1594,1596,1599,1601,1603,1606,1608,1611,1613,1615,1617,1620,1622],{"class":314,"line":1593},21,[312,1595,1408],{"class":318},[312,1597,1598],{"class":388},"gen_ai.tool.call.arguments",[312,1600,652],{"class":318},[312,1602,655],{"class":318},[312,1604,1605],{"class":318}," {",[312,1607,585],{"class":318},[312,1609,1610],{"class":1477},"command",[312,1612,652],{"class":318},[312,1614,655],{"class":318},[312,1616,585],{"class":318},[312,1618,1619],{"class":322},"ls",[312,1621,652],{"class":318},[312,1623,1624],{"class":318}," },\n",[312,1626,1628,1630,1633,1635,1637,1639,1642,1645,1648,1650],{"class":314,"line":1627},22,[312,1629,1408],{"class":318},[312,1631,1632],{"class":388},"gen_ai.tool.call.result",[312,1634,652],{"class":318},[312,1636,655],{"class":318},[312,1638,585],{"class":318},[312,1640,1641],{"class":322},"README.md",[312,1643,1644],{"class":332},"\\n",[312,1646,1647],{"class":322},"src\u002F",[312,1649,652],{"class":318},[312,1651,664],{"class":318},[312,1653,1655,1657,1660,1662,1664,1667],{"class":314,"line":1654},23,[312,1656,1408],{"class":318},[312,1658,1659],{"class":388},"gen_ai.tool.call.duration_ms",[312,1661,652],{"class":318},[312,1663,655],{"class":318},[312,1665,1666],{"class":1477}," 42",[312,1668,664],{"class":318},[312,1670,1672,1674,1677,1679,1681],{"class":314,"line":1671},24,[312,1673,1408],{"class":318},[312,1675,1676],{"class":388},"gen_ai.tool.call.success",[312,1678,652],{"class":318},[312,1680,655],{"class":318},[312,1682,1683],{"class":318}," true\n",[312,1685,1687],{"class":314,"line":1686},25,[312,1688,1504],{"class":318},[312,1690,1692],{"class":314,"line":1691},26,[312,1693,1403],{"class":318},[312,1695,1697,1699,1701,1703,1705,1707,1710,1712],{"class":314,"line":1696},27,[312,1698,1408],{"class":318},[312,1700,1411],{"class":388},[312,1702,652],{"class":318},[312,1704,655],{"class":318},[312,1706,585],{"class":318},[312,1708,1709],{"class":322},"Completion",[312,1711,652],{"class":318},[312,1713,664],{"class":318},[312,1715,1717,1719,1721,1723,1725,1727,1730,1732],{"class":314,"line":1716},28,[312,1718,1408],{"class":318},[312,1720,1431],{"class":388},[312,1722,652],{"class":318},[312,1724,655],{"class":318},[312,1726,585],{"class":318},[312,1728,1729],{"class":322},"2026-07-24T14:35:10.208Z",[312,1731,652],{"class":318},[312,1733,664],{"class":318},[312,1735,1737,1739,1741,1743,1745,1747,1749,1751],{"class":314,"line":1736},29,[312,1738,1408],{"class":318},[312,1740,1487],{"class":388},[312,1742,652],{"class":318},[312,1744,655],{"class":318},[312,1746,585],{"class":318},[312,1748,1496],{"class":322},[312,1750,652],{"class":318},[312,1752,664],{"class":318},[312,1754,1756,1758,1761,1763,1765,1768],{"class":314,"line":1755},30,[312,1757,1408],{"class":318},[312,1759,1760],{"class":388},"gen_ai.usage.input_tokens",[312,1762,652],{"class":318},[312,1764,655],{"class":318},[312,1766,1767],{"class":1477}," 4267",[312,1769,664],{"class":318},[312,1771,1773,1775,1778,1780,1782,1785],{"class":314,"line":1772},31,[312,1774,1408],{"class":318},[312,1776,1777],{"class":388},"gen_ai.usage.cached_tokens",[312,1779,652],{"class":318},[312,1781,655],{"class":318},[312,1783,1784],{"class":1477}," 0",[312,1786,664],{"class":318},[312,1788,1790,1792,1795,1797,1799,1802],{"class":314,"line":1789},32,[312,1791,1408],{"class":318},[312,1793,1794],{"class":388},"gen_ai.usage.output_tokens",[312,1796,652],{"class":318},[312,1798,655],{"class":318},[312,1800,1801],{"class":1477}," 66",[312,1803,664],{"class":318},[312,1805,1807,1809,1812,1814,1816,1818],{"class":314,"line":1806},33,[312,1808,1408],{"class":318},[312,1810,1811],{"class":388},"gen_ai.usage.reasoning_tokens",[312,1813,652],{"class":318},[312,1815,655],{"class":318},[312,1817,1784],{"class":1477},[312,1819,664],{"class":318},[312,1821,1823,1825,1828,1830,1832],{"class":314,"line":1822},34,[312,1824,1408],{"class":318},[312,1826,1827],{"class":388},"zeeq.cost.usd",[312,1829,652],{"class":318},[312,1831,655],{"class":318},[312,1833,1834],{"class":1477}," 0.023315\n",[312,1836,1838],{"class":314,"line":1837},35,[312,1839,1840],{"class":318},"    }\n",[312,1842,1844],{"class":314,"line":1843},36,[312,1845,1846],{"class":318},"  ]\n",[312,1848,1850],{"class":314,"line":1849},37,[312,1851,823],{"class":318},[226,1853,1854,1864,1876,1899],{},[229,1855,1856,288,1858,1860,1861,1863],{},[277,1857,1271],{},[277,1859,1291],{}," are required at the top level; ",[277,1862,1391],{}," must contain at least one entry.",[229,1865,1866,527,1868,527,1870,1872,1873,1875],{},[277,1867,1311],{},[277,1869,1331],{},[277,1871,1351],{},", and ",[277,1874,1371],{}," are optional but power PR-level provenance linking — send them when available.",[229,1877,1878,1879,1881,1882,527,1884,1886,1887,1889,1890,1892,1893,1895,1896,1898],{},"Each event's ",[277,1880,1411],{}," is one of ",[277,1883,1420],{},[277,1885,1525],{},", or ",[277,1888,1709],{},". Send ",[277,1891,1420],{}," for user input, ",[277,1894,1525],{}," per tool call, and ",[277,1897,1709],{}," once per model response with token counts.",[229,1900,1901,1903],{},[277,1902,1827],{}," is optional. When your client can report a provider-normalized cost, send it and Zeeq treats it as authoritative; otherwise Zeeq estimates cost from token counts.",[273,1905,1906,1907,617,1910,1913],{},"Any ",[277,1908,1909],{},"user.email",[277,1911,1912],{},"organization_id"," field sent on an event is ignored — Zeeq always attributes the request to the identity behind your bearer token.",[1915,1916,1917],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":308,"searchDepth":329,"depth":329,"links":1919},[1920,1921,1922,1927,1928],{"id":216,"depth":329,"text":217},{"id":270,"depth":329,"text":271},{"id":495,"depth":329,"text":496,"children":1923},[1924,1925,1926],{"id":507,"depth":336,"text":508},{"id":540,"depth":336,"text":541},{"id":623,"depth":336,"text":624},{"id":905,"depth":329,"text":237},{"id":911,"depth":329,"text":912,"children":1929},[1930,1931],{"id":937,"depth":336,"text":938},{"id":1236,"depth":336,"text":1237},"Visibility into agent sessions, token usage, cost, and provenance for PRs",null,{},{"icon":14},{"title":62,"description":1932},"hAx9bdhkWZu18B7U0pWtfgs8XhJfZ65r67d-FieiPTM",[1939,1941],{"title":58,"path":59,"stem":60,"description":1940,"icon":14,"children":-1},"Visibility into agent knowledge interaction and code review performance",{"title":66,"path":67,"stem":68,"description":1942,"icon":14,"children":-1},"Dynamic skills use server composition of text fragments to produce adaptive agent skills.",1785298594998]