mirror of
https://github.com/mr0xb/dotfiles.git
synced 2026-08-28 03:44:57 -04:00
119 lines
350 KiB
JSON
119 lines
350 KiB
JSON
{"type":"permission-mode","permissionMode":"default","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87"}
|
||
{"type":"file-history-snapshot","messageId":"3d7c16cd-af9f-4098-859c-b57a7de311b8","snapshot":{"messageId":"3d7c16cd-af9f-4098-859c-b57a7de311b8","trackedFileBackups":{},"timestamp":"2026-04-22T20:23:43.561Z"},"isSnapshotUpdate":false}
|
||
{"parentUuid":null,"isSidechain":false,"promptId":"b48f6e0d-4eb6-46d7-b17e-3656ae28bdcd","type":"user","message":{"role":"user","content":"I want to create a plugin for gravitationals Teleport software, similar to their Jira access plugin. The Plugin should be able to send the request description to either ChatGPT application (webhook), anthropic, or aws bedrock where it will then create a risk score for the request. The risk score should be made up of a few different components but it should be checking that a Jira ticket in the CUSTX project is in the description and that there is a description of what work is being performed. The risk scoring should be done using gen-z slang (i.e. sus for medium, no cap for low risk). Low risk requests should be automatically approved and no JIRA ticket should be created but medium and higher risk requests should create a JIRA ticket in the ITSM project. The threshold for this risk-ticket creation should be configurable"},"uuid":"3d7c16cd-af9f-4098-859c-b57a7de311b8","timestamp":"2026-04-22T20:23:43.561Z","permissionMode":"default","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"3d7c16cd-af9f-4098-859c-b57a7de311b8","isSidechain":false,"attachment":{"type":"deferred_tools_delta","addedNames":["AskUserQuestion","CronCreate","CronDelete","CronList","EnterPlanMode","EnterWorktree","ExitPlanMode","ExitWorktree","Monitor","NotebookEdit","PushNotification","RemoteTrigger","TaskCreate","TaskGet","TaskList","TaskOutput","TaskStop","TaskUpdate","WebFetch","WebSearch","mcp__claude_ai_Apollo_io__authenticate","mcp__claude_ai_Apollo_io__complete_authentication","mcp__claude_ai_Asana__authenticate","mcp__claude_ai_Asana__complete_authentication","mcp__claude_ai_Atlassian_2__authenticate","mcp__claude_ai_Atlassian_2__complete_authentication","mcp__claude_ai_Atlassian__authenticate","mcp__claude_ai_Atlassian__complete_authentication","mcp__claude_ai_Gmail__authenticate","mcp__claude_ai_Gmail__complete_authentication","mcp__claude_ai_Google_Calendar__authenticate","mcp__claude_ai_Google_Calendar__complete_authentication","mcp__claude_ai_Google_Drive__authenticate","mcp__claude_ai_Google_Drive__complete_authentication","mcp__claude_ai_Lucid__authenticate","mcp__claude_ai_Lucid__complete_authentication","mcp__claude_ai_Outreach__authenticate","mcp__claude_ai_Outreach__complete_authentication","mcp__claude_ai_Slack__authenticate","mcp__claude_ai_Slack__complete_authentication","mcp__claude_ai_Superhuman__authenticate","mcp__claude_ai_Superhuman__complete_authentication","mcp__claude_ai_Zoom_for_Claude__authenticate","mcp__claude_ai_Zoom_for_Claude__complete_authentication"],"addedLines":["AskUserQuestion","CronCreate","CronDelete","CronList","EnterPlanMode","EnterWorktree","ExitPlanMode","ExitWorktree","Monitor","NotebookEdit","PushNotification","RemoteTrigger","TaskCreate","TaskGet","TaskList","TaskOutput","TaskStop","TaskUpdate","WebFetch","WebSearch","mcp__claude_ai_Apollo_io__authenticate","mcp__claude_ai_Apollo_io__complete_authentication","mcp__claude_ai_Asana__authenticate","mcp__claude_ai_Asana__complete_authentication","mcp__claude_ai_Atlassian_2__authenticate","mcp__claude_ai_Atlassian_2__complete_authentication","mcp__claude_ai_Atlassian__authenticate","mcp__claude_ai_Atlassian__complete_authentication","mcp__claude_ai_Gmail__authenticate","mcp__claude_ai_Gmail__complete_authentication","mcp__claude_ai_Google_Calendar__authenticate","mcp__claude_ai_Google_Calendar__complete_authentication","mcp__claude_ai_Google_Drive__authenticate","mcp__claude_ai_Google_Drive__complete_authentication","mcp__claude_ai_Lucid__authenticate","mcp__claude_ai_Lucid__complete_authentication","mcp__claude_ai_Outreach__authenticate","mcp__claude_ai_Outreach__complete_authentication","mcp__claude_ai_Slack__authenticate","mcp__claude_ai_Slack__complete_authentication","mcp__claude_ai_Superhuman__authenticate","mcp__claude_ai_Superhuman__complete_authentication","mcp__claude_ai_Zoom_for_Claude__authenticate","mcp__claude_ai_Zoom_for_Claude__complete_authentication"],"removedNames":[]},"type":"attachment","uuid":"fff4e044-7a84-4676-8bc9-2c1462cd37de","timestamp":"2026-04-22T20:23:43.561Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"fff4e044-7a84-4676-8bc9-2c1462cd37de","isSidechain":false,"attachment":{"type":"skill_listing","content":"- update-config: Use this skill to configure the Claude Code harness via settings.json. Automated behaviors (\"from now on when X\", \"each time X\", \"whenever X\", \"before/after X\") require hooks configured in settings.json - the harness executes these, not Claude, so memory/preferences cannot fulfill them. Also use for: permissions (\"allow X\", \"add permission\", \"move permission to\"), env vars (\"set X=Y\"), hook troubleshooting, or any changes to settings.json/settings.local.json files. Examples: \"allow npm commands\", \"add bq permission to global settings\", \"move permission to user settings\", \"set DEBUG=true\", \"when claude stops show X\". For simple settings like theme/model, use Config tool.\n- keybindings-help: Use when the user wants to customize keyboard shortcuts, rebind keys, add chord bindings, or modify ~/.claude/keybindings.json. Examples: \"rebind ctrl+s\", \"add a chord shortcut\", \"change the submit key\", \"customize keybindings\".\n- simplify: Review changed code for reuse, quality, and efficiency, then fix any issues found.\n- fewer-permission-prompts: Scan your transcripts for common read-only Bash and MCP tool calls, then add a prioritized allowlist to project .claude/settings.json to reduce permission prompts.\n- loop: Run a prompt or slash command on a recurring interval (e.g. /loop 5m /foo). Omit the interval to let the model self-pace. - When the user wants to set up a recurring task, poll for status, or run something repeatedly on an interval (e.g. \"check the deploy every 5 minutes\", \"keep running /babysit-prs\"). Do NOT invoke for one-off tasks.\n- schedule: Create, update, list, or run scheduled remote agents (routines) on a cron schedule or once at a specific time. - When the user wants to schedule a recurring remote agent, set up automated tasks, create a cron job for Claude Code, or manage their scheduled agents/routines. Also use when the user wants a one-time scheduled run (\"run this once at 3pm\", \"remind me to check X tomorrow\").\n- claude-api: Build, debug, and optimize Claude API / Anthropic SDK apps. Apps built with this skill should include prompt caching. Also handles migrating existing Claude API code between Claude model versions (4.5 → 4.6, 4.6 → 4.7, retired-model replacements).\nTRIGGER when: code imports `anthropic`/`@anthropic-ai/sdk`; user asks for the Claude API, Anthropic SDK, or Managed Agents; user adds/modifies/tunes a Claude feature (caching, thinking, compaction, tool use, batch, files, citations, memory) or model (Opus/Sonnet/Haiku) in a file; questions about prompt caching / cache hit rate in an Anthropic SDK project.\nSKIP: file imports `openai`/other-provider SDK, filename like `*-openai.py`/`*-generic.py`, provider-neutral code, general programming/ML.\n- init: Initialize a new CLAUDE.md file with codebase documentation\n- review: Review a pull request\n- security-review: Complete a security review of the pending changes on the current branch","skillCount":10,"isInitial":true},"type":"attachment","uuid":"8f7a54a9-d34e-4f23-83cf-9f80c4e486d0","timestamp":"2026-04-22T20:23:43.561Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"8f7a54a9-d34e-4f23-83cf-9f80c4e486d0","isSidechain":false,"message":{"model":"claude-sonnet-4-6","id":"msg_015NizdcmtcrEbPca86hDKPM","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"","signature":"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"}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":5735,"cache_read_input_tokens":10542,"output_tokens":901,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":5735},"inference_geo":"","iterations":[{"input_tokens":3,"output_tokens":901,"cache_read_input_tokens":10542,"cache_creation_input_tokens":5735,"cache_creation":{"ephemeral_5m_input_tokens":5735,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKSAAevo65TEgWMRgaRH","type":"assistant","uuid":"4a3d505e-b3bc-4bb1-ae0b-fa2e16ab142b","timestamp":"2026-04-22T20:23:50.339Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"4a3d505e-b3bc-4bb1-ae0b-fa2e16ab142b","isSidechain":false,"message":{"model":"claude-sonnet-4-6","id":"msg_015NizdcmtcrEbPca86hDKPM","type":"message","role":"assistant","content":[{"type":"text","text":"Let me first explore the project directory and then research the Teleport plugin framework to plan this properly."}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":5735,"cache_read_input_tokens":10542,"output_tokens":901,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":5735},"inference_geo":"","iterations":[{"input_tokens":3,"output_tokens":901,"cache_read_input_tokens":10542,"cache_creation_input_tokens":5735,"cache_creation":{"ephemeral_5m_input_tokens":5735,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKSAAevo65TEgWMRgaRH","type":"assistant","uuid":"40e84460-afd7-4584-87b5-d2a0465213af","timestamp":"2026-04-22T20:23:51.199Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"40e84460-afd7-4584-87b5-d2a0465213af","isSidechain":false,"message":{"model":"claude-sonnet-4-6","id":"msg_015NizdcmtcrEbPca86hDKPM","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01GQamdz4EmvgpPeDNpupk6Z","name":"Bash","input":{"command":"ls -la /Users/steve.briggs/projects/televibe/","description":"List project directory contents"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":5735,"cache_read_input_tokens":10542,"output_tokens":901,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":5735},"inference_geo":"","iterations":[{"input_tokens":3,"output_tokens":901,"cache_read_input_tokens":10542,"cache_creation_input_tokens":5735,"cache_creation":{"ephemeral_5m_input_tokens":5735,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKSAAevo65TEgWMRgaRH","type":"assistant","uuid":"f6702f26-7736-48c1-94e3-0d8c5f17c514","timestamp":"2026-04-22T20:23:51.769Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"f6702f26-7736-48c1-94e3-0d8c5f17c514","isSidechain":false,"promptId":"b48f6e0d-4eb6-46d7-b17e-3656ae28bdcd","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01GQamdz4EmvgpPeDNpupk6Z","type":"tool_result","content":"\u001b[38;5;6m\u001b[1md\u001b[0m\u001b[38;5;10mr\u001b[39m\u001b[38;5;11mw\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;14m\u001b[39m \u001b[38;5;13msteve.briggs\u001b[39m \u001b[38;5;14mstaff\u001b[39m \u001b[38;5;10m64\u001b[39m \u001b[38;5;10mB\u001b[39m \u001b[38;5;13mWed Apr 22 16:20:18 2026\u001b[39m \u001b[38;5;6m\u001b[1m.\u001b[0m\n\u001b[38;5;6m\u001b[1md\u001b[0m\u001b[38;5;10mr\u001b[39m\u001b[38;5;11mw\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;14m\u001b[39m \u001b[38;5;13msteve.briggs\u001b[39m \u001b[38;5;14mstaff\u001b[39m \u001b[38;5;10m1.5\u001b[39m \u001b[38;5;10mKB\u001b[39m \u001b[38;5;13mWed Apr 22 16:20:18 2026\u001b[39m \u001b[38;5;6m\u001b[1m..\u001b[0m","is_error":false}]},"uuid":"9baaeb40-e4a3-464e-9bcf-2b3478bf054f","timestamp":"2026-04-22T20:23:54.200Z","toolUseResult":{"stdout":"\u001b[38;5;6m\u001b[1md\u001b[0m\u001b[38;5;10mr\u001b[39m\u001b[38;5;11mw\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;14m\u001b[39m \u001b[38;5;13msteve.briggs\u001b[39m \u001b[38;5;14mstaff\u001b[39m \u001b[38;5;10m64\u001b[39m \u001b[38;5;10mB\u001b[39m \u001b[38;5;13mWed Apr 22 16:20:18 2026\u001b[39m \u001b[38;5;6m\u001b[1m.\u001b[0m\n\u001b[38;5;6m\u001b[1md\u001b[0m\u001b[38;5;10mr\u001b[39m\u001b[38;5;11mw\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;14m\u001b[39m \u001b[38;5;13msteve.briggs\u001b[39m \u001b[38;5;14mstaff\u001b[39m \u001b[38;5;10m1.5\u001b[39m \u001b[38;5;10mKB\u001b[39m \u001b[38;5;13mWed Apr 22 16:20:18 2026\u001b[39m \u001b[38;5;6m\u001b[1m..\u001b[0m","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false},"sourceToolAssistantUUID":"f6702f26-7736-48c1-94e3-0d8c5f17c514","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"9baaeb40-e4a3-464e-9bcf-2b3478bf054f","isSidechain":false,"message":{"model":"claude-sonnet-4-6","id":"msg_015NizdcmtcrEbPca86hDKPM","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01FxjNE3Mj3soGu7V1FA3eyV","name":"Agent","input":{"description":"Research Teleport access plugin structure","subagent_type":"Explore","prompt":"Search the web for Gravitational Teleport access plugin development guide. Look at https://goteleport.com/docs/access-controls/access-request-plugins/ and the teleport-plugins GitHub repository structure. I need to understand:\n\n1. The overall plugin architecture (what Go packages/interfaces are used)\n2. How existing plugins like Jira receive access requests and process them\n3. What the main entry points, interfaces, and patterns are\n4. How access request data is structured (description, user, roles, annotations)\n5. How to approve/deny requests programmatically\n\nReport the key types, interfaces, and patterns needed to build a new plugin from scratch."},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":5735,"cache_read_input_tokens":10542,"output_tokens":901,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":5735},"inference_geo":"","iterations":[{"input_tokens":3,"output_tokens":901,"cache_read_input_tokens":10542,"cache_creation_input_tokens":5735,"cache_creation":{"ephemeral_5m_input_tokens":5735,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKSAAevo65TEgWMRgaRH","type":"assistant","uuid":"df5b440d-dd08-4ffa-8801-b58053d59f46","timestamp":"2026-04-22T20:23:58.509Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"type":"queue-operation","operation":"enqueue","timestamp":"2026-04-22T20:24:17.283Z","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","content":"/model"}
|
||
{"type":"queue-operation","operation":"dequeue","timestamp":"2026-04-22T20:24:20.359Z","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87"}
|
||
{"parentUuid":"df5b440d-dd08-4ffa-8801-b58053d59f46","isSidechain":false,"promptId":"c23cc0ce-d3b1-4af7-872a-f9fe3169069d","type":"user","message":{"role":"user","content":[{"type":"tool_result","content":"The user doesn't want to proceed with this tool use. The tool use was rejected (eg. if it was a file edit, the new_string was NOT written to the file). STOP what you are doing and wait for the user to tell you how to proceed.","is_error":true,"tool_use_id":"toolu_01FxjNE3Mj3soGu7V1FA3eyV"}]},"uuid":"3dfb6847-e6cf-4018-9aea-b1ad20fa5fa1","timestamp":"2026-04-22T20:24:20.348Z","toolUseResult":"User rejected tool use","sourceToolAssistantUUID":"df5b440d-dd08-4ffa-8801-b58053d59f46","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"3dfb6847-e6cf-4018-9aea-b1ad20fa5fa1","isSidechain":false,"promptId":"c23cc0ce-d3b1-4af7-872a-f9fe3169069d","type":"user","message":{"role":"user","content":[{"type":"text","text":"[Request interrupted by user for tool use]"}]},"uuid":"a495e31f-1bd9-488f-99d5-b49497d7c2e7","timestamp":"2026-04-22T20:24:20.348Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"type":"file-history-snapshot","messageId":"7c130936-6f76-4933-9546-4f4bd860daf4","snapshot":{"messageId":"7c130936-6f76-4933-9546-4f4bd860daf4","trackedFileBackups":{},"timestamp":"2026-04-22T20:24:29.107Z"},"isSnapshotUpdate":false}
|
||
{"parentUuid":"a495e31f-1bd9-488f-99d5-b49497d7c2e7","isSidechain":false,"promptId":"c23cc0ce-d3b1-4af7-872a-f9fe3169069d","type":"user","message":{"role":"user","content":"<local-command-caveat>Caveat: The messages below were generated by the user while running local commands. DO NOT respond to these messages or otherwise consider them in your response unless the user explicitly asks you to.</local-command-caveat>"},"isMeta":true,"uuid":"0f41f703-5858-4a09-9e44-3bd5323c4922","timestamp":"2026-04-22T20:24:29.107Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"0f41f703-5858-4a09-9e44-3bd5323c4922","isSidechain":false,"promptId":"c23cc0ce-d3b1-4af7-872a-f9fe3169069d","type":"user","message":{"role":"user","content":"<command-name>/model</command-name>\n <command-message>model</command-message>\n <command-args></command-args>"},"uuid":"7c130936-6f76-4933-9546-4f4bd860daf4","timestamp":"2026-04-22T20:24:29.106Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"7c130936-6f76-4933-9546-4f4bd860daf4","isSidechain":false,"promptId":"c23cc0ce-d3b1-4af7-872a-f9fe3169069d","type":"user","message":{"role":"user","content":"<local-command-stdout>Set model to \u001b[1mOpus 4.7 (1M context)\u001b[22m</local-command-stdout>"},"uuid":"272ac6e5-52bf-4071-a333-6f333faf073c","timestamp":"2026-04-22T20:24:29.106Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"type":"file-history-snapshot","messageId":"0a4555fb-77a0-4c1f-afda-9c5387002ad1","snapshot":{"messageId":"0a4555fb-77a0-4c1f-afda-9c5387002ad1","trackedFileBackups":{},"timestamp":"2026-04-22T20:24:31.810Z"},"isSnapshotUpdate":false}
|
||
{"parentUuid":"272ac6e5-52bf-4071-a333-6f333faf073c","isSidechain":false,"promptId":"eed2e3d3-3233-47d3-b25e-26c593d7e3a8","type":"user","message":{"role":"user","content":"I want to create a plugin for gravitationals Teleport software, similar to their Jira access plugin. The Plugin should be able to send the request description to either ChatGPT application (webhook), anthropic, or aws bedrock where it will then create a risk score for the request. The risk score should be made up of a few different components but it should be checking that a Jira ticket in the CUSTX project is in the description and that there is a description of what work is being performed. The risk scoring should be done using gen-z slang (i.e. sus for medium, no cap for low risk). Low risk requests should be automatically approved and no JIRA ticket should be created but medium and higher risk requests should create a JIRA ticket in the ITSM project. The threshold for this risk-ticket creation should be configurable"},"uuid":"0a4555fb-77a0-4c1f-afda-9c5387002ad1","timestamp":"2026-04-22T20:24:31.809Z","permissionMode":"default","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"0a4555fb-77a0-4c1f-afda-9c5387002ad1","isSidechain":false,"message":{"model":"claude-opus-4-7","id":"msg_01AMFJqi9saQSKChi3KwxATs","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"","signature":"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"}],"stop_reason":"end_turn","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":6,"cache_creation_input_tokens":9824,"cache_read_input_tokens":14726,"output_tokens":3387,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":9824},"inference_geo":"","iterations":[{"input_tokens":6,"output_tokens":3387,"cache_read_input_tokens":14726,"cache_creation_input_tokens":9824,"cache_creation":{"ephemeral_5m_input_tokens":9824,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKSDiMVw1141oGTDDnqs","type":"assistant","uuid":"1e94eb51-f137-4bd1-948b-672755217b95","timestamp":"2026-04-22T20:25:02.598Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"1e94eb51-f137-4bd1-948b-672755217b95","isSidechain":false,"message":{"model":"claude-opus-4-7","id":"msg_01AMFJqi9saQSKChi3KwxATs","type":"message","role":"assistant","content":[{"type":"text","text":"This is a meaty greenfield project. Let me sketch the shape, flag the decisions I'd want your input on before writing code, and then proceed once we're aligned.\n\n## Proposed shape\n\n**Language & framework:** Go, following Teleport's `integrations/access/*` plugin pattern (same approach as their Jira plugin — `AccessRequestClient` watcher loop → event handler → approve/deny + side effects). Their existing plugins share a `lib/` with boilerplate for Teleport auth, watcher, logging, config — we'd use that as scaffolding.\n\n**Module layout:**\n```\ntelevibe/\n├── cmd/televibe/main.go # entry point, config load, signal handling\n├── config.go # TOML: [teleport], [ai], [jira], [risk]\n├── app.go # watcher loop, dispatch\n├── ai/{provider.go, anthropic.go, bedrock.go, webhook.go}\n├── risk/{score.go, slang.go, prompt.go}\n├── jira/itsm.go # ITSM ticket creator (reuse go-jira)\n└── teleport/client.go\n```\n\n**Flow per request:**\n1. Watcher fires on new `PENDING` request.\n2. Validate structurally: CUSTX-### regex in `request.RequestReason` → component score. Description length/non-empty → component score.\n3. Send reason + roles + resources to configured AI provider with a structured prompt asking for JSON: `{risk_score: 0-100, components: {...}, reasoning: \"...\"}`.\n4. Combine deterministic checks + AI score → bucket into slang tier.\n5. If tier < threshold → auto-approve with annotation. Else → file ITSM ticket, leave request PENDING, comment back the ticket ID.\n\n**Risk components I'd propose:**\n- `jira_reference` (hard check, CUSTX-### regex) — 30 pts missing\n- `description_quality` (AI-judged: coherent, specifies what/why) — up to 25\n- `privilege_level` (derived from requested roles/resources) — up to 25\n- `off_hours` (configurable window) — up to 10\n- `ai_freeform_concerns` (AI flags anomalies) — up to 10\n\n**Slang tiers (proposed, open to your taste):**\n| Score | Tier | Slang |\n|---|---|---|\n| 0–24 | low | \"no cap\" — auto-approve |\n| 25–49 | medium | \"sus\" — ITSM ticket, manual review |\n| 50–74 | high | \"mad sus fr\" — ITSM ticket + escalation label |\n| 75–100 | critical | \"straight L, touch grass\" — ITSM ticket + on-call page |\n\nThreshold is a single config int (`risk.ticket_threshold = 25` by default) — anything ≥ that files ITSM.\n\n## Questions before I scaffold\n\n1. **Provider selection:** one-at-a-time via config (`ai.provider = \"anthropic\"`), or plural (run all, majority vote)? The single-provider form is way simpler and matches the ask — confirm?\n2. **ITSM ticket semantics:** does filing the ticket *block* approval (Teleport stays PENDING until ITSM closes) or is it purely for audit while the plugin still lets a human approve in Teleport normally? The official Jira plugin ties the two — approval in Jira flips Teleport. Want that symmetry for ITSM?\n3. **Gen-Z tier names:** happy with the four I proposed, or want to swap any? (I can also add \"mid\" somewhere if it fits your vibe.)\n4. **Config file format:** TOML to match the rest of the teleport-plugins ecosystem, or do you prefer YAML?\n\nOnce you answer those I'll initialize the Go module, wire up config + watcher + one AI provider end-to-end, stub the others, and we can iterate. Reasonable?"}],"stop_reason":"end_turn","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":6,"cache_creation_input_tokens":9824,"cache_read_input_tokens":14726,"output_tokens":3387,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":9824},"inference_geo":"","iterations":[{"input_tokens":6,"output_tokens":3387,"cache_read_input_tokens":14726,"cache_creation_input_tokens":9824,"cache_creation":{"ephemeral_5m_input_tokens":9824,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKSDiMVw1141oGTDDnqs","type":"assistant","uuid":"b0c7c88c-6f51-4be7-ae12-640f090ce324","timestamp":"2026-04-22T20:25:22.305Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"b0c7c88c-6f51-4be7-ae12-640f090ce324","isSidechain":false,"type":"system","subtype":"turn_duration","durationMs":50534,"messageCount":16,"timestamp":"2026-04-22T20:25:22.351Z","uuid":"35273afc-78df-4eef-b3fb-086a8e9c4d27","isMeta":false,"userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"type":"last-prompt","lastPrompt":"I want to create a plugin for gravitationals Teleport software, similar to their Jira access plugin. The Plugin should be able to send the request description to either ChatGPT application (webhook),…","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87"}
|
||
{"type":"permission-mode","permissionMode":"default","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87"}
|
||
{"type":"file-history-snapshot","messageId":"0fe55191-25a9-4fa5-9d5d-c1df5540b425","snapshot":{"messageId":"0fe55191-25a9-4fa5-9d5d-c1df5540b425","trackedFileBackups":{},"timestamp":"2026-04-22T20:27:14.395Z"},"isSnapshotUpdate":false}
|
||
{"parentUuid":"35273afc-78df-4eef-b3fb-086a8e9c4d27","isSidechain":false,"promptId":"1a74d92d-87ee-4b9a-b7b6-9d69d238ae5a","type":"user","message":{"role":"user","content":"1. one-at-a-time, 2. yes, when a ticket is created the teleport request stays pending until it is approved by an SRE member, 3. yup this is good, 4 toml is fine"},"uuid":"0fe55191-25a9-4fa5-9d5d-c1df5540b425","timestamp":"2026-04-22T20:27:14.394Z","permissionMode":"default","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"0fe55191-25a9-4fa5-9d5d-c1df5540b425","isSidechain":false,"message":{"model":"claude-opus-4-7","id":"msg_01KNLE6sfosipXVdtm547HKC","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"","signature":"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"}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":6,"cache_creation_input_tokens":3455,"cache_read_input_tokens":24550,"output_tokens":39090,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":3455},"inference_geo":"","iterations":[{"input_tokens":6,"output_tokens":39090,"cache_read_input_tokens":24550,"cache_creation_input_tokens":3455,"cache_creation":{"ephemeral_5m_input_tokens":3455,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKSRhykpxqoxxQSEwt5p","type":"assistant","uuid":"364ffecb-0074-41f8-a057-c3f18775398d","timestamp":"2026-04-22T20:33:55.411Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"364ffecb-0074-41f8-a057-c3f18775398d","isSidechain":false,"message":{"model":"claude-opus-4-7","id":"msg_01KNLE6sfosipXVdtm547HKC","type":"message","role":"assistant","content":[{"type":"text","text":"Locked in. Scaffolding the Go module now — single-provider AI, ITSM ticket blocks Teleport until SRE transitions it, TOML config, slang tiers as proposed."}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":6,"cache_creation_input_tokens":3455,"cache_read_input_tokens":24550,"output_tokens":39090,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":3455},"inference_geo":"","iterations":[{"input_tokens":6,"output_tokens":39090,"cache_read_input_tokens":24550,"cache_creation_input_tokens":3455,"cache_creation":{"ephemeral_5m_input_tokens":3455,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKSRhykpxqoxxQSEwt5p","type":"assistant","uuid":"8835711d-2a0f-4481-a537-f14367c8f353","timestamp":"2026-04-22T20:33:56.855Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"8835711d-2a0f-4481-a537-f14367c8f353","isSidechain":false,"message":{"model":"claude-opus-4-7","id":"msg_01KNLE6sfosipXVdtm547HKC","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01LmALbWDs51VvGVq8SE67Tt","name":"Bash","input":{"command":"mkdir -p /Users/steve.briggs/projects/televibe/cmd/televibe /Users/steve.briggs/projects/televibe/ai /Users/steve.briggs/projects/televibe/risk /Users/steve.briggs/projects/televibe/jira && ls /Users/steve.briggs/projects/televibe","description":"Create project directory structure"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":6,"cache_creation_input_tokens":3455,"cache_read_input_tokens":24550,"output_tokens":39090,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":3455},"inference_geo":"","iterations":[{"input_tokens":6,"output_tokens":39090,"cache_read_input_tokens":24550,"cache_creation_input_tokens":3455,"cache_creation":{"ephemeral_5m_input_tokens":3455,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKSRhykpxqoxxQSEwt5p","type":"assistant","uuid":"46dc7cc5-4a16-4af5-9ab2-46e7b8c3bbb0","timestamp":"2026-04-22T20:33:57.884Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"type":"last-prompt","lastPrompt":"1. one-at-a-time, 2. yes, when a ticket is created the teleport request stays pending until it is approved by an SRE member, 3. yup this is good, 4 toml is fine","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87"}
|
||
{"type":"permission-mode","permissionMode":"default","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87"}
|
||
{"parentUuid":"46dc7cc5-4a16-4af5-9ab2-46e7b8c3bbb0","isSidechain":false,"promptId":"1a74d92d-87ee-4b9a-b7b6-9d69d238ae5a","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01LmALbWDs51VvGVq8SE67Tt","type":"tool_result","content":"\u001b[38;5;6m\u001b[1md\u001b[0m\u001b[38;5;10mr\u001b[39m\u001b[38;5;11mw\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;14m\u001b[39m \u001b[38;5;13msteve.briggs\u001b[39m \u001b[38;5;14mstaff\u001b[39m \u001b[38;5;10m1.5\u001b[39m \u001b[38;5;10mKB\u001b[39m \u001b[38;5;13mWed Apr 22 16:20:18 2026\u001b[39m \u001b[38;5;6m\u001b[1m..\u001b[0m\n\u001b[38;5;6m\u001b[1md\u001b[0m\u001b[38;5;10mr\u001b[39m\u001b[38;5;11mw\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;14m\u001b[39m \u001b[38;5;13msteve.briggs\u001b[39m \u001b[38;5;14mstaff\u001b[39m \u001b[38;5;10m96\u001b[39m \u001b[38;5;10mB\u001b[39m \u001b[38;5;13mWed Apr 22 16:34:01 2026\u001b[39m \u001b[38;5;6m\u001b[1mcmd\u001b[0m\n\u001b[38;5;6m\u001b[1md\u001b[0m\u001b[38;5;10mr\u001b[39m\u001b[38;5;11mw\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;14m\u001b[39m \u001b[38;5;13msteve.briggs\u001b[39m \u001b[38;5;14mstaff\u001b[39m \u001b[38;5;10m64\u001b[39m \u001b[38;5;10mB\u001b[39m \u001b[38;5;13mWed Apr 22 16:34:01 2026\u001b[39m \u001b[38;5;6m\u001b[1mai\u001b[0m\n\u001b[38;5;6m\u001b[1md\u001b[0m\u001b[38;5;10mr\u001b[39m\u001b[38;5;11mw\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;14m\u001b[39m \u001b[38;5;13msteve.briggs\u001b[39m \u001b[38;5;14mstaff\u001b[39m \u001b[38;5;10m64\u001b[39m \u001b[38;5;10mB\u001b[39m \u001b[38;5;13mWed Apr 22 16:34:01 2026\u001b[39m \u001b[38;5;6m\u001b[1mrisk\u001b[0m\n\u001b[38;5;6m\u001b[1md\u001b[0m\u001b[38;5;10mr\u001b[39m\u001b[38;5;11mw\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;14m\u001b[39m \u001b[38;5;13msteve.briggs\u001b[39m \u001b[38;5;14mstaff\u001b[39m \u001b[38;5;10m64\u001b[39m \u001b[38;5;10mB\u001b[39m \u001b[38;5;13mWed Apr 22 16:34:01 2026\u001b[39m \u001b[38;5;6m\u001b[1mjira\u001b[0m\n\u001b[38;5;6m\u001b[1md\u001b[0m\u001b[38;5;10mr\u001b[39m\u001b[38;5;11mw\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;14m\u001b[39m \u001b[38;5;13msteve.briggs\u001b[39m \u001b[38;5;14mstaff\u001b[39m \u001b[38;5;10m192\u001b[39m \u001b[38;5;10mB\u001b[39m \u001b[38;5;13mWed Apr 22 16:34:01 2026\u001b[39m \u001b[38;5;6m\u001b[1m.\u001b[0m","is_error":false}]},"uuid":"193ab9d3-e988-46e9-97e8-87c5f3f94d11","timestamp":"2026-04-22T20:34:01.340Z","toolUseResult":{"stdout":"\u001b[38;5;6m\u001b[1md\u001b[0m\u001b[38;5;10mr\u001b[39m\u001b[38;5;11mw\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;14m\u001b[39m \u001b[38;5;13msteve.briggs\u001b[39m \u001b[38;5;14mstaff\u001b[39m \u001b[38;5;10m1.5\u001b[39m \u001b[38;5;10mKB\u001b[39m \u001b[38;5;13mWed Apr 22 16:20:18 2026\u001b[39m \u001b[38;5;6m\u001b[1m..\u001b[0m\n\u001b[38;5;6m\u001b[1md\u001b[0m\u001b[38;5;10mr\u001b[39m\u001b[38;5;11mw\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;14m\u001b[39m \u001b[38;5;13msteve.briggs\u001b[39m \u001b[38;5;14mstaff\u001b[39m \u001b[38;5;10m96\u001b[39m \u001b[38;5;10mB\u001b[39m \u001b[38;5;13mWed Apr 22 16:34:01 2026\u001b[39m \u001b[38;5;6m\u001b[1mcmd\u001b[0m\n\u001b[38;5;6m\u001b[1md\u001b[0m\u001b[38;5;10mr\u001b[39m\u001b[38;5;11mw\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;14m\u001b[39m \u001b[38;5;13msteve.briggs\u001b[39m \u001b[38;5;14mstaff\u001b[39m \u001b[38;5;10m64\u001b[39m \u001b[38;5;10mB\u001b[39m \u001b[38;5;13mWed Apr 22 16:34:01 2026\u001b[39m \u001b[38;5;6m\u001b[1mai\u001b[0m\n\u001b[38;5;6m\u001b[1md\u001b[0m\u001b[38;5;10mr\u001b[39m\u001b[38;5;11mw\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;14m\u001b[39m \u001b[38;5;13msteve.briggs\u001b[39m \u001b[38;5;14mstaff\u001b[39m \u001b[38;5;10m64\u001b[39m \u001b[38;5;10mB\u001b[39m \u001b[38;5;13mWed Apr 22 16:34:01 2026\u001b[39m \u001b[38;5;6m\u001b[1mrisk\u001b[0m\n\u001b[38;5;6m\u001b[1md\u001b[0m\u001b[38;5;10mr\u001b[39m\u001b[38;5;11mw\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;14m\u001b[39m \u001b[38;5;13msteve.briggs\u001b[39m \u001b[38;5;14mstaff\u001b[39m \u001b[38;5;10m64\u001b[39m \u001b[38;5;10mB\u001b[39m \u001b[38;5;13mWed Apr 22 16:34:01 2026\u001b[39m \u001b[38;5;6m\u001b[1mjira\u001b[0m\n\u001b[38;5;6m\u001b[1md\u001b[0m\u001b[38;5;10mr\u001b[39m\u001b[38;5;11mw\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;14m\u001b[39m \u001b[38;5;13msteve.briggs\u001b[39m \u001b[38;5;14mstaff\u001b[39m \u001b[38;5;10m192\u001b[39m \u001b[38;5;10mB\u001b[39m \u001b[38;5;13mWed Apr 22 16:34:01 2026\u001b[39m \u001b[38;5;6m\u001b[1m.\u001b[0m","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false},"sourceToolAssistantUUID":"46dc7cc5-4a16-4af5-9ab2-46e7b8c3bbb0","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"type":"file-history-snapshot","messageId":"54c80e5b-f6bc-4b36-b09a-a0e4786d1f5b","snapshot":{"messageId":"0fe55191-25a9-4fa5-9d5d-c1df5540b425","trackedFileBackups":{"go.mod":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:08.139Z"}},"timestamp":"2026-04-22T20:27:14.395Z"},"isSnapshotUpdate":true}
|
||
{"type":"file-history-snapshot","messageId":"33f6e6ee-e3c4-4e4c-816a-534aa980c278","snapshot":{"messageId":"0fe55191-25a9-4fa5-9d5d-c1df5540b425","trackedFileBackups":{"go.mod":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:08.139Z"},"cmd/televibe/main.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:24.995Z"}},"timestamp":"2026-04-22T20:27:14.395Z"},"isSnapshotUpdate":true}
|
||
{"type":"file-history-snapshot","messageId":"8024d7ab-8289-4eb7-9380-89963cc1f06a","snapshot":{"messageId":"0fe55191-25a9-4fa5-9d5d-c1df5540b425","trackedFileBackups":{"go.mod":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:08.139Z"},"cmd/televibe/main.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:24.995Z"},"config.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:27.227Z"}},"timestamp":"2026-04-22T20:27:14.395Z"},"isSnapshotUpdate":true}
|
||
{"type":"file-history-snapshot","messageId":"6cbb4cbf-7fed-4327-b619-41198f83f71f","snapshot":{"messageId":"0fe55191-25a9-4fa5-9d5d-c1df5540b425","trackedFileBackups":{"go.mod":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:08.139Z"},"cmd/televibe/main.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:24.995Z"},"config.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:27.227Z"},"app.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:26.810Z"}},"timestamp":"2026-04-22T20:27:14.395Z"},"isSnapshotUpdate":true}
|
||
{"type":"file-history-snapshot","messageId":"b86219e7-f0c5-48e8-ac8e-cf02be99e485","snapshot":{"messageId":"0fe55191-25a9-4fa5-9d5d-c1df5540b425","trackedFileBackups":{"go.mod":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:08.139Z"},"cmd/televibe/main.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:24.995Z"},"config.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:27.227Z"},"app.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:26.810Z"},"ai/provider.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:28.583Z"}},"timestamp":"2026-04-22T20:27:14.395Z"},"isSnapshotUpdate":true}
|
||
{"type":"file-history-snapshot","messageId":"c7517ffe-9613-4527-9f38-26a401d76d4a","snapshot":{"messageId":"0fe55191-25a9-4fa5-9d5d-c1df5540b425","trackedFileBackups":{"go.mod":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:08.139Z"},"cmd/televibe/main.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:24.995Z"},"config.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:27.227Z"},"app.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:26.810Z"},"ai/provider.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:28.583Z"},"ai/anthropic.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:29.926Z"}},"timestamp":"2026-04-22T20:27:14.395Z"},"isSnapshotUpdate":true}
|
||
{"type":"file-history-snapshot","messageId":"4df19962-3dfc-4eb0-90f6-6c582f106827","snapshot":{"messageId":"0fe55191-25a9-4fa5-9d5d-c1df5540b425","trackedFileBackups":{"go.mod":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:08.139Z"},"cmd/televibe/main.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:24.995Z"},"config.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:27.227Z"},"app.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:26.810Z"},"ai/provider.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:28.583Z"},"ai/anthropic.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:29.926Z"},"ai/bedrock.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:31.780Z"}},"timestamp":"2026-04-22T20:27:14.395Z"},"isSnapshotUpdate":true}
|
||
{"type":"file-history-snapshot","messageId":"a9ca7972-1628-4282-9c3d-9198457a6145","snapshot":{"messageId":"0fe55191-25a9-4fa5-9d5d-c1df5540b425","trackedFileBackups":{"go.mod":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:08.139Z"},"cmd/televibe/main.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:24.995Z"},"config.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:27.227Z"},"app.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:26.810Z"},"ai/provider.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:28.583Z"},"ai/anthropic.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:29.926Z"},"ai/bedrock.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:31.780Z"},"ai/webhook.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:32.779Z"}},"timestamp":"2026-04-22T20:27:14.395Z"},"isSnapshotUpdate":true}
|
||
{"type":"file-history-snapshot","messageId":"228acd0e-6320-48a6-aa1b-9ba33154fae2","snapshot":{"messageId":"0fe55191-25a9-4fa5-9d5d-c1df5540b425","trackedFileBackups":{"go.mod":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:08.139Z"},"cmd/televibe/main.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:24.995Z"},"config.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:27.227Z"},"app.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:26.810Z"},"ai/provider.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:28.583Z"},"ai/anthropic.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:29.926Z"},"ai/bedrock.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:31.780Z"},"ai/webhook.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:32.779Z"},"risk/risk.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:33.829Z"}},"timestamp":"2026-04-22T20:27:14.395Z"},"isSnapshotUpdate":true}
|
||
{"type":"file-history-snapshot","messageId":"6a7a8032-1289-4be1-82b2-e97e6f7b593b","snapshot":{"messageId":"0fe55191-25a9-4fa5-9d5d-c1df5540b425","trackedFileBackups":{"go.mod":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:08.139Z"},"cmd/televibe/main.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:24.995Z"},"config.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:27.227Z"},"app.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:26.810Z"},"ai/provider.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:28.583Z"},"ai/anthropic.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:29.926Z"},"ai/bedrock.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:31.780Z"},"ai/webhook.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:32.779Z"},"risk/risk.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:33.829Z"},"risk/score.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:35.440Z"}},"timestamp":"2026-04-22T20:27:14.395Z"},"isSnapshotUpdate":true}
|
||
{"type":"file-history-snapshot","messageId":"90d69536-c1af-4208-8008-b7c7717b1f7a","snapshot":{"messageId":"0fe55191-25a9-4fa5-9d5d-c1df5540b425","trackedFileBackups":{"go.mod":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:08.139Z"},"cmd/televibe/main.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:24.995Z"},"config.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:27.227Z"},"app.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:26.810Z"},"ai/provider.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:28.583Z"},"ai/anthropic.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:29.926Z"},"ai/bedrock.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:31.780Z"},"ai/webhook.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:32.779Z"},"risk/risk.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:33.829Z"},"risk/score.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:35.440Z"},"jira/itsm.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:36:06.428Z"}},"timestamp":"2026-04-22T20:27:14.395Z"},"isSnapshotUpdate":true}
|
||
{"parentUuid":"193ab9d3-e988-46e9-97e8-87c5f3f94d11","isSidechain":false,"message":{"model":"claude-opus-4-7","id":"msg_01E3xMLZ7jSzYhBQuaPNUjsM","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"","signature":"EqkCClkIDBgCKkCVV8e/H6z0o54gKPanKeUEQY+EP4SInW6bKJo9T2HmLKuKRtlmIxGX05bTAZyQKLZ4nRLk2jFWa7nHyYlu6MhUMg9jbGF1ZGUtb3B1cy00LTc4ABIM8oVFwOnMduv9R4mdGgwB0grf/9WDKk8iwO8iMJzLvRm9F7+J5v0OlYod4Cgq9+PpWqAacSlyT49P8seA3bzbWwMc9BkbVWimk12eYyp+tvnLd8ef5nmW+TQDeEjqYGO/5AHoNItXGHZwJM4IctxxQw0HF9ikFkaTYpYtR46tkP/jQWRUvEke9lMpLHjJaWMHHglR/o/ikC0XBKq2WwzE/M2y5bPvNf7mzmji8hbPVZ0BfCNxvylDnq/xCK2fO+bLQu1H/hYFvf0AU69EGAE="}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":53684,"cache_read_input_tokens":14726,"output_tokens":14071,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":53684},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":14071,"cache_read_input_tokens":14726,"cache_creation_input_tokens":53684,"cache_creation":{"ephemeral_5m_input_tokens":53684,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKSwi8moBxLFxH1irrg2","type":"assistant","uuid":"015a5edb-0fd9-403f-a732-707e55d8c629","timestamp":"2026-04-22T20:34:04.588Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"015a5edb-0fd9-403f-a732-707e55d8c629","isSidechain":false,"message":{"model":"claude-opus-4-7","id":"msg_01E3xMLZ7jSzYhBQuaPNUjsM","type":"message","role":"assistant","content":[{"type":"text","text":"Now writing all 12 files in parallel."}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":53684,"cache_read_input_tokens":14726,"output_tokens":14071,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":53684},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":14071,"cache_read_input_tokens":14726,"cache_creation_input_tokens":53684,"cache_creation":{"ephemeral_5m_input_tokens":53684,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKSwi8moBxLFxH1irrg2","type":"assistant","uuid":"2a57fcd5-ceb5-4c57-a5e3-756dcca34507","timestamp":"2026-04-22T20:34:04.793Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"2a57fcd5-ceb5-4c57-a5e3-756dcca34507","isSidechain":false,"message":{"model":"claude-opus-4-7","id":"msg_01E3xMLZ7jSzYhBQuaPNUjsM","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01DEjVVm9hdGp1QR5BYyaXtj","name":"Write","input":{"file_path":"/Users/steve.briggs/projects/televibe/go.mod","content":"module televibe\n\ngo 1.22\n"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":53684,"cache_read_input_tokens":14726,"output_tokens":14071,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":53684},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":14071,"cache_read_input_tokens":14726,"cache_creation_input_tokens":53684,"cache_creation":{"ephemeral_5m_input_tokens":53684,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKSwi8moBxLFxH1irrg2","type":"assistant","uuid":"54c80e5b-f6bc-4b36-b09a-a0e4786d1f5b","timestamp":"2026-04-22T20:34:05.293Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"54c80e5b-f6bc-4b36-b09a-a0e4786d1f5b","isSidechain":false,"promptId":"1a74d92d-87ee-4b9a-b7b6-9d69d238ae5a","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01DEjVVm9hdGp1QR5BYyaXtj","type":"tool_result","content":"File created successfully at: /Users/steve.briggs/projects/televibe/go.mod"}]},"uuid":"62da0bea-7182-4a48-b28e-332acd24c5d1","timestamp":"2026-04-22T20:34:08.140Z","toolUseResult":{"type":"create","filePath":"/Users/steve.briggs/projects/televibe/go.mod","content":"module televibe\n\ngo 1.22\n","structuredPatch":[],"originalFile":null,"userModified":false},"sourceToolAssistantUUID":"54c80e5b-f6bc-4b36-b09a-a0e4786d1f5b","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"62da0bea-7182-4a48-b28e-332acd24c5d1","isSidechain":false,"message":{"model":"claude-opus-4-7","id":"msg_01E3xMLZ7jSzYhBQuaPNUjsM","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01LHGc4pCWU9gMjzYBqCgUSZ","name":"Write","input":{"file_path":"/Users/steve.briggs/projects/televibe/cmd/televibe/main.go","content":"package main\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"flag\"\n\t\"log/slog\"\n\t\"os\"\n\t\"os/signal\"\n\t\"syscall\"\n\n\t\"televibe\"\n)\n\nfunc main() {\n\tconfigPath := flag.String(\"config\", \"/etc/televibe/televibe.toml\", \"Path to TOML configuration\")\n\tflag.Parse()\n\n\tcfg, err := televibe.LoadConfig(*configPath)\n\tif err != nil {\n\t\tslog.Error(\"config load failed\", \"path\", *configPath, \"err\", err)\n\t\tos.Exit(1)\n\t}\n\n\tsetupLogging(cfg.Log.Level)\n\n\tctx, cancel := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM)\n\tdefer cancel()\n\n\tapp, err := televibe.NewApp(ctx, cfg)\n\tif err != nil {\n\t\tslog.Error(\"app init failed\", \"err\", err)\n\t\tos.Exit(1)\n\t}\n\n\tif err := app.Run(ctx); err != nil && !errors.Is(err, context.Canceled) {\n\t\tslog.Error(\"app exited with error\", \"err\", err)\n\t\tos.Exit(1)\n\t}\n}\n\nfunc setupLogging(level string) {\n\tvar l slog.Level\n\tswitch level {\n\tcase \"debug\":\n\t\tl = slog.LevelDebug\n\tcase \"warn\":\n\t\tl = slog.LevelWarn\n\tcase \"error\":\n\t\tl = slog.LevelError\n\tdefault:\n\t\tl = slog.LevelInfo\n\t}\n\th := slog.NewJSONHandler(os.Stderr, &slog.HandlerOptions{Level: l})\n\tslog.SetDefault(slog.New(h))\n}\n"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":53684,"cache_read_input_tokens":14726,"output_tokens":14071,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":53684},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":14071,"cache_read_input_tokens":14726,"cache_creation_input_tokens":53684,"cache_creation":{"ephemeral_5m_input_tokens":53684,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKSwi8moBxLFxH1irrg2","type":"assistant","uuid":"33f6e6ee-e3c4-4e4c-816a-534aa980c278","timestamp":"2026-04-22T20:34:09.877Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"33f6e6ee-e3c4-4e4c-816a-534aa980c278","isSidechain":false,"message":{"model":"claude-opus-4-7","id":"msg_01E3xMLZ7jSzYhBQuaPNUjsM","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01QZrTDQb97vUhw22sWVyQ5m","name":"Write","input":{"file_path":"/Users/steve.briggs/projects/televibe/config.go","content":"package televibe\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/pelletier/go-toml/v2\"\n\n\t\"televibe/ai\"\n\t\"televibe/jira\"\n\t\"televibe/risk\"\n)\n\ntype Config struct {\n\tTeleport TeleportConfig `toml:\"teleport\"`\n\tAI ai.Config `toml:\"ai\"`\n\tJira jira.Config `toml:\"jira\"`\n\tRisk risk.Config `toml:\"risk\"`\n\tLog LogConfig `toml:\"log\"`\n}\n\ntype TeleportConfig struct {\n\tAddr string `toml:\"addr\"`\n\tIdentityFile string `toml:\"identity_file\"`\n}\n\ntype LogConfig struct {\n\tLevel string `toml:\"level\"`\n}\n\nfunc LoadConfig(path string) (*Config, error) {\n\tdata, err := os.ReadFile(path)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"read config: %w\", err)\n\t}\n\tcfg := &Config{}\n\tif err := toml.Unmarshal(data, cfg); err != nil {\n\t\treturn nil, fmt.Errorf(\"parse config: %w\", err)\n\t}\n\tcfg.applyDefaults()\n\tif err := cfg.validate(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn cfg, nil\n}\n\nfunc (c *Config) applyDefaults() {\n\tc.Jira.ApplyDefaults()\n\tc.Risk.ApplyDefaults()\n\tif c.Log.Level == \"\" {\n\t\tc.Log.Level = \"info\"\n\t}\n}\n\nfunc (c *Config) validate() error {\n\tif c.Teleport.Addr == \"\" {\n\t\treturn fmt.Errorf(\"teleport.addr is required\")\n\t}\n\tif c.Teleport.IdentityFile == \"\" {\n\t\treturn fmt.Errorf(\"teleport.identity_file is required\")\n\t}\n\tif err := c.AI.Validate(); err != nil {\n\t\treturn fmt.Errorf(\"ai: %w\", err)\n\t}\n\tif err := c.Jira.Validate(); err != nil {\n\t\treturn fmt.Errorf(\"jira: %w\", err)\n\t}\n\treturn nil\n}\n"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":53684,"cache_read_input_tokens":14726,"output_tokens":14071,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":53684},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":14071,"cache_read_input_tokens":14726,"cache_creation_input_tokens":53684,"cache_creation":{"ephemeral_5m_input_tokens":53684,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKSwi8moBxLFxH1irrg2","type":"assistant","uuid":"8024d7ab-8289-4eb7-9380-89963cc1f06a","timestamp":"2026-04-22T20:34:16.067Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"33f6e6ee-e3c4-4e4c-816a-534aa980c278","isSidechain":false,"promptId":"1a74d92d-87ee-4b9a-b7b6-9d69d238ae5a","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01LHGc4pCWU9gMjzYBqCgUSZ","type":"tool_result","content":"File created successfully at: /Users/steve.briggs/projects/televibe/cmd/televibe/main.go"}]},"uuid":"7b96d09f-1e49-40bc-b935-5ece507aead5","timestamp":"2026-04-22T20:34:24.997Z","toolUseResult":{"type":"create","filePath":"/Users/steve.briggs/projects/televibe/cmd/televibe/main.go","content":"package main\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"flag\"\n\t\"log/slog\"\n\t\"os\"\n\t\"os/signal\"\n\t\"syscall\"\n\n\t\"televibe\"\n)\n\nfunc main() {\n\tconfigPath := flag.String(\"config\", \"/etc/televibe/televibe.toml\", \"Path to TOML configuration\")\n\tflag.Parse()\n\n\tcfg, err := televibe.LoadConfig(*configPath)\n\tif err != nil {\n\t\tslog.Error(\"config load failed\", \"path\", *configPath, \"err\", err)\n\t\tos.Exit(1)\n\t}\n\n\tsetupLogging(cfg.Log.Level)\n\n\tctx, cancel := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM)\n\tdefer cancel()\n\n\tapp, err := televibe.NewApp(ctx, cfg)\n\tif err != nil {\n\t\tslog.Error(\"app init failed\", \"err\", err)\n\t\tos.Exit(1)\n\t}\n\n\tif err := app.Run(ctx); err != nil && !errors.Is(err, context.Canceled) {\n\t\tslog.Error(\"app exited with error\", \"err\", err)\n\t\tos.Exit(1)\n\t}\n}\n\nfunc setupLogging(level string) {\n\tvar l slog.Level\n\tswitch level {\n\tcase \"debug\":\n\t\tl = slog.LevelDebug\n\tcase \"warn\":\n\t\tl = slog.LevelWarn\n\tcase \"error\":\n\t\tl = slog.LevelError\n\tdefault:\n\t\tl = slog.LevelInfo\n\t}\n\th := slog.NewJSONHandler(os.Stderr, &slog.HandlerOptions{Level: l})\n\tslog.SetDefault(slog.New(h))\n}\n","structuredPatch":[],"originalFile":null,"userModified":false},"sourceToolAssistantUUID":"33f6e6ee-e3c4-4e4c-816a-534aa980c278","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"8024d7ab-8289-4eb7-9380-89963cc1f06a","isSidechain":false,"promptId":"1a74d92d-87ee-4b9a-b7b6-9d69d238ae5a","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01QZrTDQb97vUhw22sWVyQ5m","type":"tool_result","content":"File created successfully at: /Users/steve.briggs/projects/televibe/config.go"}]},"uuid":"3456ee28-bde8-45d6-ac4e-a0add0cee6aa","timestamp":"2026-04-22T20:34:27.229Z","toolUseResult":{"type":"create","filePath":"/Users/steve.briggs/projects/televibe/config.go","content":"package televibe\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/pelletier/go-toml/v2\"\n\n\t\"televibe/ai\"\n\t\"televibe/jira\"\n\t\"televibe/risk\"\n)\n\ntype Config struct {\n\tTeleport TeleportConfig `toml:\"teleport\"`\n\tAI ai.Config `toml:\"ai\"`\n\tJira jira.Config `toml:\"jira\"`\n\tRisk risk.Config `toml:\"risk\"`\n\tLog LogConfig `toml:\"log\"`\n}\n\ntype TeleportConfig struct {\n\tAddr string `toml:\"addr\"`\n\tIdentityFile string `toml:\"identity_file\"`\n}\n\ntype LogConfig struct {\n\tLevel string `toml:\"level\"`\n}\n\nfunc LoadConfig(path string) (*Config, error) {\n\tdata, err := os.ReadFile(path)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"read config: %w\", err)\n\t}\n\tcfg := &Config{}\n\tif err := toml.Unmarshal(data, cfg); err != nil {\n\t\treturn nil, fmt.Errorf(\"parse config: %w\", err)\n\t}\n\tcfg.applyDefaults()\n\tif err := cfg.validate(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn cfg, nil\n}\n\nfunc (c *Config) applyDefaults() {\n\tc.Jira.ApplyDefaults()\n\tc.Risk.ApplyDefaults()\n\tif c.Log.Level == \"\" {\n\t\tc.Log.Level = \"info\"\n\t}\n}\n\nfunc (c *Config) validate() error {\n\tif c.Teleport.Addr == \"\" {\n\t\treturn fmt.Errorf(\"teleport.addr is required\")\n\t}\n\tif c.Teleport.IdentityFile == \"\" {\n\t\treturn fmt.Errorf(\"teleport.identity_file is required\")\n\t}\n\tif err := c.AI.Validate(); err != nil {\n\t\treturn fmt.Errorf(\"ai: %w\", err)\n\t}\n\tif err := c.Jira.Validate(); err != nil {\n\t\treturn fmt.Errorf(\"jira: %w\", err)\n\t}\n\treturn nil\n}\n","structuredPatch":[],"originalFile":null,"userModified":false},"sourceToolAssistantUUID":"8024d7ab-8289-4eb7-9380-89963cc1f06a","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"3456ee28-bde8-45d6-ac4e-a0add0cee6aa","isSidechain":false,"message":{"model":"claude-opus-4-7","id":"msg_01E3xMLZ7jSzYhBQuaPNUjsM","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01M2vcwNJ4soz4JbovVWWB9c","name":"Write","input":{"file_path":"/Users/steve.briggs/projects/televibe/app.go","content":"package televibe\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"log/slog\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/gravitational/teleport/api/client\"\n\t\"github.com/gravitational/teleport/api/types\"\n\t\"golang.org/x/sync/errgroup\"\n\n\t\"televibe/ai\"\n\t\"televibe/jira\"\n\t\"televibe/risk\"\n)\n\ntype App struct {\n\tcfg *Config\n\ttele *client.Client\n\tai ai.Provider\n\tjira *jira.Client\n\tscorer *risk.Scorer\n\n\tpending map[string]string\n\tpendingMu sync.Mutex\n}\n\nfunc NewApp(ctx context.Context, cfg *Config) (*App, error) {\n\ttele, err := client.New(ctx, client.Config{\n\t\tAddrs: []string{cfg.Teleport.Addr},\n\t\tCredentials: []client.Credentials{\n\t\t\tclient.LoadIdentityFile(cfg.Teleport.IdentityFile),\n\t\t},\n\t})\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"teleport client: %w\", err)\n\t}\n\n\tprov, err := ai.New(cfg.AI)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"ai provider: %w\", err)\n\t}\n\n\tjc, err := jira.New(cfg.Jira)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"jira client: %w\", err)\n\t}\n\n\tscorer, err := risk.NewScorer(cfg.Risk)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"scorer: %w\", err)\n\t}\n\n\treturn &App{\n\t\tcfg: cfg,\n\t\ttele: tele,\n\t\tai: prov,\n\t\tjira: jc,\n\t\tscorer: scorer,\n\t\tpending: map[string]string{},\n\t}, nil\n}\n\nfunc (a *App) Run(ctx context.Context) error {\n\tslog.Info(\"televibe starting\",\n\t\t\"provider\", a.cfg.AI.Provider,\n\t\t\"threshold\", a.cfg.Risk.TicketThreshold,\n\t\t\"itsm_project\", a.cfg.Jira.Project)\n\n\tif err := a.rehydrate(ctx); err != nil {\n\t\treturn fmt.Errorf(\"rehydrate open ITSM tickets: %w\", err)\n\t}\n\n\tg, gctx := errgroup.WithContext(ctx)\n\tg.Go(func() error { return a.watchRequests(gctx) })\n\tg.Go(func() error { return a.pollITSM(gctx) })\n\treturn g.Wait()\n}\n\nfunc (a *App) rehydrate(ctx context.Context) error {\n\topen, err := a.jira.ListOpenTeleportTickets(ctx)\n\tif err != nil {\n\t\treturn err\n\t}\n\ta.pendingMu.Lock()\n\tfor reqID, ticket := range open {\n\t\ta.pending[reqID] = ticket\n\t}\n\ta.pendingMu.Unlock()\n\tslog.Info(\"rehydrated pending tickets\", \"count\", len(open))\n\treturn nil\n}\n\nfunc (a *App) watchRequests(ctx context.Context) error {\n\twatcher, err := a.tele.NewWatcher(ctx, types.Watch{\n\t\tKinds: []types.WatchKind{{Kind: types.KindAccessRequest}},\n\t})\n\tif err != nil {\n\t\treturn fmt.Errorf(\"start watcher: %w\", err)\n\t}\n\tdefer watcher.Close()\n\n\tfor {\n\t\tselect {\n\t\tcase <-ctx.Done():\n\t\t\treturn ctx.Err()\n\t\tcase <-watcher.Done():\n\t\t\treturn watcher.Error()\n\t\tcase ev := <-watcher.Events():\n\t\t\tif ev.Type != types.OpPut {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treq, ok := ev.Resource.(types.AccessRequest)\n\t\t\tif !ok {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif req.GetState() != types.RequestState_PENDING {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\ta.pendingMu.Lock()\n\t\t\t_, held := a.pending[req.GetName()]\n\t\t\ta.pendingMu.Unlock()\n\t\t\tif held {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tgo a.handleRequest(ctx, req)\n\t\t}\n\t}\n}\n\nfunc (a *App) handleRequest(ctx context.Context, req types.AccessRequest) {\n\tid := req.GetName()\n\tlog := slog.With(\"request_id\", id, \"user\", req.GetUser())\n\n\tlog.Info(\"scoring access request\")\n\tresult, err := a.scorer.Score(ctx, a.ai, req)\n\tif err != nil {\n\t\tlog.Error(\"scoring failed\", \"err\", err)\n\t\treturn\n\t}\n\tlog.Info(\"risk scored\",\n\t\t\"score\", result.Score,\n\t\t\"tier\", result.Tier.Name,\n\t\t\"slang\", result.Tier.Slang,\n\t\t\"components\", result.Components)\n\n\tif result.Score < a.cfg.Risk.TicketThreshold {\n\t\treason := fmt.Sprintf(\"televibe: %s (score %d, %q) — auto-approved\",\n\t\t\tresult.Tier.Name, result.Score, result.Tier.Slang)\n\t\tif err := a.submitReview(ctx, id, types.RequestState_APPROVED, reason); err != nil {\n\t\t\tlog.Error(\"auto-approve failed\", \"err\", err)\n\t\t}\n\t\treturn\n\t}\n\n\tticket, err := a.jira.CreateITSMTicket(ctx, jira.TicketInput{\n\t\tRequestID: id,\n\t\tUser: req.GetUser(),\n\t\tRoles: req.GetRoles(),\n\t\tReason: req.GetRequestReason(),\n\t\tScore: result.Score,\n\t\tTier: result.Tier.Name,\n\t\tSlang: result.Tier.Slang,\n\t\tComponents: result.Components,\n\t\tAIReasoning: result.Reasoning,\n\t})\n\tif err != nil {\n\t\tlog.Error(\"create ITSM ticket failed\", \"err\", err)\n\t\treturn\n\t}\n\n\ta.pendingMu.Lock()\n\ta.pending[id] = ticket\n\ta.pendingMu.Unlock()\n\tlog.Info(\"ITSM ticket created, request held for SRE review\",\n\t\t\"ticket\", ticket, \"tier\", result.Tier.Name, \"slang\", result.Tier.Slang)\n}\n\nfunc (a *App) pollITSM(ctx context.Context) error {\n\tt := time.NewTicker(a.cfg.Jira.PollInterval)\n\tdefer t.Stop()\n\tfor {\n\t\tselect {\n\t\tcase <-ctx.Done():\n\t\t\treturn ctx.Err()\n\t\tcase <-t.C:\n\t\t\ta.reconcileITSM(ctx)\n\t\t}\n\t}\n}\n\nfunc (a *App) reconcileITSM(ctx context.Context) {\n\ta.pendingMu.Lock()\n\tsnap := make(map[string]string, len(a.pending))\n\tfor k, v := range a.pending {\n\t\tsnap[k] = v\n\t}\n\ta.pendingMu.Unlock()\n\n\tfor requestID, ticket := range snap {\n\t\tstatus, err := a.jira.TicketStatus(ctx, ticket)\n\t\tif err != nil {\n\t\t\tslog.Warn(\"ITSM status check failed\", \"ticket\", ticket, \"err\", err)\n\t\t\tcontinue\n\t\t}\n\t\tvar next types.RequestState\n\t\tswitch status {\n\t\tcase jira.StatusApproved:\n\t\t\tnext = types.RequestState_APPROVED\n\t\tcase jira.StatusRejected:\n\t\t\tnext = types.RequestState_DENIED\n\t\tdefault:\n\t\t\tcontinue\n\t\t}\n\t\treason := fmt.Sprintf(\"televibe: ITSM %s resolved (%s)\", ticket, status)\n\t\tif err := a.submitReview(ctx, requestID, next, reason); err != nil {\n\t\t\tslog.Error(\"submit review failed\", \"request_id\", requestID, \"err\", err)\n\t\t\tcontinue\n\t\t}\n\t\ta.pendingMu.Lock()\n\t\tdelete(a.pending, requestID)\n\t\ta.pendingMu.Unlock()\n\t}\n}\n\nfunc (a *App) submitReview(ctx context.Context, requestID string, state types.RequestState, reason string) error {\n\t_, err := a.tele.SubmitAccessReview(ctx, types.AccessReviewSubmission{\n\t\tRequestID: requestID,\n\t\tReview: types.AccessReview{\n\t\t\tAuthor: \"televibe\",\n\t\t\tProposedState: state,\n\t\t\tReason: reason,\n\t\t},\n\t})\n\treturn err\n}\n"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":53684,"cache_read_input_tokens":14726,"output_tokens":14071,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":53684},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":14071,"cache_read_input_tokens":14726,"cache_creation_input_tokens":53684,"cache_creation":{"ephemeral_5m_input_tokens":53684,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKSwi8moBxLFxH1irrg2","type":"assistant","uuid":"6cbb4cbf-7fed-4327-b619-41198f83f71f","timestamp":"2026-04-22T20:34:40.632Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"6cbb4cbf-7fed-4327-b619-41198f83f71f","isSidechain":false,"message":{"model":"claude-opus-4-7","id":"msg_01E3xMLZ7jSzYhBQuaPNUjsM","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01KnYCuLfFjAvcLoChoH6fXZ","name":"Write","input":{"file_path":"/Users/steve.briggs/projects/televibe/ai/provider.go","content":"package ai\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"regexp\"\n\t\"strings\"\n)\n\ntype Config struct {\n\tProvider string `toml:\"provider\"`\n\tAnthropic AnthropicConfig `toml:\"anthropic\"`\n\tBedrock BedrockConfig `toml:\"bedrock\"`\n\tWebhook WebhookConfig `toml:\"webhook\"`\n}\n\nfunc (c *Config) Validate() error {\n\tswitch c.Provider {\n\tcase \"anthropic\":\n\t\tif c.Anthropic.APIKey == \"\" {\n\t\t\treturn fmt.Errorf(\"anthropic.api_key is required\")\n\t\t}\n\tcase \"bedrock\":\n\t\tif c.Bedrock.Region == \"\" {\n\t\t\treturn fmt.Errorf(\"bedrock.region is required\")\n\t\t}\n\tcase \"webhook\":\n\t\tif c.Webhook.URL == \"\" {\n\t\t\treturn fmt.Errorf(\"webhook.url is required\")\n\t\t}\n\tdefault:\n\t\treturn fmt.Errorf(\"provider must be one of: anthropic, bedrock, webhook\")\n\t}\n\treturn nil\n}\n\ntype ScoreRequest struct {\n\tUser string `json:\"user\"`\n\tRoles []string `json:\"roles\"`\n\tResources []string `json:\"resources\"`\n\tReason string `json:\"reason\"`\n\tHasCUSTXReference bool `json:\"has_custx_reference\"`\n\tDescriptionLength int `json:\"description_length\"`\n}\n\ntype Assessment struct {\n\tDescriptionQuality int `json:\"description_quality\"`\n\tPrivilegeConcern int `json:\"privilege_concern\"`\n\tAnomalies int `json:\"anomalies\"`\n\tReasoning string `json:\"reasoning\"`\n}\n\ntype Provider interface {\n\tAssess(ctx context.Context, req ScoreRequest) (*Assessment, error)\n}\n\nfunc New(cfg Config) (Provider, error) {\n\tswitch cfg.Provider {\n\tcase \"anthropic\":\n\t\treturn NewAnthropic(cfg.Anthropic), nil\n\tcase \"bedrock\":\n\t\treturn NewBedrock(cfg.Bedrock)\n\tcase \"webhook\":\n\t\treturn NewWebhook(cfg.Webhook), nil\n\t}\n\treturn nil, fmt.Errorf(\"unknown provider: %s\", cfg.Provider)\n}\n\nconst SystemPrompt = `You are a security analyst reviewing a Teleport access request.\nAssess the risk of granting the requested access based on the details provided.\n\nReturn ONLY a JSON object with these exact fields (no prose, no markdown fence):\n{\n \"description_quality\": <int 0-25; 0 = thorough and specific, 25 = absent or vague>,\n \"privilege_concern\": <int 0-25; 0 = routine read access, 25 = broad production admin or destructive capability>,\n \"anomalies\": <int 0-10; flag mismatches between stated purpose and requested scope, or other unusual patterns>,\n \"reasoning\": \"<2-3 sentences explaining the scores>\"\n}\n\nScoring guidance:\n- description_quality: does the reason describe WHAT work will be performed and WHY, and does the scope match the work described?\n- privilege_concern: how large is the blast radius of the requested roles and resources? Production prod-*, root, admin, or destructive tooling score higher.\n- anomalies: scope/purpose mismatch, vague intent, requests outside the user's typical pattern, off-hours emergency without justification.`\n\nfunc UserPrompt(req ScoreRequest) string {\n\tvar sb strings.Builder\n\tsb.WriteString(\"Access request details:\\n\\n\")\n\tfmt.Fprintf(&sb, \"User: %s\\n\", req.User)\n\tfmt.Fprintf(&sb, \"Requested roles: %s\\n\", strings.Join(req.Roles, \", \"))\n\tif len(req.Resources) > 0 {\n\t\tfmt.Fprintf(&sb, \"Requested resources: %s\\n\", strings.Join(req.Resources, \", \"))\n\t}\n\tfmt.Fprintf(&sb, \"Contains CUSTX ticket reference: %v\\n\", req.HasCUSTXReference)\n\tfmt.Fprintf(&sb, \"Description length: %d characters\\n\\n\", req.DescriptionLength)\n\tsb.WriteString(\"Request reason (verbatim):\\n\")\n\tsb.WriteString(\"---\\n\")\n\tsb.WriteString(req.Reason)\n\tsb.WriteString(\"\\n---\\n\\nReturn the JSON assessment.\")\n\treturn sb.String()\n}\n\nvar jsonRE = regexp.MustCompile(`(?s)\\{.*\\}`)\n\nfunc parseAssessment(text string) (*Assessment, error) {\n\tm := jsonRE.FindString(text)\n\tif m == \"\" {\n\t\treturn nil, fmt.Errorf(\"no JSON object in model output: %q\", text)\n\t}\n\tvar a Assessment\n\tif err := json.Unmarshal([]byte(m), &a); err != nil {\n\t\treturn nil, fmt.Errorf(\"parse assessment: %w (raw: %q)\", err, m)\n\t}\n\treturn &a, nil\n}\n"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":53684,"cache_read_input_tokens":14726,"output_tokens":14071,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":53684},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":14071,"cache_read_input_tokens":14726,"cache_creation_input_tokens":53684,"cache_creation":{"ephemeral_5m_input_tokens":53684,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKSwi8moBxLFxH1irrg2","type":"assistant","uuid":"b86219e7-f0c5-48e8-ac8e-cf02be99e485","timestamp":"2026-04-22T20:34:59.088Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"b86219e7-f0c5-48e8-ac8e-cf02be99e485","isSidechain":false,"message":{"model":"claude-opus-4-7","id":"msg_01E3xMLZ7jSzYhBQuaPNUjsM","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_019hbpvaUjpAwzWFqcr8LSyX","name":"Write","input":{"file_path":"/Users/steve.briggs/projects/televibe/ai/anthropic.go","content":"package ai\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n)\n\ntype AnthropicConfig struct {\n\tAPIKey string `toml:\"api_key\"`\n\tModel string `toml:\"model\"`\n}\n\ntype Anthropic struct {\n\tcfg AnthropicConfig\n\tclient *http.Client\n}\n\nfunc NewAnthropic(cfg AnthropicConfig) *Anthropic {\n\tif cfg.Model == \"\" {\n\t\tcfg.Model = \"claude-sonnet-4-6\"\n\t}\n\treturn &Anthropic{cfg: cfg, client: &http.Client{}}\n}\n\nfunc (a *Anthropic) Assess(ctx context.Context, req ScoreRequest) (*Assessment, error) {\n\tbody, err := json.Marshal(map[string]any{\n\t\t\"model\": a.cfg.Model,\n\t\t\"max_tokens\": 1024,\n\t\t\"system\": []map[string]any{\n\t\t\t{\n\t\t\t\t\"type\": \"text\",\n\t\t\t\t\"text\": SystemPrompt,\n\t\t\t\t\"cache_control\": map[string]string{\"type\": \"ephemeral\"},\n\t\t\t},\n\t\t},\n\t\t\"messages\": []map[string]any{\n\t\t\t{\"role\": \"user\", \"content\": UserPrompt(req)},\n\t\t},\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\thttpReq, err := http.NewRequestWithContext(ctx, http.MethodPost,\n\t\t\"https://api.anthropic.com/v1/messages\", bytes.NewReader(body))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\thttpReq.Header.Set(\"Content-Type\", \"application/json\")\n\thttpReq.Header.Set(\"x-api-key\", a.cfg.APIKey)\n\thttpReq.Header.Set(\"anthropic-version\", \"2023-06-01\")\n\n\tresp, err := a.client.Do(httpReq)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer resp.Body.Close()\n\tif resp.StatusCode >= 300 {\n\t\traw, _ := io.ReadAll(resp.Body)\n\t\treturn nil, fmt.Errorf(\"anthropic %d: %s\", resp.StatusCode, raw)\n\t}\n\tvar out struct {\n\t\tContent []struct {\n\t\t\tText string `json:\"text\"`\n\t\t\tType string `json:\"type\"`\n\t\t} `json:\"content\"`\n\t}\n\tif err := json.NewDecoder(resp.Body).Decode(&out); err != nil {\n\t\treturn nil, err\n\t}\n\tfor _, c := range out.Content {\n\t\tif c.Type == \"text\" {\n\t\t\treturn parseAssessment(c.Text)\n\t\t}\n\t}\n\treturn nil, fmt.Errorf(\"no text content in anthropic response\")\n}\n"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":53684,"cache_read_input_tokens":14726,"output_tokens":14071,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":53684},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":14071,"cache_read_input_tokens":14726,"cache_creation_input_tokens":53684,"cache_creation":{"ephemeral_5m_input_tokens":53684,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKSwi8moBxLFxH1irrg2","type":"assistant","uuid":"c7517ffe-9613-4527-9f38-26a401d76d4a","timestamp":"2026-04-22T20:35:05.843Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"c7517ffe-9613-4527-9f38-26a401d76d4a","isSidechain":false,"message":{"model":"claude-opus-4-7","id":"msg_01E3xMLZ7jSzYhBQuaPNUjsM","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01MFMuM1zLLBa3W56SrhEjrE","name":"Write","input":{"file_path":"/Users/steve.briggs/projects/televibe/ai/bedrock.go","content":"package ai\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\tawsconfig \"github.com/aws/aws-sdk-go-v2/config\"\n\t\"github.com/aws/aws-sdk-go-v2/service/bedrockruntime\"\n)\n\ntype BedrockConfig struct {\n\tRegion string `toml:\"region\"`\n\tModelID string `toml:\"model_id\"`\n}\n\ntype Bedrock struct {\n\tcfg BedrockConfig\n\tclient *bedrockruntime.Client\n}\n\nfunc NewBedrock(cfg BedrockConfig) (*Bedrock, error) {\n\tif cfg.ModelID == \"\" {\n\t\tcfg.ModelID = \"us.anthropic.claude-sonnet-4-6-v1:0\"\n\t}\n\tawsCfg, err := awsconfig.LoadDefaultConfig(context.Background(), awsconfig.WithRegion(cfg.Region))\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"aws config: %w\", err)\n\t}\n\treturn &Bedrock{cfg: cfg, client: bedrockruntime.NewFromConfig(awsCfg)}, nil\n}\n\nfunc (b *Bedrock) Assess(ctx context.Context, req ScoreRequest) (*Assessment, error) {\n\tbody, err := json.Marshal(map[string]any{\n\t\t\"anthropic_version\": \"bedrock-2023-05-31\",\n\t\t\"max_tokens\": 1024,\n\t\t\"system\": SystemPrompt,\n\t\t\"messages\": []map[string]any{\n\t\t\t{\"role\": \"user\", \"content\": UserPrompt(req)},\n\t\t},\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tout, err := b.client.InvokeModel(ctx, &bedrockruntime.InvokeModelInput{\n\t\tModelId: aws.String(b.cfg.ModelID),\n\t\tContentType: aws.String(\"application/json\"),\n\t\tAccept: aws.String(\"application/json\"),\n\t\tBody: body,\n\t})\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"bedrock invoke: %w\", err)\n\t}\n\tvar parsed struct {\n\t\tContent []struct {\n\t\t\tText string `json:\"text\"`\n\t\t\tType string `json:\"type\"`\n\t\t} `json:\"content\"`\n\t}\n\tif err := json.Unmarshal(out.Body, &parsed); err != nil {\n\t\treturn nil, fmt.Errorf(\"bedrock decode: %w\", err)\n\t}\n\tfor _, c := range parsed.Content {\n\t\tif c.Type == \"text\" {\n\t\t\treturn parseAssessment(c.Text)\n\t\t}\n\t}\n\treturn nil, fmt.Errorf(\"no text content in bedrock response\")\n}\n"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":53684,"cache_read_input_tokens":14726,"output_tokens":14071,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":53684},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":14071,"cache_read_input_tokens":14726,"cache_creation_input_tokens":53684,"cache_creation":{"ephemeral_5m_input_tokens":53684,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKSwi8moBxLFxH1irrg2","type":"assistant","uuid":"4df19962-3dfc-4eb0-90f6-6c582f106827","timestamp":"2026-04-22T20:35:13.031Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"4df19962-3dfc-4eb0-90f6-6c582f106827","isSidechain":false,"message":{"model":"claude-opus-4-7","id":"msg_01E3xMLZ7jSzYhBQuaPNUjsM","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01Rdc2sQMPZbyYRJjWsVyi3r","name":"Write","input":{"file_path":"/Users/steve.briggs/projects/televibe/ai/webhook.go","content":"package ai\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n)\n\ntype WebhookConfig struct {\n\tURL string `toml:\"url\"`\n\tAuthHeader string `toml:\"auth_header\"`\n\tHeaders map[string]string `toml:\"headers\"`\n}\n\ntype Webhook struct {\n\tcfg WebhookConfig\n\tclient *http.Client\n}\n\nfunc NewWebhook(cfg WebhookConfig) *Webhook {\n\treturn &Webhook{cfg: cfg, client: &http.Client{}}\n}\n\ntype webhookPayload struct {\n\tSystemPrompt string `json:\"system_prompt\"`\n\tUserPrompt string `json:\"user_prompt\"`\n\tRequest ScoreRequest `json:\"request\"`\n}\n\nfunc (w *Webhook) Assess(ctx context.Context, req ScoreRequest) (*Assessment, error) {\n\tbody, err := json.Marshal(webhookPayload{\n\t\tSystemPrompt: SystemPrompt,\n\t\tUserPrompt: UserPrompt(req),\n\t\tRequest: req,\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\thttpReq, err := http.NewRequestWithContext(ctx, http.MethodPost, w.cfg.URL, bytes.NewReader(body))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\thttpReq.Header.Set(\"Content-Type\", \"application/json\")\n\tif w.cfg.AuthHeader != \"\" {\n\t\thttpReq.Header.Set(\"Authorization\", w.cfg.AuthHeader)\n\t}\n\tfor k, v := range w.cfg.Headers {\n\t\thttpReq.Header.Set(k, v)\n\t}\n\tresp, err := w.client.Do(httpReq)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer resp.Body.Close()\n\tif resp.StatusCode >= 300 {\n\t\traw, _ := io.ReadAll(resp.Body)\n\t\treturn nil, fmt.Errorf(\"webhook %d: %s\", resp.StatusCode, raw)\n\t}\n\tvar a Assessment\n\tif err := json.NewDecoder(resp.Body).Decode(&a); err != nil {\n\t\treturn nil, fmt.Errorf(\"webhook decode: %w\", err)\n\t}\n\treturn &a, nil\n}\n"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":53684,"cache_read_input_tokens":14726,"output_tokens":14071,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":53684},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":14071,"cache_read_input_tokens":14726,"cache_creation_input_tokens":53684,"cache_creation":{"ephemeral_5m_input_tokens":53684,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKSwi8moBxLFxH1irrg2","type":"assistant","uuid":"a9ca7972-1628-4282-9c3d-9198457a6145","timestamp":"2026-04-22T20:35:18.713Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"a9ca7972-1628-4282-9c3d-9198457a6145","isSidechain":false,"message":{"model":"claude-opus-4-7","id":"msg_01E3xMLZ7jSzYhBQuaPNUjsM","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_016JtafvMGMAip6utqWzP4qo","name":"Write","input":{"file_path":"/Users/steve.briggs/projects/televibe/risk/risk.go","content":"package risk\n\ntype Config struct {\n\tTicketThreshold int `toml:\"ticket_threshold\"`\n\tCUSTXPattern string `toml:\"custx_pattern\"`\n\tOffHoursStart int `toml:\"off_hours_start\"`\n\tOffHoursEnd int `toml:\"off_hours_end\"`\n\tTimezone string `toml:\"timezone\"`\n}\n\nfunc (c *Config) ApplyDefaults() {\n\tif c.TicketThreshold == 0 {\n\t\tc.TicketThreshold = 25\n\t}\n\tif c.CUSTXPattern == \"\" {\n\t\tc.CUSTXPattern = `CUSTX-\\d+`\n\t}\n\tif c.Timezone == \"\" {\n\t\tc.Timezone = \"UTC\"\n\t}\n}\n\ntype Tier struct {\n\tName string\n\tSlang string\n\tMinScore int\n}\n\nvar Tiers = []Tier{\n\t{Name: \"low\", Slang: \"no cap\", MinScore: 0},\n\t{Name: \"medium\", Slang: \"sus\", MinScore: 25},\n\t{Name: \"high\", Slang: \"mad sus fr\", MinScore: 50},\n\t{Name: \"critical\", Slang: \"straight L, touch grass\", MinScore: 75},\n}\n\nfunc TierForScore(score int) Tier {\n\tchosen := Tiers[0]\n\tfor _, t := range Tiers {\n\t\tif score >= t.MinScore {\n\t\t\tchosen = t\n\t\t}\n\t}\n\treturn chosen\n}\n"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":53684,"cache_read_input_tokens":14726,"output_tokens":14071,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":53684},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":14071,"cache_read_input_tokens":14726,"cache_creation_input_tokens":53684,"cache_creation":{"ephemeral_5m_input_tokens":53684,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKSwi8moBxLFxH1irrg2","type":"assistant","uuid":"228acd0e-6320-48a6-aa1b-9ba33154fae2","timestamp":"2026-04-22T20:35:24.636Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"6cbb4cbf-7fed-4327-b619-41198f83f71f","isSidechain":false,"promptId":"1a74d92d-87ee-4b9a-b7b6-9d69d238ae5a","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01M2vcwNJ4soz4JbovVWWB9c","type":"tool_result","content":"File created successfully at: /Users/steve.briggs/projects/televibe/app.go"}]},"uuid":"a8878b00-5d0d-41e3-929e-8a99ac498883","timestamp":"2026-04-22T20:35:26.816Z","toolUseResult":{"type":"create","filePath":"/Users/steve.briggs/projects/televibe/app.go","content":"package televibe\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"log/slog\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/gravitational/teleport/api/client\"\n\t\"github.com/gravitational/teleport/api/types\"\n\t\"golang.org/x/sync/errgroup\"\n\n\t\"televibe/ai\"\n\t\"televibe/jira\"\n\t\"televibe/risk\"\n)\n\ntype App struct {\n\tcfg *Config\n\ttele *client.Client\n\tai ai.Provider\n\tjira *jira.Client\n\tscorer *risk.Scorer\n\n\tpending map[string]string\n\tpendingMu sync.Mutex\n}\n\nfunc NewApp(ctx context.Context, cfg *Config) (*App, error) {\n\ttele, err := client.New(ctx, client.Config{\n\t\tAddrs: []string{cfg.Teleport.Addr},\n\t\tCredentials: []client.Credentials{\n\t\t\tclient.LoadIdentityFile(cfg.Teleport.IdentityFile),\n\t\t},\n\t})\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"teleport client: %w\", err)\n\t}\n\n\tprov, err := ai.New(cfg.AI)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"ai provider: %w\", err)\n\t}\n\n\tjc, err := jira.New(cfg.Jira)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"jira client: %w\", err)\n\t}\n\n\tscorer, err := risk.NewScorer(cfg.Risk)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"scorer: %w\", err)\n\t}\n\n\treturn &App{\n\t\tcfg: cfg,\n\t\ttele: tele,\n\t\tai: prov,\n\t\tjira: jc,\n\t\tscorer: scorer,\n\t\tpending: map[string]string{},\n\t}, nil\n}\n\nfunc (a *App) Run(ctx context.Context) error {\n\tslog.Info(\"televibe starting\",\n\t\t\"provider\", a.cfg.AI.Provider,\n\t\t\"threshold\", a.cfg.Risk.TicketThreshold,\n\t\t\"itsm_project\", a.cfg.Jira.Project)\n\n\tif err := a.rehydrate(ctx); err != nil {\n\t\treturn fmt.Errorf(\"rehydrate open ITSM tickets: %w\", err)\n\t}\n\n\tg, gctx := errgroup.WithContext(ctx)\n\tg.Go(func() error { return a.watchRequests(gctx) })\n\tg.Go(func() error { return a.pollITSM(gctx) })\n\treturn g.Wait()\n}\n\nfunc (a *App) rehydrate(ctx context.Context) error {\n\topen, err := a.jira.ListOpenTeleportTickets(ctx)\n\tif err != nil {\n\t\treturn err\n\t}\n\ta.pendingMu.Lock()\n\tfor reqID, ticket := range open {\n\t\ta.pending[reqID] = ticket\n\t}\n\ta.pendingMu.Unlock()\n\tslog.Info(\"rehydrated pending tickets\", \"count\", len(open))\n\treturn nil\n}\n\nfunc (a *App) watchRequests(ctx context.Context) error {\n\twatcher, err := a.tele.NewWatcher(ctx, types.Watch{\n\t\tKinds: []types.WatchKind{{Kind: types.KindAccessRequest}},\n\t})\n\tif err != nil {\n\t\treturn fmt.Errorf(\"start watcher: %w\", err)\n\t}\n\tdefer watcher.Close()\n\n\tfor {\n\t\tselect {\n\t\tcase <-ctx.Done():\n\t\t\treturn ctx.Err()\n\t\tcase <-watcher.Done():\n\t\t\treturn watcher.Error()\n\t\tcase ev := <-watcher.Events():\n\t\t\tif ev.Type != types.OpPut {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treq, ok := ev.Resource.(types.AccessRequest)\n\t\t\tif !ok {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif req.GetState() != types.RequestState_PENDING {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\ta.pendingMu.Lock()\n\t\t\t_, held := a.pending[req.GetName()]\n\t\t\ta.pendingMu.Unlock()\n\t\t\tif held {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tgo a.handleRequest(ctx, req)\n\t\t}\n\t}\n}\n\nfunc (a *App) handleRequest(ctx context.Context, req types.AccessRequest) {\n\tid := req.GetName()\n\tlog := slog.With(\"request_id\", id, \"user\", req.GetUser())\n\n\tlog.Info(\"scoring access request\")\n\tresult, err := a.scorer.Score(ctx, a.ai, req)\n\tif err != nil {\n\t\tlog.Error(\"scoring failed\", \"err\", err)\n\t\treturn\n\t}\n\tlog.Info(\"risk scored\",\n\t\t\"score\", result.Score,\n\t\t\"tier\", result.Tier.Name,\n\t\t\"slang\", result.Tier.Slang,\n\t\t\"components\", result.Components)\n\n\tif result.Score < a.cfg.Risk.TicketThreshold {\n\t\treason := fmt.Sprintf(\"televibe: %s (score %d, %q) — auto-approved\",\n\t\t\tresult.Tier.Name, result.Score, result.Tier.Slang)\n\t\tif err := a.submitReview(ctx, id, types.RequestState_APPROVED, reason); err != nil {\n\t\t\tlog.Error(\"auto-approve failed\", \"err\", err)\n\t\t}\n\t\treturn\n\t}\n\n\tticket, err := a.jira.CreateITSMTicket(ctx, jira.TicketInput{\n\t\tRequestID: id,\n\t\tUser: req.GetUser(),\n\t\tRoles: req.GetRoles(),\n\t\tReason: req.GetRequestReason(),\n\t\tScore: result.Score,\n\t\tTier: result.Tier.Name,\n\t\tSlang: result.Tier.Slang,\n\t\tComponents: result.Components,\n\t\tAIReasoning: result.Reasoning,\n\t})\n\tif err != nil {\n\t\tlog.Error(\"create ITSM ticket failed\", \"err\", err)\n\t\treturn\n\t}\n\n\ta.pendingMu.Lock()\n\ta.pending[id] = ticket\n\ta.pendingMu.Unlock()\n\tlog.Info(\"ITSM ticket created, request held for SRE review\",\n\t\t\"ticket\", ticket, \"tier\", result.Tier.Name, \"slang\", result.Tier.Slang)\n}\n\nfunc (a *App) pollITSM(ctx context.Context) error {\n\tt := time.NewTicker(a.cfg.Jira.PollInterval)\n\tdefer t.Stop()\n\tfor {\n\t\tselect {\n\t\tcase <-ctx.Done():\n\t\t\treturn ctx.Err()\n\t\tcase <-t.C:\n\t\t\ta.reconcileITSM(ctx)\n\t\t}\n\t}\n}\n\nfunc (a *App) reconcileITSM(ctx context.Context) {\n\ta.pendingMu.Lock()\n\tsnap := make(map[string]string, len(a.pending))\n\tfor k, v := range a.pending {\n\t\tsnap[k] = v\n\t}\n\ta.pendingMu.Unlock()\n\n\tfor requestID, ticket := range snap {\n\t\tstatus, err := a.jira.TicketStatus(ctx, ticket)\n\t\tif err != nil {\n\t\t\tslog.Warn(\"ITSM status check failed\", \"ticket\", ticket, \"err\", err)\n\t\t\tcontinue\n\t\t}\n\t\tvar next types.RequestState\n\t\tswitch status {\n\t\tcase jira.StatusApproved:\n\t\t\tnext = types.RequestState_APPROVED\n\t\tcase jira.StatusRejected:\n\t\t\tnext = types.RequestState_DENIED\n\t\tdefault:\n\t\t\tcontinue\n\t\t}\n\t\treason := fmt.Sprintf(\"televibe: ITSM %s resolved (%s)\", ticket, status)\n\t\tif err := a.submitReview(ctx, requestID, next, reason); err != nil {\n\t\t\tslog.Error(\"submit review failed\", \"request_id\", requestID, \"err\", err)\n\t\t\tcontinue\n\t\t}\n\t\ta.pendingMu.Lock()\n\t\tdelete(a.pending, requestID)\n\t\ta.pendingMu.Unlock()\n\t}\n}\n\nfunc (a *App) submitReview(ctx context.Context, requestID string, state types.RequestState, reason string) error {\n\t_, err := a.tele.SubmitAccessReview(ctx, types.AccessReviewSubmission{\n\t\tRequestID: requestID,\n\t\tReview: types.AccessReview{\n\t\t\tAuthor: \"televibe\",\n\t\t\tProposedState: state,\n\t\t\tReason: reason,\n\t\t},\n\t})\n\treturn err\n}\n","structuredPatch":[],"originalFile":null,"userModified":false},"sourceToolAssistantUUID":"6cbb4cbf-7fed-4327-b619-41198f83f71f","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"b86219e7-f0c5-48e8-ac8e-cf02be99e485","isSidechain":false,"promptId":"1a74d92d-87ee-4b9a-b7b6-9d69d238ae5a","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01KnYCuLfFjAvcLoChoH6fXZ","type":"tool_result","content":"File created successfully at: /Users/steve.briggs/projects/televibe/ai/provider.go"}]},"uuid":"18e3f1ab-80b0-47ea-b9c6-a7a2e8e7aeda","timestamp":"2026-04-22T20:35:28.585Z","toolUseResult":{"type":"create","filePath":"/Users/steve.briggs/projects/televibe/ai/provider.go","content":"package ai\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"regexp\"\n\t\"strings\"\n)\n\ntype Config struct {\n\tProvider string `toml:\"provider\"`\n\tAnthropic AnthropicConfig `toml:\"anthropic\"`\n\tBedrock BedrockConfig `toml:\"bedrock\"`\n\tWebhook WebhookConfig `toml:\"webhook\"`\n}\n\nfunc (c *Config) Validate() error {\n\tswitch c.Provider {\n\tcase \"anthropic\":\n\t\tif c.Anthropic.APIKey == \"\" {\n\t\t\treturn fmt.Errorf(\"anthropic.api_key is required\")\n\t\t}\n\tcase \"bedrock\":\n\t\tif c.Bedrock.Region == \"\" {\n\t\t\treturn fmt.Errorf(\"bedrock.region is required\")\n\t\t}\n\tcase \"webhook\":\n\t\tif c.Webhook.URL == \"\" {\n\t\t\treturn fmt.Errorf(\"webhook.url is required\")\n\t\t}\n\tdefault:\n\t\treturn fmt.Errorf(\"provider must be one of: anthropic, bedrock, webhook\")\n\t}\n\treturn nil\n}\n\ntype ScoreRequest struct {\n\tUser string `json:\"user\"`\n\tRoles []string `json:\"roles\"`\n\tResources []string `json:\"resources\"`\n\tReason string `json:\"reason\"`\n\tHasCUSTXReference bool `json:\"has_custx_reference\"`\n\tDescriptionLength int `json:\"description_length\"`\n}\n\ntype Assessment struct {\n\tDescriptionQuality int `json:\"description_quality\"`\n\tPrivilegeConcern int `json:\"privilege_concern\"`\n\tAnomalies int `json:\"anomalies\"`\n\tReasoning string `json:\"reasoning\"`\n}\n\ntype Provider interface {\n\tAssess(ctx context.Context, req ScoreRequest) (*Assessment, error)\n}\n\nfunc New(cfg Config) (Provider, error) {\n\tswitch cfg.Provider {\n\tcase \"anthropic\":\n\t\treturn NewAnthropic(cfg.Anthropic), nil\n\tcase \"bedrock\":\n\t\treturn NewBedrock(cfg.Bedrock)\n\tcase \"webhook\":\n\t\treturn NewWebhook(cfg.Webhook), nil\n\t}\n\treturn nil, fmt.Errorf(\"unknown provider: %s\", cfg.Provider)\n}\n\nconst SystemPrompt = `You are a security analyst reviewing a Teleport access request.\nAssess the risk of granting the requested access based on the details provided.\n\nReturn ONLY a JSON object with these exact fields (no prose, no markdown fence):\n{\n \"description_quality\": <int 0-25; 0 = thorough and specific, 25 = absent or vague>,\n \"privilege_concern\": <int 0-25; 0 = routine read access, 25 = broad production admin or destructive capability>,\n \"anomalies\": <int 0-10; flag mismatches between stated purpose and requested scope, or other unusual patterns>,\n \"reasoning\": \"<2-3 sentences explaining the scores>\"\n}\n\nScoring guidance:\n- description_quality: does the reason describe WHAT work will be performed and WHY, and does the scope match the work described?\n- privilege_concern: how large is the blast radius of the requested roles and resources? Production prod-*, root, admin, or destructive tooling score higher.\n- anomalies: scope/purpose mismatch, vague intent, requests outside the user's typical pattern, off-hours emergency without justification.`\n\nfunc UserPrompt(req ScoreRequest) string {\n\tvar sb strings.Builder\n\tsb.WriteString(\"Access request details:\\n\\n\")\n\tfmt.Fprintf(&sb, \"User: %s\\n\", req.User)\n\tfmt.Fprintf(&sb, \"Requested roles: %s\\n\", strings.Join(req.Roles, \", \"))\n\tif len(req.Resources) > 0 {\n\t\tfmt.Fprintf(&sb, \"Requested resources: %s\\n\", strings.Join(req.Resources, \", \"))\n\t}\n\tfmt.Fprintf(&sb, \"Contains CUSTX ticket reference: %v\\n\", req.HasCUSTXReference)\n\tfmt.Fprintf(&sb, \"Description length: %d characters\\n\\n\", req.DescriptionLength)\n\tsb.WriteString(\"Request reason (verbatim):\\n\")\n\tsb.WriteString(\"---\\n\")\n\tsb.WriteString(req.Reason)\n\tsb.WriteString(\"\\n---\\n\\nReturn the JSON assessment.\")\n\treturn sb.String()\n}\n\nvar jsonRE = regexp.MustCompile(`(?s)\\{.*\\}`)\n\nfunc parseAssessment(text string) (*Assessment, error) {\n\tm := jsonRE.FindString(text)\n\tif m == \"\" {\n\t\treturn nil, fmt.Errorf(\"no JSON object in model output: %q\", text)\n\t}\n\tvar a Assessment\n\tif err := json.Unmarshal([]byte(m), &a); err != nil {\n\t\treturn nil, fmt.Errorf(\"parse assessment: %w (raw: %q)\", err, m)\n\t}\n\treturn &a, nil\n}\n","structuredPatch":[],"originalFile":null,"userModified":false},"sourceToolAssistantUUID":"b86219e7-f0c5-48e8-ac8e-cf02be99e485","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"c7517ffe-9613-4527-9f38-26a401d76d4a","isSidechain":false,"promptId":"1a74d92d-87ee-4b9a-b7b6-9d69d238ae5a","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_019hbpvaUjpAwzWFqcr8LSyX","type":"tool_result","content":"File created successfully at: /Users/steve.briggs/projects/televibe/ai/anthropic.go"}]},"uuid":"75a2257d-53d4-42ea-9bce-93068899f829","timestamp":"2026-04-22T20:35:29.927Z","toolUseResult":{"type":"create","filePath":"/Users/steve.briggs/projects/televibe/ai/anthropic.go","content":"package ai\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n)\n\ntype AnthropicConfig struct {\n\tAPIKey string `toml:\"api_key\"`\n\tModel string `toml:\"model\"`\n}\n\ntype Anthropic struct {\n\tcfg AnthropicConfig\n\tclient *http.Client\n}\n\nfunc NewAnthropic(cfg AnthropicConfig) *Anthropic {\n\tif cfg.Model == \"\" {\n\t\tcfg.Model = \"claude-sonnet-4-6\"\n\t}\n\treturn &Anthropic{cfg: cfg, client: &http.Client{}}\n}\n\nfunc (a *Anthropic) Assess(ctx context.Context, req ScoreRequest) (*Assessment, error) {\n\tbody, err := json.Marshal(map[string]any{\n\t\t\"model\": a.cfg.Model,\n\t\t\"max_tokens\": 1024,\n\t\t\"system\": []map[string]any{\n\t\t\t{\n\t\t\t\t\"type\": \"text\",\n\t\t\t\t\"text\": SystemPrompt,\n\t\t\t\t\"cache_control\": map[string]string{\"type\": \"ephemeral\"},\n\t\t\t},\n\t\t},\n\t\t\"messages\": []map[string]any{\n\t\t\t{\"role\": \"user\", \"content\": UserPrompt(req)},\n\t\t},\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\thttpReq, err := http.NewRequestWithContext(ctx, http.MethodPost,\n\t\t\"https://api.anthropic.com/v1/messages\", bytes.NewReader(body))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\thttpReq.Header.Set(\"Content-Type\", \"application/json\")\n\thttpReq.Header.Set(\"x-api-key\", a.cfg.APIKey)\n\thttpReq.Header.Set(\"anthropic-version\", \"2023-06-01\")\n\n\tresp, err := a.client.Do(httpReq)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer resp.Body.Close()\n\tif resp.StatusCode >= 300 {\n\t\traw, _ := io.ReadAll(resp.Body)\n\t\treturn nil, fmt.Errorf(\"anthropic %d: %s\", resp.StatusCode, raw)\n\t}\n\tvar out struct {\n\t\tContent []struct {\n\t\t\tText string `json:\"text\"`\n\t\t\tType string `json:\"type\"`\n\t\t} `json:\"content\"`\n\t}\n\tif err := json.NewDecoder(resp.Body).Decode(&out); err != nil {\n\t\treturn nil, err\n\t}\n\tfor _, c := range out.Content {\n\t\tif c.Type == \"text\" {\n\t\t\treturn parseAssessment(c.Text)\n\t\t}\n\t}\n\treturn nil, fmt.Errorf(\"no text content in anthropic response\")\n}\n","structuredPatch":[],"originalFile":null,"userModified":false},"sourceToolAssistantUUID":"c7517ffe-9613-4527-9f38-26a401d76d4a","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"4df19962-3dfc-4eb0-90f6-6c582f106827","isSidechain":false,"promptId":"1a74d92d-87ee-4b9a-b7b6-9d69d238ae5a","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01MFMuM1zLLBa3W56SrhEjrE","type":"tool_result","content":"File created successfully at: /Users/steve.briggs/projects/televibe/ai/bedrock.go"}]},"uuid":"c6e59f6b-3a83-41ec-9274-0d051b4d0a2a","timestamp":"2026-04-22T20:35:31.787Z","toolUseResult":{"type":"create","filePath":"/Users/steve.briggs/projects/televibe/ai/bedrock.go","content":"package ai\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\tawsconfig \"github.com/aws/aws-sdk-go-v2/config\"\n\t\"github.com/aws/aws-sdk-go-v2/service/bedrockruntime\"\n)\n\ntype BedrockConfig struct {\n\tRegion string `toml:\"region\"`\n\tModelID string `toml:\"model_id\"`\n}\n\ntype Bedrock struct {\n\tcfg BedrockConfig\n\tclient *bedrockruntime.Client\n}\n\nfunc NewBedrock(cfg BedrockConfig) (*Bedrock, error) {\n\tif cfg.ModelID == \"\" {\n\t\tcfg.ModelID = \"us.anthropic.claude-sonnet-4-6-v1:0\"\n\t}\n\tawsCfg, err := awsconfig.LoadDefaultConfig(context.Background(), awsconfig.WithRegion(cfg.Region))\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"aws config: %w\", err)\n\t}\n\treturn &Bedrock{cfg: cfg, client: bedrockruntime.NewFromConfig(awsCfg)}, nil\n}\n\nfunc (b *Bedrock) Assess(ctx context.Context, req ScoreRequest) (*Assessment, error) {\n\tbody, err := json.Marshal(map[string]any{\n\t\t\"anthropic_version\": \"bedrock-2023-05-31\",\n\t\t\"max_tokens\": 1024,\n\t\t\"system\": SystemPrompt,\n\t\t\"messages\": []map[string]any{\n\t\t\t{\"role\": \"user\", \"content\": UserPrompt(req)},\n\t\t},\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tout, err := b.client.InvokeModel(ctx, &bedrockruntime.InvokeModelInput{\n\t\tModelId: aws.String(b.cfg.ModelID),\n\t\tContentType: aws.String(\"application/json\"),\n\t\tAccept: aws.String(\"application/json\"),\n\t\tBody: body,\n\t})\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"bedrock invoke: %w\", err)\n\t}\n\tvar parsed struct {\n\t\tContent []struct {\n\t\t\tText string `json:\"text\"`\n\t\t\tType string `json:\"type\"`\n\t\t} `json:\"content\"`\n\t}\n\tif err := json.Unmarshal(out.Body, &parsed); err != nil {\n\t\treturn nil, fmt.Errorf(\"bedrock decode: %w\", err)\n\t}\n\tfor _, c := range parsed.Content {\n\t\tif c.Type == \"text\" {\n\t\t\treturn parseAssessment(c.Text)\n\t\t}\n\t}\n\treturn nil, fmt.Errorf(\"no text content in bedrock response\")\n}\n","structuredPatch":[],"originalFile":null,"userModified":false},"sourceToolAssistantUUID":"4df19962-3dfc-4eb0-90f6-6c582f106827","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"a9ca7972-1628-4282-9c3d-9198457a6145","isSidechain":false,"promptId":"1a74d92d-87ee-4b9a-b7b6-9d69d238ae5a","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01Rdc2sQMPZbyYRJjWsVyi3r","type":"tool_result","content":"File created successfully at: /Users/steve.briggs/projects/televibe/ai/webhook.go"}]},"uuid":"e3ab7f02-79ff-4c6f-a698-8a6480c6eebb","timestamp":"2026-04-22T20:35:32.781Z","toolUseResult":{"type":"create","filePath":"/Users/steve.briggs/projects/televibe/ai/webhook.go","content":"package ai\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n)\n\ntype WebhookConfig struct {\n\tURL string `toml:\"url\"`\n\tAuthHeader string `toml:\"auth_header\"`\n\tHeaders map[string]string `toml:\"headers\"`\n}\n\ntype Webhook struct {\n\tcfg WebhookConfig\n\tclient *http.Client\n}\n\nfunc NewWebhook(cfg WebhookConfig) *Webhook {\n\treturn &Webhook{cfg: cfg, client: &http.Client{}}\n}\n\ntype webhookPayload struct {\n\tSystemPrompt string `json:\"system_prompt\"`\n\tUserPrompt string `json:\"user_prompt\"`\n\tRequest ScoreRequest `json:\"request\"`\n}\n\nfunc (w *Webhook) Assess(ctx context.Context, req ScoreRequest) (*Assessment, error) {\n\tbody, err := json.Marshal(webhookPayload{\n\t\tSystemPrompt: SystemPrompt,\n\t\tUserPrompt: UserPrompt(req),\n\t\tRequest: req,\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\thttpReq, err := http.NewRequestWithContext(ctx, http.MethodPost, w.cfg.URL, bytes.NewReader(body))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\thttpReq.Header.Set(\"Content-Type\", \"application/json\")\n\tif w.cfg.AuthHeader != \"\" {\n\t\thttpReq.Header.Set(\"Authorization\", w.cfg.AuthHeader)\n\t}\n\tfor k, v := range w.cfg.Headers {\n\t\thttpReq.Header.Set(k, v)\n\t}\n\tresp, err := w.client.Do(httpReq)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer resp.Body.Close()\n\tif resp.StatusCode >= 300 {\n\t\traw, _ := io.ReadAll(resp.Body)\n\t\treturn nil, fmt.Errorf(\"webhook %d: %s\", resp.StatusCode, raw)\n\t}\n\tvar a Assessment\n\tif err := json.NewDecoder(resp.Body).Decode(&a); err != nil {\n\t\treturn nil, fmt.Errorf(\"webhook decode: %w\", err)\n\t}\n\treturn &a, nil\n}\n","structuredPatch":[],"originalFile":null,"userModified":false},"sourceToolAssistantUUID":"a9ca7972-1628-4282-9c3d-9198457a6145","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"228acd0e-6320-48a6-aa1b-9ba33154fae2","isSidechain":false,"promptId":"1a74d92d-87ee-4b9a-b7b6-9d69d238ae5a","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_016JtafvMGMAip6utqWzP4qo","type":"tool_result","content":"File created successfully at: /Users/steve.briggs/projects/televibe/risk/risk.go"}]},"uuid":"06ced5a4-2509-4dd8-962f-8b64ffb6a081","timestamp":"2026-04-22T20:35:33.831Z","toolUseResult":{"type":"create","filePath":"/Users/steve.briggs/projects/televibe/risk/risk.go","content":"package risk\n\ntype Config struct {\n\tTicketThreshold int `toml:\"ticket_threshold\"`\n\tCUSTXPattern string `toml:\"custx_pattern\"`\n\tOffHoursStart int `toml:\"off_hours_start\"`\n\tOffHoursEnd int `toml:\"off_hours_end\"`\n\tTimezone string `toml:\"timezone\"`\n}\n\nfunc (c *Config) ApplyDefaults() {\n\tif c.TicketThreshold == 0 {\n\t\tc.TicketThreshold = 25\n\t}\n\tif c.CUSTXPattern == \"\" {\n\t\tc.CUSTXPattern = `CUSTX-\\d+`\n\t}\n\tif c.Timezone == \"\" {\n\t\tc.Timezone = \"UTC\"\n\t}\n}\n\ntype Tier struct {\n\tName string\n\tSlang string\n\tMinScore int\n}\n\nvar Tiers = []Tier{\n\t{Name: \"low\", Slang: \"no cap\", MinScore: 0},\n\t{Name: \"medium\", Slang: \"sus\", MinScore: 25},\n\t{Name: \"high\", Slang: \"mad sus fr\", MinScore: 50},\n\t{Name: \"critical\", Slang: \"straight L, touch grass\", MinScore: 75},\n}\n\nfunc TierForScore(score int) Tier {\n\tchosen := Tiers[0]\n\tfor _, t := range Tiers {\n\t\tif score >= t.MinScore {\n\t\t\tchosen = t\n\t\t}\n\t}\n\treturn chosen\n}\n","structuredPatch":[],"originalFile":null,"userModified":false},"sourceToolAssistantUUID":"228acd0e-6320-48a6-aa1b-9ba33154fae2","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"06ced5a4-2509-4dd8-962f-8b64ffb6a081","isSidechain":false,"message":{"model":"claude-opus-4-7","id":"msg_01E3xMLZ7jSzYhBQuaPNUjsM","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_0171PJgsmM2fCp9Jv6A5nSAt","name":"Write","input":{"file_path":"/Users/steve.briggs/projects/televibe/risk/score.go","content":"package risk\n\nimport (\n\t\"context\"\n\t\"regexp\"\n\t\"time\"\n\n\t\"github.com/gravitational/teleport/api/types\"\n\n\t\"televibe/ai\"\n)\n\ntype Result struct {\n\tScore int\n\tTier Tier\n\tComponents map[string]int\n\tReasoning string\n}\n\ntype Scorer struct {\n\tcfg Config\n\tcustxRegex *regexp.Regexp\n\tloc *time.Location\n}\n\nfunc NewScorer(cfg Config) (*Scorer, error) {\n\tre, err := regexp.Compile(cfg.CUSTXPattern)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tloc, err := time.LoadLocation(cfg.Timezone)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &Scorer{cfg: cfg, custxRegex: re, loc: loc}, nil\n}\n\nfunc (s *Scorer) Score(ctx context.Context, prov ai.Provider, req types.AccessRequest) (*Result, error) {\n\treason := req.GetRequestReason()\n\thasCUSTX := s.custxRegex.MatchString(reason)\n\tdescLen := len(reason)\n\n\tvar resources []string\n\tfor _, r := range req.GetRequestedResourceIDs() {\n\t\tresources = append(resources, r.Name)\n\t}\n\n\tassessment, err := prov.Assess(ctx, ai.ScoreRequest{\n\t\tUser: req.GetUser(),\n\t\tRoles: req.GetRoles(),\n\t\tResources: resources,\n\t\tReason: reason,\n\t\tHasCUSTXReference: hasCUSTX,\n\t\tDescriptionLength: descLen,\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tcomponents := map[string]int{}\n\tscore := 0\n\n\tif !hasCUSTX {\n\t\tcomponents[\"missing_custx_ticket\"] = 30\n\t\tscore += 30\n\t}\n\tif descLen < 40 {\n\t\tcomponents[\"thin_description\"] = 15\n\t\tscore += 15\n\t}\n\tcomponents[\"description_quality\"] = clamp(assessment.DescriptionQuality, 0, 25)\n\tcomponents[\"privilege_concern\"] = clamp(assessment.PrivilegeConcern, 0, 25)\n\tcomponents[\"ai_anomalies\"] = clamp(assessment.Anomalies, 0, 10)\n\tscore += components[\"description_quality\"] + components[\"privilege_concern\"] + components[\"ai_anomalies\"]\n\n\tif s.isOffHours(time.Now()) {\n\t\tcomponents[\"off_hours\"] = 10\n\t\tscore += 10\n\t}\n\n\tif score > 100 {\n\t\tscore = 100\n\t}\n\n\treturn &Result{\n\t\tScore: score,\n\t\tTier: TierForScore(score),\n\t\tComponents: components,\n\t\tReasoning: assessment.Reasoning,\n\t}, nil\n}\n\nfunc (s *Scorer) isOffHours(t time.Time) bool {\n\tif s.cfg.OffHoursStart == 0 && s.cfg.OffHoursEnd == 0 {\n\t\treturn false\n\t}\n\th := t.In(s.loc).Hour()\n\tstart, end := s.cfg.OffHoursStart, s.cfg.OffHoursEnd\n\tif start <= end {\n\t\treturn h >= start && h < end\n\t}\n\treturn h >= start || h < end\n}\n\nfunc clamp(v, lo, hi int) int {\n\tif v < lo {\n\t\treturn lo\n\t}\n\tif v > hi {\n\t\treturn hi\n\t}\n\treturn v\n}\n"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":53684,"cache_read_input_tokens":14726,"output_tokens":14071,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":53684},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":14071,"cache_read_input_tokens":14726,"cache_creation_input_tokens":53684,"cache_creation":{"ephemeral_5m_input_tokens":53684,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKSwi8moBxLFxH1irrg2","type":"assistant","uuid":"6a7a8032-1289-4be1-82b2-e97e6f7b593b","timestamp":"2026-04-22T20:35:34.600Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"6a7a8032-1289-4be1-82b2-e97e6f7b593b","isSidechain":false,"promptId":"1a74d92d-87ee-4b9a-b7b6-9d69d238ae5a","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_0171PJgsmM2fCp9Jv6A5nSAt","type":"tool_result","content":"File created successfully at: /Users/steve.briggs/projects/televibe/risk/score.go"}]},"uuid":"bce514db-a61f-4ca5-9f1f-05dccdab5faa","timestamp":"2026-04-22T20:35:35.447Z","toolUseResult":{"type":"create","filePath":"/Users/steve.briggs/projects/televibe/risk/score.go","content":"package risk\n\nimport (\n\t\"context\"\n\t\"regexp\"\n\t\"time\"\n\n\t\"github.com/gravitational/teleport/api/types\"\n\n\t\"televibe/ai\"\n)\n\ntype Result struct {\n\tScore int\n\tTier Tier\n\tComponents map[string]int\n\tReasoning string\n}\n\ntype Scorer struct {\n\tcfg Config\n\tcustxRegex *regexp.Regexp\n\tloc *time.Location\n}\n\nfunc NewScorer(cfg Config) (*Scorer, error) {\n\tre, err := regexp.Compile(cfg.CUSTXPattern)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tloc, err := time.LoadLocation(cfg.Timezone)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &Scorer{cfg: cfg, custxRegex: re, loc: loc}, nil\n}\n\nfunc (s *Scorer) Score(ctx context.Context, prov ai.Provider, req types.AccessRequest) (*Result, error) {\n\treason := req.GetRequestReason()\n\thasCUSTX := s.custxRegex.MatchString(reason)\n\tdescLen := len(reason)\n\n\tvar resources []string\n\tfor _, r := range req.GetRequestedResourceIDs() {\n\t\tresources = append(resources, r.Name)\n\t}\n\n\tassessment, err := prov.Assess(ctx, ai.ScoreRequest{\n\t\tUser: req.GetUser(),\n\t\tRoles: req.GetRoles(),\n\t\tResources: resources,\n\t\tReason: reason,\n\t\tHasCUSTXReference: hasCUSTX,\n\t\tDescriptionLength: descLen,\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tcomponents := map[string]int{}\n\tscore := 0\n\n\tif !hasCUSTX {\n\t\tcomponents[\"missing_custx_ticket\"] = 30\n\t\tscore += 30\n\t}\n\tif descLen < 40 {\n\t\tcomponents[\"thin_description\"] = 15\n\t\tscore += 15\n\t}\n\tcomponents[\"description_quality\"] = clamp(assessment.DescriptionQuality, 0, 25)\n\tcomponents[\"privilege_concern\"] = clamp(assessment.PrivilegeConcern, 0, 25)\n\tcomponents[\"ai_anomalies\"] = clamp(assessment.Anomalies, 0, 10)\n\tscore += components[\"description_quality\"] + components[\"privilege_concern\"] + components[\"ai_anomalies\"]\n\n\tif s.isOffHours(time.Now()) {\n\t\tcomponents[\"off_hours\"] = 10\n\t\tscore += 10\n\t}\n\n\tif score > 100 {\n\t\tscore = 100\n\t}\n\n\treturn &Result{\n\t\tScore: score,\n\t\tTier: TierForScore(score),\n\t\tComponents: components,\n\t\tReasoning: assessment.Reasoning,\n\t}, nil\n}\n\nfunc (s *Scorer) isOffHours(t time.Time) bool {\n\tif s.cfg.OffHoursStart == 0 && s.cfg.OffHoursEnd == 0 {\n\t\treturn false\n\t}\n\th := t.In(s.loc).Hour()\n\tstart, end := s.cfg.OffHoursStart, s.cfg.OffHoursEnd\n\tif start <= end {\n\t\treturn h >= start && h < end\n\t}\n\treturn h >= start || h < end\n}\n\nfunc clamp(v, lo, hi int) int {\n\tif v < lo {\n\t\treturn lo\n\t}\n\tif v > hi {\n\t\treturn hi\n\t}\n\treturn v\n}\n","structuredPatch":[],"originalFile":null,"userModified":false},"sourceToolAssistantUUID":"6a7a8032-1289-4be1-82b2-e97e6f7b593b","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"bce514db-a61f-4ca5-9f1f-05dccdab5faa","isSidechain":false,"message":{"model":"claude-opus-4-7","id":"msg_01E3xMLZ7jSzYhBQuaPNUjsM","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01LWfSPxeqA9CkNZy1LyzCKM","name":"Write","input":{"file_path":"/Users/steve.briggs/projects/televibe/jira/itsm.go","content":"package jira\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"regexp\"\n\t\"strings\"\n\t\"time\"\n\n\tgojira \"github.com/andygrunwald/go-jira/v2/cloud\"\n)\n\ntype Config struct {\n\tURL string `toml:\"url\"`\n\tUsername string `toml:\"username\"`\n\tAPIToken string `toml:\"api_token\"`\n\tProject string `toml:\"project\"`\n\tIssueType string `toml:\"issue_type\"`\n\tPollInterval time.Duration `toml:\"poll_interval\"`\n\tApprovedStatus string `toml:\"approved_status\"`\n\tRejectedStatus string `toml:\"rejected_status\"`\n}\n\nfunc (c *Config) ApplyDefaults() {\n\tif c.IssueType == \"\" {\n\t\tc.IssueType = \"Task\"\n\t}\n\tif c.PollInterval == 0 {\n\t\tc.PollInterval = 30 * time.Second\n\t}\n\tif c.ApprovedStatus == \"\" {\n\t\tc.ApprovedStatus = \"Approved\"\n\t}\n\tif c.RejectedStatus == \"\" {\n\t\tc.RejectedStatus = \"Rejected\"\n\t}\n}\n\nfunc (c *Config) Validate() error {\n\tif c.URL == \"\" {\n\t\treturn fmt.Errorf(\"url is required\")\n\t}\n\tif c.Project == \"\" {\n\t\treturn fmt.Errorf(\"project is required\")\n\t}\n\tif c.Username == \"\" || c.APIToken == \"\" {\n\t\treturn fmt.Errorf(\"username and api_token are required\")\n\t}\n\treturn nil\n}\n\ntype Status int\n\nconst (\n\tStatusOpen Status = iota\n\tStatusApproved\n\tStatusRejected\n)\n\nfunc (s Status) String() string {\n\tswitch s {\n\tcase StatusApproved:\n\t\treturn \"approved\"\n\tcase StatusRejected:\n\t\treturn \"rejected\"\n\t}\n\treturn \"open\"\n}\n\ntype TicketInput struct {\n\tRequestID string\n\tUser string\n\tRoles []string\n\tReason string\n\tScore int\n\tTier string\n\tSlang string\n\tComponents map[string]int\n\tAIReasoning string\n}\n\ntype Client struct {\n\tcfg Config\n\tjira *gojira.Client\n\treqIDRE *regexp.Regexp\n}\n\nfunc New(cfg Config) (*Client, error) {\n\ttp := gojira.BasicAuthTransport{Username: cfg.Username, APIToken: cfg.APIToken}\n\tjc, err := gojira.NewClient(cfg.URL, tp.Client())\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &Client{\n\t\tcfg: cfg,\n\t\tjira: jc,\n\t\treqIDRE: regexp.MustCompile(`Teleport Request ID:\\s*([A-Za-z0-9-]+)`),\n\t}, nil\n}\n\nfunc (c *Client) CreateITSMTicket(ctx context.Context, in TicketInput) (string, error) {\n\tsummary := fmt.Sprintf(\"[televibe] Access request %s — %s (%s)\", in.RequestID, in.Tier, in.Slang)\n\tissue := &gojira.Issue{\n\t\tFields: &gojira.IssueFields{\n\t\t\tProject: gojira.Project{Key: c.cfg.Project},\n\t\t\tType: gojira.IssueType{Name: c.cfg.IssueType},\n\t\t\tSummary: summary,\n\t\t\tDescription: buildDescription(in),\n\t\t\tLabels: []string{\"televibe\", \"teleport-access\", \"tier-\" + in.Tier},\n\t\t},\n\t}\n\tcreated, _, err := c.jira.Issue.Create(ctx, issue)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn created.Key, nil\n}\n\nfunc (c *Client) TicketStatus(ctx context.Context, key string) (Status, error) {\n\tissue, _, err := c.jira.Issue.Get(ctx, key, nil)\n\tif err != nil {\n\t\treturn StatusOpen, err\n\t}\n\tif issue.Fields == nil || issue.Fields.Status == nil {\n\t\treturn StatusOpen, nil\n\t}\n\tswitch issue.Fields.Status.Name {\n\tcase c.cfg.ApprovedStatus:\n\t\treturn StatusApproved, nil\n\tcase c.cfg.RejectedStatus:\n\t\treturn StatusRejected, nil\n\t}\n\treturn StatusOpen, nil\n}\n\nfunc (c *Client) ListOpenTeleportTickets(ctx context.Context) (map[string]string, error) {\n\tjql := fmt.Sprintf(`project = %q AND labels = televibe AND status not in (%q, %q)`,\n\t\tc.cfg.Project, c.cfg.ApprovedStatus, c.cfg.RejectedStatus)\n\tissues, _, err := c.jira.Issue.Search(ctx, jql, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tout := map[string]string{}\n\tfor _, iss := range issues {\n\t\tif iss.Fields == nil {\n\t\t\tcontinue\n\t\t}\n\t\tm := c.reqIDRE.FindStringSubmatch(iss.Fields.Description)\n\t\tif len(m) < 2 {\n\t\t\tcontinue\n\t\t}\n\t\tout[m[1]] = iss.Key\n\t}\n\treturn out, nil\n}\n\nfunc buildDescription(in TicketInput) string {\n\tvar sb strings.Builder\n\tsb.WriteString(\"h2. Teleport Access Request Review\\n\\n\")\n\tfmt.Fprintf(&sb, \"* *Teleport Request ID:* %s\\n\", in.RequestID)\n\tfmt.Fprintf(&sb, \"* *Requester:* %s\\n\", in.User)\n\tfmt.Fprintf(&sb, \"* *Roles requested:* %s\\n\", strings.Join(in.Roles, \", \"))\n\tfmt.Fprintf(&sb, \"* *Risk score:* %d\\n\", in.Score)\n\tfmt.Fprintf(&sb, \"* *Risk tier:* %s (%q)\\n\\n\", in.Tier, in.Slang)\n\n\tsb.WriteString(\"h3. Request reason\\n\")\n\tsb.WriteString(\"{code}\\n\")\n\tsb.WriteString(in.Reason)\n\tsb.WriteString(\"\\n{code}\\n\\n\")\n\n\tif len(in.Components) > 0 {\n\t\tsb.WriteString(\"h3. Risk components\\n\")\n\t\tfor k, v := range in.Components {\n\t\t\tfmt.Fprintf(&sb, \"* %s: +%d\\n\", k, v)\n\t\t}\n\t\tsb.WriteString(\"\\n\")\n\t}\n\n\tif in.AIReasoning != \"\" {\n\t\tsb.WriteString(\"h3. AI reasoning\\n\")\n\t\tsb.WriteString(\"{quote}\\n\")\n\t\tsb.WriteString(in.AIReasoning)\n\t\tsb.WriteString(\"\\n{quote}\\n\\n\")\n\t}\n\n\tsb.WriteString(\"h3. SRE action required\\n\")\n\tsb.WriteString(\"Transition this ticket to the configured approved or rejected status to resolve the Teleport access request.\\n\")\n\treturn sb.String()\n}\n"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":53684,"cache_read_input_tokens":14726,"output_tokens":14071,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":53684},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":14071,"cache_read_input_tokens":14726,"cache_creation_input_tokens":53684,"cache_creation":{"ephemeral_5m_input_tokens":53684,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKSwi8moBxLFxH1irrg2","type":"assistant","uuid":"90d69536-c1af-4208-8008-b7c7717b1f7a","timestamp":"2026-04-22T20:35:56.501Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"90d69536-c1af-4208-8008-b7c7717b1f7a","isSidechain":false,"message":{"model":"claude-opus-4-7","id":"msg_01E3xMLZ7jSzYhBQuaPNUjsM","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_011KapkM3dB7BnrYsS69c44J","name":"Write","input":{"file_path":"/Users/steve.briggs/projects/televibe/televibe.toml.example","content":"# televibe — Teleport access plugin with AI risk scoring\n# Copy to /etc/televibe/televibe.toml and fill in.\n\n[teleport]\naddr = \"proxy.example.com:443\"\nidentity_file = \"/var/lib/teleport/televibe.pem\"\n\n[ai]\n# Exactly one of: \"anthropic\", \"bedrock\", \"webhook\"\nprovider = \"anthropic\"\n\n[ai.anthropic]\napi_key = \"sk-ant-...\"\nmodel = \"claude-sonnet-4-6\"\n\n[ai.bedrock]\nregion = \"us-west-2\"\nmodel_id = \"us.anthropic.claude-sonnet-4-6-v1:0\"\n\n[ai.webhook]\nurl = \"https://chat.internal/score\"\nauth_header = \"Bearer replace-me\"\n# [ai.webhook.headers]\n# X-Tenant = \"televibe\"\n\n[jira]\nurl = \"https://example.atlassian.net\"\nusername = \"bot@example.com\"\napi_token = \"replace-me\"\nproject = \"ITSM\"\nissue_type = \"Task\"\npoll_interval = \"30s\"\napproved_status = \"Approved\"\nrejected_status = \"Rejected\"\n\n[risk]\n# Requests scoring >= ticket_threshold get an ITSM ticket (and stay PENDING).\n# Anything below is auto-approved as \"no cap\".\nticket_threshold = 25\ncustx_pattern = 'CUSTX-\\d+'\n# Off-hours window applies a +10 risk bump. Wraps midnight when start > end.\noff_hours_start = 18\noff_hours_end = 8\ntimezone = \"America/New_York\"\n\n[log]\nlevel = \"info\"\n"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":53684,"cache_read_input_tokens":14726,"output_tokens":14071,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":53684},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":14071,"cache_read_input_tokens":14726,"cache_creation_input_tokens":53684,"cache_creation":{"ephemeral_5m_input_tokens":53684,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKSwi8moBxLFxH1irrg2","type":"assistant","uuid":"a2b9e979-f33f-4715-94a3-ca1bb2427474","timestamp":"2026-04-22T20:36:02.935Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"90d69536-c1af-4208-8008-b7c7717b1f7a","isSidechain":false,"promptId":"1a74d92d-87ee-4b9a-b7b6-9d69d238ae5a","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01LWfSPxeqA9CkNZy1LyzCKM","type":"tool_result","content":"File created successfully at: /Users/steve.briggs/projects/televibe/jira/itsm.go"}]},"uuid":"5a6a8325-4092-437c-921a-2db51e912aaa","timestamp":"2026-04-22T20:36:06.430Z","toolUseResult":{"type":"create","filePath":"/Users/steve.briggs/projects/televibe/jira/itsm.go","content":"package jira\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"regexp\"\n\t\"strings\"\n\t\"time\"\n\n\tgojira \"github.com/andygrunwald/go-jira/v2/cloud\"\n)\n\ntype Config struct {\n\tURL string `toml:\"url\"`\n\tUsername string `toml:\"username\"`\n\tAPIToken string `toml:\"api_token\"`\n\tProject string `toml:\"project\"`\n\tIssueType string `toml:\"issue_type\"`\n\tPollInterval time.Duration `toml:\"poll_interval\"`\n\tApprovedStatus string `toml:\"approved_status\"`\n\tRejectedStatus string `toml:\"rejected_status\"`\n}\n\nfunc (c *Config) ApplyDefaults() {\n\tif c.IssueType == \"\" {\n\t\tc.IssueType = \"Task\"\n\t}\n\tif c.PollInterval == 0 {\n\t\tc.PollInterval = 30 * time.Second\n\t}\n\tif c.ApprovedStatus == \"\" {\n\t\tc.ApprovedStatus = \"Approved\"\n\t}\n\tif c.RejectedStatus == \"\" {\n\t\tc.RejectedStatus = \"Rejected\"\n\t}\n}\n\nfunc (c *Config) Validate() error {\n\tif c.URL == \"\" {\n\t\treturn fmt.Errorf(\"url is required\")\n\t}\n\tif c.Project == \"\" {\n\t\treturn fmt.Errorf(\"project is required\")\n\t}\n\tif c.Username == \"\" || c.APIToken == \"\" {\n\t\treturn fmt.Errorf(\"username and api_token are required\")\n\t}\n\treturn nil\n}\n\ntype Status int\n\nconst (\n\tStatusOpen Status = iota\n\tStatusApproved\n\tStatusRejected\n)\n\nfunc (s Status) String() string {\n\tswitch s {\n\tcase StatusApproved:\n\t\treturn \"approved\"\n\tcase StatusRejected:\n\t\treturn \"rejected\"\n\t}\n\treturn \"open\"\n}\n\ntype TicketInput struct {\n\tRequestID string\n\tUser string\n\tRoles []string\n\tReason string\n\tScore int\n\tTier string\n\tSlang string\n\tComponents map[string]int\n\tAIReasoning string\n}\n\ntype Client struct {\n\tcfg Config\n\tjira *gojira.Client\n\treqIDRE *regexp.Regexp\n}\n\nfunc New(cfg Config) (*Client, error) {\n\ttp := gojira.BasicAuthTransport{Username: cfg.Username, APIToken: cfg.APIToken}\n\tjc, err := gojira.NewClient(cfg.URL, tp.Client())\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &Client{\n\t\tcfg: cfg,\n\t\tjira: jc,\n\t\treqIDRE: regexp.MustCompile(`Teleport Request ID:\\s*([A-Za-z0-9-]+)`),\n\t}, nil\n}\n\nfunc (c *Client) CreateITSMTicket(ctx context.Context, in TicketInput) (string, error) {\n\tsummary := fmt.Sprintf(\"[televibe] Access request %s — %s (%s)\", in.RequestID, in.Tier, in.Slang)\n\tissue := &gojira.Issue{\n\t\tFields: &gojira.IssueFields{\n\t\t\tProject: gojira.Project{Key: c.cfg.Project},\n\t\t\tType: gojira.IssueType{Name: c.cfg.IssueType},\n\t\t\tSummary: summary,\n\t\t\tDescription: buildDescription(in),\n\t\t\tLabels: []string{\"televibe\", \"teleport-access\", \"tier-\" + in.Tier},\n\t\t},\n\t}\n\tcreated, _, err := c.jira.Issue.Create(ctx, issue)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn created.Key, nil\n}\n\nfunc (c *Client) TicketStatus(ctx context.Context, key string) (Status, error) {\n\tissue, _, err := c.jira.Issue.Get(ctx, key, nil)\n\tif err != nil {\n\t\treturn StatusOpen, err\n\t}\n\tif issue.Fields == nil || issue.Fields.Status == nil {\n\t\treturn StatusOpen, nil\n\t}\n\tswitch issue.Fields.Status.Name {\n\tcase c.cfg.ApprovedStatus:\n\t\treturn StatusApproved, nil\n\tcase c.cfg.RejectedStatus:\n\t\treturn StatusRejected, nil\n\t}\n\treturn StatusOpen, nil\n}\n\nfunc (c *Client) ListOpenTeleportTickets(ctx context.Context) (map[string]string, error) {\n\tjql := fmt.Sprintf(`project = %q AND labels = televibe AND status not in (%q, %q)`,\n\t\tc.cfg.Project, c.cfg.ApprovedStatus, c.cfg.RejectedStatus)\n\tissues, _, err := c.jira.Issue.Search(ctx, jql, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tout := map[string]string{}\n\tfor _, iss := range issues {\n\t\tif iss.Fields == nil {\n\t\t\tcontinue\n\t\t}\n\t\tm := c.reqIDRE.FindStringSubmatch(iss.Fields.Description)\n\t\tif len(m) < 2 {\n\t\t\tcontinue\n\t\t}\n\t\tout[m[1]] = iss.Key\n\t}\n\treturn out, nil\n}\n\nfunc buildDescription(in TicketInput) string {\n\tvar sb strings.Builder\n\tsb.WriteString(\"h2. Teleport Access Request Review\\n\\n\")\n\tfmt.Fprintf(&sb, \"* *Teleport Request ID:* %s\\n\", in.RequestID)\n\tfmt.Fprintf(&sb, \"* *Requester:* %s\\n\", in.User)\n\tfmt.Fprintf(&sb, \"* *Roles requested:* %s\\n\", strings.Join(in.Roles, \", \"))\n\tfmt.Fprintf(&sb, \"* *Risk score:* %d\\n\", in.Score)\n\tfmt.Fprintf(&sb, \"* *Risk tier:* %s (%q)\\n\\n\", in.Tier, in.Slang)\n\n\tsb.WriteString(\"h3. Request reason\\n\")\n\tsb.WriteString(\"{code}\\n\")\n\tsb.WriteString(in.Reason)\n\tsb.WriteString(\"\\n{code}\\n\\n\")\n\n\tif len(in.Components) > 0 {\n\t\tsb.WriteString(\"h3. Risk components\\n\")\n\t\tfor k, v := range in.Components {\n\t\t\tfmt.Fprintf(&sb, \"* %s: +%d\\n\", k, v)\n\t\t}\n\t\tsb.WriteString(\"\\n\")\n\t}\n\n\tif in.AIReasoning != \"\" {\n\t\tsb.WriteString(\"h3. AI reasoning\\n\")\n\t\tsb.WriteString(\"{quote}\\n\")\n\t\tsb.WriteString(in.AIReasoning)\n\t\tsb.WriteString(\"\\n{quote}\\n\\n\")\n\t}\n\n\tsb.WriteString(\"h3. SRE action required\\n\")\n\tsb.WriteString(\"Transition this ticket to the configured approved or rejected status to resolve the Teleport access request.\\n\")\n\treturn sb.String()\n}\n","structuredPatch":[],"originalFile":null,"userModified":false},"sourceToolAssistantUUID":"90d69536-c1af-4208-8008-b7c7717b1f7a","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"type":"last-prompt","lastPrompt":"1. one-at-a-time, 2. yes, when a ticket is created the teleport request stays pending until it is approved by an SRE member, 3. yup this is good, 4 toml is fine","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87"}
|
||
{"type":"permission-mode","permissionMode":"default","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87"}
|
||
{"type":"file-history-snapshot","messageId":"a2b9e979-f33f-4715-94a3-ca1bb2427474","snapshot":{"messageId":"0fe55191-25a9-4fa5-9d5d-c1df5540b425","trackedFileBackups":{"go.mod":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:08.139Z"},"cmd/televibe/main.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:24.995Z"},"config.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:27.227Z"},"app.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:26.810Z"},"ai/provider.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:28.583Z"},"ai/anthropic.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:29.926Z"},"ai/bedrock.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:31.780Z"},"ai/webhook.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:32.779Z"},"risk/risk.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:33.829Z"},"risk/score.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:35.440Z"},"jira/itsm.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:36:06.428Z"},"televibe.toml.example":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:36:14.910Z"}},"timestamp":"2026-04-22T20:27:14.395Z"},"isSnapshotUpdate":true}
|
||
{"parentUuid":"a2b9e979-f33f-4715-94a3-ca1bb2427474","isSidechain":false,"promptId":"1a74d92d-87ee-4b9a-b7b6-9d69d238ae5a","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_011KapkM3dB7BnrYsS69c44J","type":"tool_result","content":"File created successfully at: /Users/steve.briggs/projects/televibe/televibe.toml.example"}]},"uuid":"5473e635-3132-4609-a7ea-8e5db3820bdb","timestamp":"2026-04-22T20:36:14.913Z","toolUseResult":{"type":"create","filePath":"/Users/steve.briggs/projects/televibe/televibe.toml.example","content":"# televibe — Teleport access plugin with AI risk scoring\n# Copy to /etc/televibe/televibe.toml and fill in.\n\n[teleport]\naddr = \"proxy.example.com:443\"\nidentity_file = \"/var/lib/teleport/televibe.pem\"\n\n[ai]\n# Exactly one of: \"anthropic\", \"bedrock\", \"webhook\"\nprovider = \"anthropic\"\n\n[ai.anthropic]\napi_key = \"sk-ant-...\"\nmodel = \"claude-sonnet-4-6\"\n\n[ai.bedrock]\nregion = \"us-west-2\"\nmodel_id = \"us.anthropic.claude-sonnet-4-6-v1:0\"\n\n[ai.webhook]\nurl = \"https://chat.internal/score\"\nauth_header = \"Bearer replace-me\"\n# [ai.webhook.headers]\n# X-Tenant = \"televibe\"\n\n[jira]\nurl = \"https://example.atlassian.net\"\nusername = \"bot@example.com\"\napi_token = \"replace-me\"\nproject = \"ITSM\"\nissue_type = \"Task\"\npoll_interval = \"30s\"\napproved_status = \"Approved\"\nrejected_status = \"Rejected\"\n\n[risk]\n# Requests scoring >= ticket_threshold get an ITSM ticket (and stay PENDING).\n# Anything below is auto-approved as \"no cap\".\nticket_threshold = 25\ncustx_pattern = 'CUSTX-\\d+'\n# Off-hours window applies a +10 risk bump. Wraps midnight when start > end.\noff_hours_start = 18\noff_hours_end = 8\ntimezone = \"America/New_York\"\n\n[log]\nlevel = \"info\"\n","structuredPatch":[],"originalFile":null,"userModified":false},"sourceToolAssistantUUID":"a2b9e979-f33f-4715-94a3-ca1bb2427474","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"5473e635-3132-4609-a7ea-8e5db3820bdb","isSidechain":false,"attachment":{"type":"task_reminder","content":[],"itemCount":0},"type":"attachment","uuid":"33b258c9-4099-4f1c-82bf-829f2f3698f3","timestamp":"2026-04-22T20:36:14.915Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"type":"file-history-snapshot","messageId":"f7be565e-0b0c-401d-819d-947b9ef2645e","snapshot":{"messageId":"0fe55191-25a9-4fa5-9d5d-c1df5540b425","trackedFileBackups":{"go.mod":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:08.139Z"},"cmd/televibe/main.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:24.995Z"},"config.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:27.227Z"},"app.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:26.810Z"},"ai/provider.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:28.583Z"},"ai/anthropic.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:29.926Z"},"ai/bedrock.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:31.780Z"},"ai/webhook.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:32.779Z"},"risk/risk.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:33.829Z"},"risk/score.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:35.440Z"},"jira/itsm.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:36:06.428Z"},"televibe.toml.example":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:36:14.910Z"},"/Users/steve.briggs/.claude/projects/-Users-steve-briggs-projects-televibe/memory/project_televibe.md":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:36:36.361Z"}},"timestamp":"2026-04-22T20:27:14.395Z"},"isSnapshotUpdate":true}
|
||
{"type":"file-history-snapshot","messageId":"cd8aa354-7aed-43a6-9d2b-32c6431ca3eb","snapshot":{"messageId":"0fe55191-25a9-4fa5-9d5d-c1df5540b425","trackedFileBackups":{"go.mod":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:08.139Z"},"cmd/televibe/main.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:24.995Z"},"config.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:27.227Z"},"app.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:26.810Z"},"ai/provider.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:28.583Z"},"ai/anthropic.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:29.926Z"},"ai/bedrock.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:31.780Z"},"ai/webhook.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:32.779Z"},"risk/risk.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:33.829Z"},"risk/score.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:35.440Z"},"jira/itsm.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:36:06.428Z"},"televibe.toml.example":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:36:14.910Z"},"/Users/steve.briggs/.claude/projects/-Users-steve-briggs-projects-televibe/memory/project_televibe.md":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:36:36.361Z"},"/Users/steve.briggs/.claude/projects/-Users-steve-briggs-projects-televibe/memory/user_role.md":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:36:41.064Z"}},"timestamp":"2026-04-22T20:27:14.395Z"},"isSnapshotUpdate":true}
|
||
{"parentUuid":"33b258c9-4099-4f1c-82bf-829f2f3698f3","isSidechain":false,"message":{"model":"claude-opus-4-7","id":"msg_01X32s1jnt3xzuSsk7fh5Grp","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"","signature":"EoQDClkIDBgCKkDOo2xLzHJKaS9eeT6m6cAyHSjIsZxf0N7/cTvqGHsfKLFyslIWMb9L7zUrOMELVEeJXGk5to6sAaQIV+E9uLKqMg9jbGF1ZGUtb3B1cy00LTc4ABIMq049mTLEtJ+eL2tCGgzo0N0DIYOarpuXzcAiMJ6NvZNFN3A4OLCy2KOK9X3OA8KBzFfQbaEiNuQ35bpwU59Pz/dX0oNhnEONXdwgwCrYAaAJdrLir0lw9cHRP7wsrMxb/mQmmqArN26ppSQNUOvXk4ZGXSggOEsw7Yg7jnbigLdB4l9rqIAWhGtVBZ/xqBM/0XZ8HSrPSmvO28TMDvp+Iv2VoaxxmKf2gZlehHzvHJIST8pNWh13VqtK+iXnj7pDc3IukR4Xzpwet4zfe091FotQrG3trQeRgV/ofkaGHisCa0IQbXRrHFxqKVC4CnoQWNljqxOL9lXAj/9mZjp2ndKClGse6lYk1rozNYFe5bqNUYFm1HKUeBTSYDyzWIhC5HK3IDAVYhgB"}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":68601,"cache_read_input_tokens":14726,"output_tokens":1637,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":68601},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":1637,"cache_read_input_tokens":14726,"cache_creation_input_tokens":68601,"cache_creation":{"ephemeral_5m_input_tokens":68601,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKT7YsC5G1229CE5gdyf","type":"assistant","uuid":"b759aba7-c80d-421c-b7f0-ccdc8fb695f7","timestamp":"2026-04-22T20:36:19.393Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"b759aba7-c80d-421c-b7f0-ccdc8fb695f7","isSidechain":false,"message":{"model":"claude-opus-4-7","id":"msg_01X32s1jnt3xzuSsk7fh5Grp","type":"message","role":"assistant","content":[{"type":"text","text":"All 12 files written. Verifying structure and saving project context."}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":68601,"cache_read_input_tokens":14726,"output_tokens":1637,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":68601},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":1637,"cache_read_input_tokens":14726,"cache_creation_input_tokens":68601,"cache_creation":{"ephemeral_5m_input_tokens":68601,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKT7YsC5G1229CE5gdyf","type":"assistant","uuid":"f915f18e-ab46-4514-b8d0-40b2f2b1fdac","timestamp":"2026-04-22T20:36:19.968Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"f915f18e-ab46-4514-b8d0-40b2f2b1fdac","isSidechain":false,"message":{"model":"claude-opus-4-7","id":"msg_01X32s1jnt3xzuSsk7fh5Grp","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01La1EMvecCb71qVt8apNjF8","name":"Bash","input":{"command":"find /Users/steve.briggs/projects/televibe -type f | sort && echo '---' && wc -l /Users/steve.briggs/projects/televibe/{config.go,app.go,ai/*.go,risk/*.go,jira/*.go,cmd/televibe/*.go}","description":"Verify all files and line counts"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":68601,"cache_read_input_tokens":14726,"output_tokens":1637,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":68601},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":1637,"cache_read_input_tokens":14726,"cache_creation_input_tokens":68601,"cache_creation":{"ephemeral_5m_input_tokens":68601,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKT7YsC5G1229CE5gdyf","type":"assistant","uuid":"1ca43de2-5d8a-4d75-b813-2d77dcf7a1db","timestamp":"2026-04-22T20:36:21.392Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"1ca43de2-5d8a-4d75-b813-2d77dcf7a1db","isSidechain":false,"promptId":"1a74d92d-87ee-4b9a-b7b6-9d69d238ae5a","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01La1EMvecCb71qVt8apNjF8","type":"tool_result","content":"/Users/steve.briggs/projects/televibe/ai/anthropic.go\n/Users/steve.briggs/projects/televibe/ai/bedrock.go\n/Users/steve.briggs/projects/televibe/ai/provider.go\n/Users/steve.briggs/projects/televibe/ai/webhook.go\n/Users/steve.briggs/projects/televibe/app.go\n/Users/steve.briggs/projects/televibe/cmd/televibe/main.go\n/Users/steve.briggs/projects/televibe/config.go\n/Users/steve.briggs/projects/televibe/go.mod\n/Users/steve.briggs/projects/televibe/jira/itsm.go\n/Users/steve.briggs/projects/televibe/risk/risk.go\n/Users/steve.briggs/projects/televibe/risk/score.go\n/Users/steve.briggs/projects/televibe/televibe.toml.example\n---\n 69 /Users/steve.briggs/projects/televibe/config.go\n 238 /Users/steve.briggs/projects/televibe/app.go\n 80 /Users/steve.briggs/projects/televibe/ai/anthropic.go\n 70 /Users/steve.briggs/projects/televibe/ai/bedrock.go\n 115 /Users/steve.briggs/projects/televibe/ai/provider.go\n 67 /Users/steve.briggs/projects/televibe/ai/webhook.go\n 44 /Users/steve.briggs/projects/televibe/risk/risk.go\n 113 /Users/steve.briggs/projects/televibe/risk/score.go\n 189 /Users/steve.briggs/projects/televibe/jira/itsm.go\n 56 /Users/steve.briggs/projects/televibe/cmd/televibe/main.go\n 1041 total","is_error":false}]},"uuid":"96d42424-18d7-490f-a752-316cd70df5bb","timestamp":"2026-04-22T20:36:24.096Z","toolUseResult":{"stdout":"/Users/steve.briggs/projects/televibe/ai/anthropic.go\n/Users/steve.briggs/projects/televibe/ai/bedrock.go\n/Users/steve.briggs/projects/televibe/ai/provider.go\n/Users/steve.briggs/projects/televibe/ai/webhook.go\n/Users/steve.briggs/projects/televibe/app.go\n/Users/steve.briggs/projects/televibe/cmd/televibe/main.go\n/Users/steve.briggs/projects/televibe/config.go\n/Users/steve.briggs/projects/televibe/go.mod\n/Users/steve.briggs/projects/televibe/jira/itsm.go\n/Users/steve.briggs/projects/televibe/risk/risk.go\n/Users/steve.briggs/projects/televibe/risk/score.go\n/Users/steve.briggs/projects/televibe/televibe.toml.example\n---\n 69 /Users/steve.briggs/projects/televibe/config.go\n 238 /Users/steve.briggs/projects/televibe/app.go\n 80 /Users/steve.briggs/projects/televibe/ai/anthropic.go\n 70 /Users/steve.briggs/projects/televibe/ai/bedrock.go\n 115 /Users/steve.briggs/projects/televibe/ai/provider.go\n 67 /Users/steve.briggs/projects/televibe/ai/webhook.go\n 44 /Users/steve.briggs/projects/televibe/risk/risk.go\n 113 /Users/steve.briggs/projects/televibe/risk/score.go\n 189 /Users/steve.briggs/projects/televibe/jira/itsm.go\n 56 /Users/steve.briggs/projects/televibe/cmd/televibe/main.go\n 1041 total","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false},"sourceToolAssistantUUID":"1ca43de2-5d8a-4d75-b813-2d77dcf7a1db","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"96d42424-18d7-490f-a752-316cd70df5bb","isSidechain":false,"message":{"model":"claude-opus-4-7","id":"msg_01X32s1jnt3xzuSsk7fh5Grp","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01DVxcoraNTfGUJUSfhq4FbV","name":"Write","input":{"file_path":"/Users/steve.briggs/.claude/projects/-Users-steve-briggs-projects-televibe/memory/project_televibe.md","content":"---\nname: televibe project\ndescription: Greenfield Teleport access plugin built in Go that AI-risk-scores access requests and conditionally files ITSM Jira tickets\ntype: project\n---\n\ntelevibe is a new Go-based Teleport access plugin (modeled on the official Jira access plugin) living at /Users/steve.briggs/projects/televibe. Initialized 2026-04-22.\n\n**What it does:** watches Teleport access requests; sends request reason + roles to a configurable AI provider (Anthropic direct API, AWS Bedrock, or generic webhook — one at a time) for a risk assessment; combines AI scores with structural checks (CUSTX-### ticket regex in description, description length, off-hours timing) into a 0-100 score; maps to Gen-Z slang tiers (no cap / sus / mad sus fr / straight L, touch grass).\n\n**Behavior:** below configurable `ticket_threshold` → auto-approve via `SubmitAccessReview`. At or above → create ticket in configurable Jira project (defaults to \"ITSM\") and hold the Teleport request in PENDING. A poller reconciles ITSM ticket status to Teleport approval/denial — an SRE transitioning the ITSM ticket to the approved or rejected status drives the Teleport decision.\n\n**Why:** User wants to gate privileged access through AI review + SRE-controlled Jira workflow, with low-risk requests bypassing the Jira overhead entirely.\n\n**How to apply:** When extending or debugging, remember:\n- Module path is plain `televibe` (no github prefix yet) — user must run `go mod tidy` to pull deps.\n- Top-level `Config` in config.go composes per-package `Config` types from ai/, risk/, jira/.\n- Anthropic provider uses direct HTTP (not the SDK) with prompt caching on the system block.\n- State recovery across restarts is via `jira.ListOpenTeleportTickets` (JQL search for `labels = televibe`), parsing Teleport request ID out of the ticket description.\n- ITSM ticket description uses Jira wiki markup, not ADF — will need adjustment if targeting Jira Cloud REST v3.\n"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":68601,"cache_read_input_tokens":14726,"output_tokens":1637,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":68601},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":1637,"cache_read_input_tokens":14726,"cache_creation_input_tokens":68601,"cache_creation":{"ephemeral_5m_input_tokens":68601,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKT7YsC5G1229CE5gdyf","type":"assistant","uuid":"f7be565e-0b0c-401d-819d-947b9ef2645e","timestamp":"2026-04-22T20:36:36.354Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"f7be565e-0b0c-401d-819d-947b9ef2645e","isSidechain":false,"promptId":"1a74d92d-87ee-4b9a-b7b6-9d69d238ae5a","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01DVxcoraNTfGUJUSfhq4FbV","type":"tool_result","content":"File created successfully at: /Users/steve.briggs/.claude/projects/-Users-steve-briggs-projects-televibe/memory/project_televibe.md"}]},"uuid":"1d10f26f-19b5-4576-a0f7-efee2641d146","timestamp":"2026-04-22T20:36:36.362Z","toolUseResult":{"type":"create","filePath":"/Users/steve.briggs/.claude/projects/-Users-steve-briggs-projects-televibe/memory/project_televibe.md","content":"---\nname: televibe project\ndescription: Greenfield Teleport access plugin built in Go that AI-risk-scores access requests and conditionally files ITSM Jira tickets\ntype: project\noriginSessionId: b94f12fe-9fb8-45ba-8dd5-65f49e81db87\n---\ntelevibe is a new Go-based Teleport access plugin (modeled on the official Jira access plugin) living at /Users/steve.briggs/projects/televibe. Initialized 2026-04-22.\n\n**What it does:** watches Teleport access requests; sends request reason + roles to a configurable AI provider (Anthropic direct API, AWS Bedrock, or generic webhook — one at a time) for a risk assessment; combines AI scores with structural checks (CUSTX-### ticket regex in description, description length, off-hours timing) into a 0-100 score; maps to Gen-Z slang tiers (no cap / sus / mad sus fr / straight L, touch grass).\n\n**Behavior:** below configurable `ticket_threshold` → auto-approve via `SubmitAccessReview`. At or above → create ticket in configurable Jira project (defaults to \"ITSM\") and hold the Teleport request in PENDING. A poller reconciles ITSM ticket status to Teleport approval/denial — an SRE transitioning the ITSM ticket to the approved or rejected status drives the Teleport decision.\n\n**Why:** User wants to gate privileged access through AI review + SRE-controlled Jira workflow, with low-risk requests bypassing the Jira overhead entirely.\n\n**How to apply:** When extending or debugging, remember:\n- Module path is plain `televibe` (no github prefix yet) — user must run `go mod tidy` to pull deps.\n- Top-level `Config` in config.go composes per-package `Config` types from ai/, risk/, jira/.\n- Anthropic provider uses direct HTTP (not the SDK) with prompt caching on the system block.\n- State recovery across restarts is via `jira.ListOpenTeleportTickets` (JQL search for `labels = televibe`), parsing Teleport request ID out of the ticket description.\n- ITSM ticket description uses Jira wiki markup, not ADF — will need adjustment if targeting Jira Cloud REST v3.\n","structuredPatch":[],"originalFile":null,"userModified":false},"sourceToolAssistantUUID":"f7be565e-0b0c-401d-819d-947b9ef2645e","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"1d10f26f-19b5-4576-a0f7-efee2641d146","isSidechain":false,"message":{"model":"claude-opus-4-7","id":"msg_01X32s1jnt3xzuSsk7fh5Grp","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01GiXpmzoC9WZwuGz8qrkZ27","name":"Write","input":{"file_path":"/Users/steve.briggs/.claude/projects/-Users-steve-briggs-projects-televibe/memory/user_role.md","content":"---\nname: user role\ndescription: Steve Briggs works at Immuta, comfortable with Go/Teleport/infra-security tooling\ntype: user\n---\n\nUser's email is steve.briggs@immuta.com. Starting a greenfield Teleport access plugin (televibe) from scratch — implies platform/SRE/security-engineering context and comfort with Go, Teleport access workflows, and Jira automation. Answers design questions decisively and in shorthand (e.g., \"yup this is good\", \"toml is fine\") — responds well to terse proposals with clear defaults rather than exhaustive options.\n"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":68601,"cache_read_input_tokens":14726,"output_tokens":1637,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":68601},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":1637,"cache_read_input_tokens":14726,"cache_creation_input_tokens":68601,"cache_creation":{"ephemeral_5m_input_tokens":68601,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKT7YsC5G1229CE5gdyf","type":"assistant","uuid":"cd8aa354-7aed-43a6-9d2b-32c6431ca3eb","timestamp":"2026-04-22T20:36:41.057Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"cd8aa354-7aed-43a6-9d2b-32c6431ca3eb","isSidechain":false,"promptId":"1a74d92d-87ee-4b9a-b7b6-9d69d238ae5a","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01GiXpmzoC9WZwuGz8qrkZ27","type":"tool_result","content":"File created successfully at: /Users/steve.briggs/.claude/projects/-Users-steve-briggs-projects-televibe/memory/user_role.md"}]},"uuid":"e43b3e86-8598-429a-a532-ff0973a6babf","timestamp":"2026-04-22T20:36:41.066Z","toolUseResult":{"type":"create","filePath":"/Users/steve.briggs/.claude/projects/-Users-steve-briggs-projects-televibe/memory/user_role.md","content":"---\nname: user role\ndescription: Steve Briggs works at Immuta, comfortable with Go/Teleport/infra-security tooling\ntype: user\noriginSessionId: b94f12fe-9fb8-45ba-8dd5-65f49e81db87\n---\nUser's email is steve.briggs@immuta.com. Starting a greenfield Teleport access plugin (televibe) from scratch — implies platform/SRE/security-engineering context and comfort with Go, Teleport access workflows, and Jira automation. Answers design questions decisively and in shorthand (e.g., \"yup this is good\", \"toml is fine\") — responds well to terse proposals with clear defaults rather than exhaustive options.\n","structuredPatch":[],"originalFile":null,"userModified":false},"sourceToolAssistantUUID":"cd8aa354-7aed-43a6-9d2b-32c6431ca3eb","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"e43b3e86-8598-429a-a532-ff0973a6babf","isSidechain":false,"message":{"model":"claude-opus-4-7","id":"msg_01X32s1jnt3xzuSsk7fh5Grp","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_011a3qdKMgUsA7biujneRNAZ","name":"Write","input":{"file_path":"/Users/steve.briggs/.claude/projects/-Users-steve-briggs-projects-televibe/memory/MEMORY.md","content":"- [televibe project](project_televibe.md) — greenfield Go Teleport access plugin with AI risk scoring + conditional ITSM ticketing\n- [user role](user_role.md) — Steve Briggs @ Immuta; platform/security-eng context, Go-fluent, prefers terse decisive proposals\n"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":68601,"cache_read_input_tokens":14726,"output_tokens":1637,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":68601},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":1637,"cache_read_input_tokens":14726,"cache_creation_input_tokens":68601,"cache_creation":{"ephemeral_5m_input_tokens":68601,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKT7YsC5G1229CE5gdyf","type":"assistant","uuid":"6638a7b4-837a-45b4-9e67-febe72d1bdbd","timestamp":"2026-04-22T20:36:42.935Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"type":"file-history-snapshot","messageId":"6638a7b4-837a-45b4-9e67-febe72d1bdbd","snapshot":{"messageId":"0fe55191-25a9-4fa5-9d5d-c1df5540b425","trackedFileBackups":{"go.mod":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:08.139Z"},"cmd/televibe/main.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:24.995Z"},"config.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:34:27.227Z"},"app.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:26.810Z"},"ai/provider.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:28.583Z"},"ai/anthropic.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:29.926Z"},"ai/bedrock.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:31.780Z"},"ai/webhook.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:32.779Z"},"risk/risk.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:33.829Z"},"risk/score.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:35:35.440Z"},"jira/itsm.go":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:36:06.428Z"},"televibe.toml.example":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:36:14.910Z"},"/Users/steve.briggs/.claude/projects/-Users-steve-briggs-projects-televibe/memory/project_televibe.md":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:36:36.361Z"},"/Users/steve.briggs/.claude/projects/-Users-steve-briggs-projects-televibe/memory/user_role.md":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:36:41.064Z"},"/Users/steve.briggs/.claude/projects/-Users-steve-briggs-projects-televibe/memory/MEMORY.md":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:36:42.961Z"}},"timestamp":"2026-04-22T20:27:14.395Z"},"isSnapshotUpdate":true}
|
||
{"parentUuid":"6638a7b4-837a-45b4-9e67-febe72d1bdbd","isSidechain":false,"promptId":"1a74d92d-87ee-4b9a-b7b6-9d69d238ae5a","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_011a3qdKMgUsA7biujneRNAZ","type":"tool_result","content":"File created successfully at: /Users/steve.briggs/.claude/projects/-Users-steve-briggs-projects-televibe/memory/MEMORY.md"}]},"uuid":"7eea7e71-58b3-4d29-a4ad-3f00cba6836f","timestamp":"2026-04-22T20:36:42.963Z","toolUseResult":{"type":"create","filePath":"/Users/steve.briggs/.claude/projects/-Users-steve-briggs-projects-televibe/memory/MEMORY.md","content":"- [televibe project](project_televibe.md) — greenfield Go Teleport access plugin with AI risk scoring + conditional ITSM ticketing\n- [user role](user_role.md) — Steve Briggs @ Immuta; platform/security-eng context, Go-fluent, prefers terse decisive proposals\n","structuredPatch":[],"originalFile":null,"userModified":false},"sourceToolAssistantUUID":"6638a7b4-837a-45b4-9e67-febe72d1bdbd","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"7eea7e71-58b3-4d29-a4ad-3f00cba6836f","isSidechain":false,"message":{"model":"claude-opus-4-7","id":"msg_01KTBzsbFPC36Z1PGq2P8KQv","type":"message","role":"assistant","content":[{"type":"text","text":"Scaffolded. ~1040 lines across 12 files.\n\n## What's there\n\n```\ntelevibe/\n├── go.mod # module televibe (run `go mod tidy` to fetch deps)\n├── cmd/televibe/main.go # entry point, signal handling, JSON slog\n├── config.go # top-level TOML config + validation\n├── app.go # watcher loop + ITSM poller + handler (238 lines — the meat)\n├── ai/\n│ ├── provider.go # Provider iface, factory, shared prompt, assessment parser\n│ ├── anthropic.go # direct HTTP, system prompt cached (ephemeral)\n│ ├── bedrock.go # aws-sdk-go-v2 InvokeModel against Claude-on-Bedrock\n│ └── webhook.go # generic POST for ChatGPT/n8n/whatever\n├── risk/\n│ ├── risk.go # tier table: no cap → sus → mad sus fr → straight L, touch grass\n│ └── score.go # combines structural checks + AI assessment\n├── jira/itsm.go # create, poll-status, JQL rehydrate on restart\n└── televibe.toml.example\n```\n\n## How the flow runs\n\n1. `main.go` loads TOML → `App.Run`\n2. `rehydrate()` queries ITSM for open `labels = televibe` tickets, pulls the Teleport request ID out of each description, rebuilds the held-request map (so restarts don't double-file)\n3. Teleport watcher sees new `PENDING` → `handleRequest` skips if already held → scores\n4. `risk.Scorer` applies deterministic signals (missing `CUSTX-\\d+`: +30, short description: +15, off-hours: +10) + clamped AI signals (desc quality ≤25, privilege concern ≤25, anomalies ≤10) → tier lookup\n5. Score `<` `risk.ticket_threshold` → `SubmitAccessReview(APPROVED)` with slang in the reason. Else → file ITSM ticket, cache `requestID → ticketKey`, leave Teleport PENDING\n6. Poller ticks every `jira.poll_interval`, reads each held ticket's status, and flips Teleport to APPROVED/DENIED when an SRE transitions the ITSM ticket to the configured approved/rejected status\n\n## Caveats you'll hit\n\n- **Dependencies unpinned.** `go.mod` is bare — run `go mod tidy` to pull Teleport API, `andygrunwald/go-jira/v2/cloud`, `aws-sdk-go-v2`, `pelletier/go-toml/v2`, `golang.org/x/sync`. A couple of their API signatures may have drifted since my knowledge cutoff; if `go build` fails, errors will point at exact spots (most likely: Teleport watcher or `SubmitAccessReview` return types, and go-jira v2 `BasicAuthTransport` field name).\n- **Jira description format.** I used wiki markup. Modern Jira Cloud REST v3 wants ADF (JSON). The v2 library you'll pull uses REST v2 which still accepts wiki, so you're probably fine — verify on first ticket.\n- **Bedrock model ID.** Defaulted to `us.anthropic.claude-sonnet-4-6-v1:0`. Confirm availability in your region or override in config.\n- **Module path.** Set to plain `televibe`. If you push to GitHub, change the module line and import paths accordingly (simple `sed`).\n\nNext step on your end: `cd televibe && go mod tidy && go build ./...`, fix whatever API drift surfaces, then point it at a test Teleport cluster."}],"stop_reason":"end_turn","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":2513,"cache_read_input_tokens":83327,"output_tokens":1249,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":2513},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":1249,"cache_read_input_tokens":83327,"cache_creation_input_tokens":2513,"cache_creation":{"ephemeral_5m_input_tokens":2513,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKT9cYkMQ9zYc9f6U4oa","type":"assistant","uuid":"3494bd4d-1047-452a-a2fb-71df966768f7","timestamp":"2026-04-22T20:37:06.781Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"3494bd4d-1047-452a-a2fb-71df966768f7","isSidechain":false,"type":"system","subtype":"turn_duration","durationMs":494491,"messageCount":60,"timestamp":"2026-04-22T20:37:06.814Z","uuid":"5a962760-fde8-4b03-a7f5-2c4e1bab6420","isMeta":false,"userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"type":"last-prompt","lastPrompt":"1. one-at-a-time, 2. yes, when a ticket is created the teleport request stays pending until it is approved by an SRE member, 3. yup this is good, 4 toml is fine","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87"}
|
||
{"type":"permission-mode","permissionMode":"default","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87"}
|
||
{"parentUuid":"5a962760-fde8-4b03-a7f5-2c4e1bab6420","isSidechain":false,"type":"system","subtype":"local_command","content":"<command-name>/usage</command-name>\n <command-message>usage</command-message>\n <command-args></command-args>","level":"info","timestamp":"2026-04-22T20:39:05.683Z","uuid":"b5903a0a-3a99-4dc6-9e9e-2464a3e9c5a7","isMeta":false,"userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"b5903a0a-3a99-4dc6-9e9e-2464a3e9c5a7","isSidechain":false,"type":"system","subtype":"local_command","content":"<local-command-stdout>Stats dialog dismissed</local-command-stdout>","level":"info","timestamp":"2026-04-22T20:39:05.683Z","uuid":"7c94f7e2-621c-40b8-9fc0-5a2741fa8b12","isMeta":false,"userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"7c94f7e2-621c-40b8-9fc0-5a2741fa8b12","isSidechain":false,"promptId":"9014c3e1-4d13-456b-968a-b10a84b05efe","type":"user","message":{"role":"user","content":"create a readme and use logo.png in it"},"uuid":"9eaf2981-a78f-4f46-b3db-f05ed72585da","timestamp":"2026-04-22T20:40:13.531Z","permissionMode":"default","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"type":"file-history-snapshot","messageId":"9eaf2981-a78f-4f46-b3db-f05ed72585da","snapshot":{"messageId":"9eaf2981-a78f-4f46-b3db-f05ed72585da","trackedFileBackups":{"televibe.toml.example":{"backupFileName":"bbfb8d7aa32551d9@v2","version":2,"backupTime":"2026-04-22T20:40:13.616Z"},"jira/itsm.go":{"backupFileName":"4bea62a21893a977@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"config.go":{"backupFileName":"ce42830ce58f9030@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"ai/anthropic.go":{"backupFileName":"ee053cdf79f87e2b@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"/Users/steve.briggs/.claude/projects/-Users-steve-briggs-projects-televibe/memory/project_televibe.md":{"backupFileName":"fcc9b61306f79703@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"/Users/steve.briggs/.claude/projects/-Users-steve-briggs-projects-televibe/memory/user_role.md":{"backupFileName":"71055322cf35d2f4@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"ai/bedrock.go":{"backupFileName":"f4bb61d355f98fe7@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"/Users/steve.briggs/.claude/projects/-Users-steve-briggs-projects-televibe/memory/MEMORY.md":{"backupFileName":"6c3a0c244e8faa37@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"go.mod":{"backupFileName":"9fc53402d3d41c42@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"cmd/televibe/main.go":{"backupFileName":"8730970aec0a7d43@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"ai/webhook.go":{"backupFileName":"acf5564723ce2540@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"risk/score.go":{"backupFileName":"b2b28b4b7720c598@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"risk/risk.go":{"backupFileName":"d8dae9dad960e9df@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"app.go":{"backupFileName":"4a7fdf647325bcdd@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"ai/provider.go":{"backupFileName":"e31a444f304d29ac@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"}},"timestamp":"2026-04-22T20:40:13.617Z"},"isSnapshotUpdate":false}
|
||
{"parentUuid":"9eaf2981-a78f-4f46-b3db-f05ed72585da","isSidechain":false,"message":{"model":"claude-opus-4-7","id":"msg_01Ha1812eKce1HNBsjca9DhF","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"","signature":"EscEClkIDBgCKkD2RLCEvJi4RxCrXF4CrFoECPd03F1yvJO+k9qN5hCzqpfqK2SeXQ+WU74gWqYE06eqsa3kaSFKfApHHYczoBoyMg9jbGF1ZGUtb3B1cy00LTc4ABIMTIyFwkEI3lwUDy6gGgzo7TaFmdZnagB8000iMF93EhkAKqMSTX3e1Y1TSHH9aMG1gCtKLzH8f3/L8z/UQqFlGmDe1YYHKMka+cC7dyqbA+sj0cQtt7/QxQ7lhBT08KgclJ0wJMlle5jRk0+CT4SOxvFYKRsBi4GsglWzc5CNYR6nj2+rmgLH6amSb6HAWzBQLmf6IY3EWFko4y7pRrBmBrus3boVYm1u5Pq22xKD+RBAFxX+VV3fGy8rEJWd43/dQUnyCXsUSG3+o314M//WbObNsfo5jybjoEBgb34FemRvN1Slo3GhDug9XrI6MF7k+0mlRsZ49VUe2jg7Ke8eqSEVfmMGj641nth6DK3IPwvSp6VFrex0maUhAvWT2P46UpScobhZQtaNjFh0UHVITYRGLh2/U8CQ77TRlyMyPNP4DnquJ0wuzKMCnBbfftErK71cI4NebmcjBbAOfNJwUnHVDx0ZBSTo90TaU/g1FFQH1Z87vsDcd8H+SkduzVl9YRrJN3TRFb8QJL+N12HIWkuCoq8gCOb0zMtjafZ8rKTJFgD38C0EwEdDSyWoIkQ5WP27fToWWFYWJtnHhsPKOLeme5o5gxLcvmsNjsePe5XB+YKAV7PV7EU6sVtA3ge2VJGa3yLMrrGXGhgB"}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":6,"cache_creation_input_tokens":1330,"cache_read_input_tokens":85840,"output_tokens":299,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":1330},"inference_geo":"","iterations":[{"input_tokens":6,"output_tokens":299,"cache_read_input_tokens":85840,"cache_creation_input_tokens":1330,"cache_creation":{"ephemeral_5m_input_tokens":1330,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKTR91juzhDxeSNjPHud","type":"assistant","uuid":"ecf20a3c-d531-4af9-8682-2e3fc2825f8b","timestamp":"2026-04-22T20:40:17.710Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"ecf20a3c-d531-4af9-8682-2e3fc2825f8b","isSidechain":false,"message":{"model":"claude-opus-4-7","id":"msg_01Ha1812eKce1HNBsjca9DhF","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_014WEa8k18n6wcPAEBvSDpM6","name":"Bash","input":{"command":"ls -la /Users/steve.briggs/projects/televibe/ 2>&1 && echo '---logo check---' && find /Users/steve.briggs/projects/televibe -iname 'logo*' 2>&1","description":"Check for logo.png in project directory"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":6,"cache_creation_input_tokens":1330,"cache_read_input_tokens":85840,"output_tokens":299,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":1330},"inference_geo":"","iterations":[{"input_tokens":6,"output_tokens":299,"cache_read_input_tokens":85840,"cache_creation_input_tokens":1330,"cache_creation":{"ephemeral_5m_input_tokens":1330,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKTR91juzhDxeSNjPHud","type":"assistant","uuid":"0b53444f-a83e-4484-9171-540c4c11d400","timestamp":"2026-04-22T20:40:18.419Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"0b53444f-a83e-4484-9171-540c4c11d400","isSidechain":false,"promptId":"9014c3e1-4d13-456b-968a-b10a84b05efe","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_014WEa8k18n6wcPAEBvSDpM6","type":"tool_result","content":"\u001b[38;5;6m\u001b[1md\u001b[0m\u001b[38;5;10mr\u001b[39m\u001b[38;5;11mw\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;14m\u001b[39m \u001b[38;5;13msteve.briggs\u001b[39m \u001b[38;5;14mstaff\u001b[39m \u001b[38;5;10m1.5\u001b[39m \u001b[38;5;10mKB\u001b[39m \u001b[38;5;13mWed Apr 22 16:20:18 2026\u001b[39m \u001b[38;5;6m\u001b[1m..\u001b[0m\n\u001b[38;5;6m\u001b[1md\u001b[0m\u001b[38;5;10mr\u001b[39m\u001b[38;5;11mw\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;14m\u001b[39m \u001b[38;5;13msteve.briggs\u001b[39m \u001b[38;5;14mstaff\u001b[39m \u001b[38;5;10m96\u001b[39m \u001b[38;5;10mB\u001b[39m \u001b[38;5;13mWed Apr 22 16:34:01 2026\u001b[39m \u001b[38;5;6m\u001b[1mcmd\u001b[0m\n.\u001b[38;5;10mr\u001b[39m\u001b[38;5;11mw\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;14m\u001b[39m \u001b[38;5;13msteve.briggs\u001b[39m \u001b[38;5;14mstaff\u001b[39m \u001b[38;5;10m25\u001b[39m \u001b[38;5;10mB\u001b[39m \u001b[38;5;13mWed Apr 22 16:34:08 2026\u001b[39m go.mod\n.\u001b[38;5;10mr\u001b[39m\u001b[38;5;11mw\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;14m\u001b[39m \u001b[38;5;13msteve.briggs\u001b[39m \u001b[38;5;14mstaff\u001b[39m \u001b[38;5;10m1.4\u001b[39m \u001b[38;5;10mKB\u001b[39m \u001b[38;5;13mWed Apr 22 16:34:27 2026\u001b[39m config.go\n.\u001b[38;5;10mr\u001b[39m\u001b[38;5;11mw\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;14m\u001b[39m \u001b[38;5;13msteve.briggs\u001b[39m \u001b[38;5;14mstaff\u001b[39m \u001b[38;5;10m5.5\u001b[39m \u001b[38;5;10mKB\u001b[39m \u001b[38;5;13mWed Apr 22 16:35:26 2026\u001b[39m app.go\n\u001b[38;5;6m\u001b[1md\u001b[0m\u001b[38;5;10mr\u001b[39m\u001b[38;5;11mw\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;14m\u001b[39m \u001b[38;5;13msteve.briggs\u001b[39m \u001b[38;5;14mstaff\u001b[39m \u001b[38;5;10m192\u001b[39m \u001b[38;5;10mB\u001b[39m \u001b[38;5;13mWed Apr 22 16:35:32 2026\u001b[39m \u001b[38;5;6m\u001b[1mai\u001b[0m\n\u001b[38;5;6m\u001b[1md\u001b[0m\u001b[38;5;10mr\u001b[39m\u001b[38;5;11mw\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;14m\u001b[39m \u001b[38;5;13msteve.briggs\u001b[39m \u001b[38;5;14mstaff\u001b[39m \u001b[38;5;10m128\u001b[39m \u001b[38;5;10mB\u001b[39m \u001b[38;5;13mWed Apr 22 16:35:35 2026\u001b[39m \u001b[38;5;6m\u001b[1mrisk\u001b[0m\n\u001b[38;5;6m\u001b[1md\u001b[0m\u001b[38;5;10mr\u001b[39m\u001b[38;5;11mw\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;14m\u001b[39m \u001b[38;5;13msteve.briggs\u001b[39m \u001b[38;5;14mstaff\u001b[39m \u001b[38;5;10m96\u001b[39m \u001b[38;5;10mB\u001b[39m \u001b[38;5;13mWed Apr 22 16:36:06 2026\u001b[39m \u001b[38;5;6m\u001b[1mjira\u001b[0m\n.\u001b[38;5;10mr\u001b[39m\u001b[38;5;11mw\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;14m\u001b[39m \u001b[38;5;13msteve.briggs\u001b[39m \u001b[38;5;14mstaff\u001b[39m \u001b[38;5;10m1.1\u001b[39m \u001b[38;5;10mKB\u001b[39m \u001b[38;5;13mWed Apr 22 16:36:14 2026\u001b[39m televibe.toml.example\n\u001b[38;5;6m\u001b[1md\u001b[0m\u001b[38;5;10mr\u001b[39m\u001b[38;5;11mw\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;14m\u001b[39m \u001b[38;5;13msteve.briggs\u001b[39m \u001b[38;5;14mstaff\u001b[39m \u001b[38;5;10m352\u001b[39m \u001b[38;5;10mB\u001b[39m \u001b[38;5;13mWed Apr 22 16:39:42 2026\u001b[39m \u001b[38;5;6m\u001b[1m.\u001b[0m\n.\u001b[38;5;10mr\u001b[39m\u001b[38;5;11mw\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;14m\u001b[39m \u001b[38;5;13msteve.briggs\u001b[39m \u001b[38;5;14mstaff\u001b[39m \u001b[38;5;11m4.0\u001b[39m \u001b[38;5;11mMB\u001b[39m \u001b[38;5;13mWed Apr 22 16:39:42 2026\u001b[39m logo.png\n---logo check---\n/Users/steve.briggs/projects/televibe/logo.png","is_error":false}]},"uuid":"cd3533e6-c9be-4772-b6e3-bda53fbbf7a4","timestamp":"2026-04-22T20:40:18.770Z","toolUseResult":{"stdout":"\u001b[38;5;6m\u001b[1md\u001b[0m\u001b[38;5;10mr\u001b[39m\u001b[38;5;11mw\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;14m\u001b[39m \u001b[38;5;13msteve.briggs\u001b[39m \u001b[38;5;14mstaff\u001b[39m \u001b[38;5;10m1.5\u001b[39m \u001b[38;5;10mKB\u001b[39m \u001b[38;5;13mWed Apr 22 16:20:18 2026\u001b[39m \u001b[38;5;6m\u001b[1m..\u001b[0m\n\u001b[38;5;6m\u001b[1md\u001b[0m\u001b[38;5;10mr\u001b[39m\u001b[38;5;11mw\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;14m\u001b[39m \u001b[38;5;13msteve.briggs\u001b[39m \u001b[38;5;14mstaff\u001b[39m \u001b[38;5;10m96\u001b[39m \u001b[38;5;10mB\u001b[39m \u001b[38;5;13mWed Apr 22 16:34:01 2026\u001b[39m \u001b[38;5;6m\u001b[1mcmd\u001b[0m\n.\u001b[38;5;10mr\u001b[39m\u001b[38;5;11mw\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;14m\u001b[39m \u001b[38;5;13msteve.briggs\u001b[39m \u001b[38;5;14mstaff\u001b[39m \u001b[38;5;10m25\u001b[39m \u001b[38;5;10mB\u001b[39m \u001b[38;5;13mWed Apr 22 16:34:08 2026\u001b[39m go.mod\n.\u001b[38;5;10mr\u001b[39m\u001b[38;5;11mw\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;14m\u001b[39m \u001b[38;5;13msteve.briggs\u001b[39m \u001b[38;5;14mstaff\u001b[39m \u001b[38;5;10m1.4\u001b[39m \u001b[38;5;10mKB\u001b[39m \u001b[38;5;13mWed Apr 22 16:34:27 2026\u001b[39m config.go\n.\u001b[38;5;10mr\u001b[39m\u001b[38;5;11mw\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;14m\u001b[39m \u001b[38;5;13msteve.briggs\u001b[39m \u001b[38;5;14mstaff\u001b[39m \u001b[38;5;10m5.5\u001b[39m \u001b[38;5;10mKB\u001b[39m \u001b[38;5;13mWed Apr 22 16:35:26 2026\u001b[39m app.go\n\u001b[38;5;6m\u001b[1md\u001b[0m\u001b[38;5;10mr\u001b[39m\u001b[38;5;11mw\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;14m\u001b[39m \u001b[38;5;13msteve.briggs\u001b[39m \u001b[38;5;14mstaff\u001b[39m \u001b[38;5;10m192\u001b[39m \u001b[38;5;10mB\u001b[39m \u001b[38;5;13mWed Apr 22 16:35:32 2026\u001b[39m \u001b[38;5;6m\u001b[1mai\u001b[0m\n\u001b[38;5;6m\u001b[1md\u001b[0m\u001b[38;5;10mr\u001b[39m\u001b[38;5;11mw\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;14m\u001b[39m \u001b[38;5;13msteve.briggs\u001b[39m \u001b[38;5;14mstaff\u001b[39m \u001b[38;5;10m128\u001b[39m \u001b[38;5;10mB\u001b[39m \u001b[38;5;13mWed Apr 22 16:35:35 2026\u001b[39m \u001b[38;5;6m\u001b[1mrisk\u001b[0m\n\u001b[38;5;6m\u001b[1md\u001b[0m\u001b[38;5;10mr\u001b[39m\u001b[38;5;11mw\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;14m\u001b[39m \u001b[38;5;13msteve.briggs\u001b[39m \u001b[38;5;14mstaff\u001b[39m \u001b[38;5;10m96\u001b[39m \u001b[38;5;10mB\u001b[39m \u001b[38;5;13mWed Apr 22 16:36:06 2026\u001b[39m \u001b[38;5;6m\u001b[1mjira\u001b[0m\n.\u001b[38;5;10mr\u001b[39m\u001b[38;5;11mw\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;14m\u001b[39m \u001b[38;5;13msteve.briggs\u001b[39m \u001b[38;5;14mstaff\u001b[39m \u001b[38;5;10m1.1\u001b[39m \u001b[38;5;10mKB\u001b[39m \u001b[38;5;13mWed Apr 22 16:36:14 2026\u001b[39m televibe.toml.example\n\u001b[38;5;6m\u001b[1md\u001b[0m\u001b[38;5;10mr\u001b[39m\u001b[38;5;11mw\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;9mx\u001b[39m\u001b[38;5;14m\u001b[39m \u001b[38;5;13msteve.briggs\u001b[39m \u001b[38;5;14mstaff\u001b[39m \u001b[38;5;10m352\u001b[39m \u001b[38;5;10mB\u001b[39m \u001b[38;5;13mWed Apr 22 16:39:42 2026\u001b[39m \u001b[38;5;6m\u001b[1m.\u001b[0m\n.\u001b[38;5;10mr\u001b[39m\u001b[38;5;11mw\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;10mr\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;8m-\u001b[39m\u001b[38;5;14m\u001b[39m \u001b[38;5;13msteve.briggs\u001b[39m \u001b[38;5;14mstaff\u001b[39m \u001b[38;5;11m4.0\u001b[39m \u001b[38;5;11mMB\u001b[39m \u001b[38;5;13mWed Apr 22 16:39:42 2026\u001b[39m logo.png\n---logo check---\n/Users/steve.briggs/projects/televibe/logo.png","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false},"sourceToolAssistantUUID":"0b53444f-a83e-4484-9171-540c4c11d400","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"cd3533e6-c9be-4772-b6e3-bda53fbbf7a4","isSidechain":false,"message":{"model":"claude-opus-4-7","id":"msg_018vauKjFNcWG5WnCHnUTTjJ","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"","signature":"ErYDClkIDBgCKkBtPr47oZj+oNAh6j2p0c6HOmtWDezyx1fFwjPFdBHWbD/xhwLWuVvji9FRLLNOpW9u8fm5dXWaml9z8JpyW7b/Mg9jbGF1ZGUtb3B1cy00LTc4ABIMx2YJuNupKQ+aAEhMGgzNYfg9W9z1UCqK23QiMMgv+xMyjpC3nRZ8fKJmd5sJzSTfdKGbaPR/ok325w7ZivqiX9GbEAht3wXvUiQFzSqKAg/DeSQXlgJybgpXuHGC9Zh1Tm8fft3OMhOyaXmgVWUGHESvta34hzUD81emzV/A6uVpPhrHMLyM1RZ/XqrPgVpeOGgGfpIW2MDP5huLunfugqF5PGFCzH1l7Kqj6lFdRPP4yegckikyGKtNrKO0UJoWcHWapMXZaOqlowomXzK7u0O29Zs3JvU7fmeqi6mJ76WEZ4WSyhIhCjAWiC3wR7I4KT/7/KeTDJ/mXW05arDL72cEXxERBbTz6V8Xo0n8kAi6wjUbu6XHCJ/MgK0mG/VubvWqzEnXdbNoH6CJnCDjPepos9ThnZs/IlRPVVTZZprGafae8uvBDBkkfiXLL2ObKBDOoGRY2wHnGAE="}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":2619,"cache_read_input_tokens":87170,"output_tokens":1901,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":2619},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":1901,"cache_read_input_tokens":87170,"cache_creation_input_tokens":2619,"cache_creation":{"ephemeral_5m_input_tokens":2619,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKTRXBz5XiBx6YbBsZB9","type":"assistant","uuid":"759eec57-d9ce-40d2-91de-aea775bc3fe5","timestamp":"2026-04-22T20:40:22.233Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"759eec57-d9ce-40d2-91de-aea775bc3fe5","isSidechain":false,"message":{"model":"claude-opus-4-7","id":"msg_018vauKjFNcWG5WnCHnUTTjJ","type":"message","role":"assistant","content":[{"type":"text","text":"Logo is there. Writing README now."}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":2619,"cache_read_input_tokens":87170,"output_tokens":1901,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":2619},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":1901,"cache_read_input_tokens":87170,"cache_creation_input_tokens":2619,"cache_creation":{"ephemeral_5m_input_tokens":2619,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKTRXBz5XiBx6YbBsZB9","type":"assistant","uuid":"11af9403-2822-47a8-8e3c-33c2aff8abb9","timestamp":"2026-04-22T20:40:22.556Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"11af9403-2822-47a8-8e3c-33c2aff8abb9","isSidechain":false,"message":{"model":"claude-opus-4-7","id":"msg_018vauKjFNcWG5WnCHnUTTjJ","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01HSm7sXJcR1kHKtmPoCdrv4","name":"Write","input":{"file_path":"/Users/steve.briggs/projects/televibe/README.md","content":"<p align=\"center\">\n <img src=\"logo.png\" alt=\"televibe\" width=\"240\" />\n</p>\n\n# televibe\n\nA [Teleport](https://goteleport.com) access-request plugin that routes each pending request through an AI risk analyst, auto-approves the boring ones, and files an ITSM Jira ticket for the sketchy ones — with the Teleport request held in `PENDING` until an SRE resolves the ticket.\n\nRisk tiers are reported in gen-z slang because audit logs should spark joy:\n\n| Score | Tier | Slang | Action |\n| ------ | -------- | ------------------------- | ------------------------------------------- |\n| 0–24 | low | `no cap` | auto-approve, no Jira ticket |\n| 25–49 | medium | `sus` | file ITSM ticket, hold request pending |\n| 50–74 | high | `mad sus fr` | file ITSM ticket with tier label |\n| 75–100 | critical | `straight L, touch grass` | file ITSM ticket with tier label |\n\nThe ticket-creation threshold is configurable (`risk.ticket_threshold`).\n\n## How it works\n\n```\nTeleport ──► watcher ──► scorer ──► AI provider ──► tier\n │\n ├── below threshold ──► auto-approve via AccessReview\n │\n └── at/above threshold ──► Jira ITSM ticket ──► poll status\n │\n SRE approves/rejects │\n ▼\n Teleport AccessReview\n```\n\n**Risk components:**\n\n- **Structural (deterministic):** missing `CUSTX-###` ticket reference (+30), thin description `<40` chars (+15), off-hours request (+10).\n- **AI-judged (clamped):** description quality 0–25, privilege concern 0–25, anomalies 0–10.\n\n## AI providers\n\nPick one via `ai.provider`:\n\n- **`anthropic`** — direct call to the Anthropic Messages API. System prompt is sent with `cache_control: ephemeral` so repeated scoring hits the prompt cache.\n- **`bedrock`** — `bedrockruntime:InvokeModel` against a Claude-on-Bedrock model. Uses the default AWS credential chain.\n- **`webhook`** — generic `POST` of `{system_prompt, user_prompt, request}` to any URL you point it at (ChatGPT custom GPT action, n8n workflow, internal scoring service, etc.). The response must be JSON matching the `Assessment` shape.\n\n## Install\n\n```sh\ngo mod tidy\ngo build -o televibe ./cmd/televibe\n```\n\n## Configure\n\nCopy `televibe.toml.example` to `/etc/televibe/televibe.toml` and fill in:\n\n- `[teleport]` — proxy address + path to an identity file for a Teleport user with permission to watch access requests and submit reviews.\n- `[ai]` — pick a provider and supply its credentials.\n- `[jira]` — API user, token, ITSM project key, and the status names to treat as approved/rejected (e.g. `\"Approved\"` / `\"Rejected\"`).\n- `[risk]` — threshold, CUSTX pattern (defaults to `CUSTX-\\d+`), off-hours window, timezone.\n\n### Teleport role\n\nThe plugin user needs a role roughly like:\n\n```yaml\nkind: role\nversion: v7\nmetadata:\n name: televibe-plugin\nspec:\n allow:\n rules:\n - resources: [access_request]\n verbs: [list, read, update]\n - resources: [access_plugin_data]\n verbs: [update]\n```\n\nIssue an identity file with `tctl auth sign --user=televibe --out=/var/lib/teleport/televibe.pem --ttl=8760h --format=file`.\n\n### Jira workflow\n\nThe ITSM project needs statuses matching `jira.approved_status` and `jira.rejected_status`. When an SRE transitions the ticket to either, the poller reflects that decision back to the Teleport request on its next tick (`jira.poll_interval`, default `30s`).\n\n## Run\n\n```sh\n./televibe --config /etc/televibe/televibe.toml\n```\n\nJSON logs to stderr, level from `[log].level`.\n\n## Layout\n\n```\ntelevibe/\n├── cmd/televibe/main.go entry point\n├── config.go TOML loader + validation\n├── app.go watcher loop + ITSM poller\n├── ai/ Provider interface, Anthropic / Bedrock / webhook impls\n├── risk/ scorer, tier table, slang\n├── jira/itsm.go ticket create, status poll, restart rehydrate via JQL\n└── televibe.toml.example\n```\n\n## Restart safety\n\nOn startup, `televibe` runs a JQL search for open tickets labelled `televibe` in the ITSM project and pulls the Teleport request ID out of each ticket description to rebuild the held-request map. Restarts don't duplicate tickets.\n\n## License\n\nTBD.\n"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":2619,"cache_read_input_tokens":87170,"output_tokens":1901,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":2619},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":1901,"cache_read_input_tokens":87170,"cache_creation_input_tokens":2619,"cache_creation":{"ephemeral_5m_input_tokens":2619,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKTRXBz5XiBx6YbBsZB9","type":"assistant","uuid":"633145a5-24aa-4d71-8783-b65b5055ef30","timestamp":"2026-04-22T20:40:51.857Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"633145a5-24aa-4d71-8783-b65b5055ef30","isSidechain":false,"promptId":"9014c3e1-4d13-456b-968a-b10a84b05efe","type":"user","message":{"role":"user","content":[{"type":"tool_result","content":"The user doesn't want to proceed with this tool use. The tool use was rejected (eg. if it was a file edit, the new_string was NOT written to the file). STOP what you are doing and wait for the user to tell you how to proceed.","is_error":true,"tool_use_id":"toolu_01HSm7sXJcR1kHKtmPoCdrv4"}]},"uuid":"dc7848c9-0a75-400d-84f5-0403e0a2927a","timestamp":"2026-04-22T20:42:11.679Z","toolUseResult":"User rejected tool use","sourceToolAssistantUUID":"633145a5-24aa-4d71-8783-b65b5055ef30","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"dc7848c9-0a75-400d-84f5-0403e0a2927a","isSidechain":false,"promptId":"9014c3e1-4d13-456b-968a-b10a84b05efe","type":"user","message":{"role":"user","content":[{"type":"text","text":"[Request interrupted by user for tool use]"}]},"uuid":"588b60b4-50d6-47e7-953e-9367433a1331","timestamp":"2026-04-22T20:42:11.679Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"type":"file-history-snapshot","messageId":"fadd2b13-9847-48ff-87c9-b4e433f0d112","snapshot":{"messageId":"fadd2b13-9847-48ff-87c9-b4e433f0d112","trackedFileBackups":{"go.mod":{"backupFileName":"9fc53402d3d41c42@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"ai/bedrock.go":{"backupFileName":"f4bb61d355f98fe7@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"ai/anthropic.go":{"backupFileName":"ee053cdf79f87e2b@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"ai/provider.go":{"backupFileName":"e31a444f304d29ac@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"jira/itsm.go":{"backupFileName":"4bea62a21893a977@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"config.go":{"backupFileName":"ce42830ce58f9030@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"/Users/steve.briggs/.claude/projects/-Users-steve-briggs-projects-televibe/memory/user_role.md":{"backupFileName":"71055322cf35d2f4@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"app.go":{"backupFileName":"4a7fdf647325bcdd@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"risk/score.go":{"backupFileName":"b2b28b4b7720c598@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"televibe.toml.example":{"backupFileName":"bbfb8d7aa32551d9@v2","version":2,"backupTime":"2026-04-22T20:40:13.616Z"},"cmd/televibe/main.go":{"backupFileName":"8730970aec0a7d43@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"/Users/steve.briggs/.claude/projects/-Users-steve-briggs-projects-televibe/memory/MEMORY.md":{"backupFileName":"6c3a0c244e8faa37@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"ai/webhook.go":{"backupFileName":"acf5564723ce2540@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"/Users/steve.briggs/.claude/projects/-Users-steve-briggs-projects-televibe/memory/project_televibe.md":{"backupFileName":"fcc9b61306f79703@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"risk/risk.go":{"backupFileName":"d8dae9dad960e9df@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"}},"timestamp":"2026-04-22T20:42:52.512Z"},"isSnapshotUpdate":false}
|
||
{"parentUuid":"588b60b4-50d6-47e7-953e-9367433a1331","isSidechain":false,"promptId":"18d5052c-f9ad-4086-bf19-2091920d7696","type":"user","message":{"role":"user","content":"where is the readme?"},"uuid":"fadd2b13-9847-48ff-87c9-b4e433f0d112","timestamp":"2026-04-22T20:42:52.429Z","permissionMode":"default","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"fadd2b13-9847-48ff-87c9-b4e433f0d112","isSidechain":false,"message":{"model":"claude-opus-4-7","id":"msg_01HkQ8NUt2DgcywYj3TK4iax","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"","signature":"EsACClkIDBgCKkDoEUXo7Ahel3POJ7vQwVRhj662HF4gzaym4KEG8gQ83I2i5ILKzCA7EWbSJf8UDOtfaJW9Rk7G2eoZAFi/NrwdMg9jbGF1ZGUtb3B1cy00LTc4ABIMaQ4hpsIZ/Zr9bEJOGgzL22kvz5zQo/BPTfEiMLB5yy0MRFHwnpnNvVpcqLqQU26Ttc2S+3momNxzNZMRBJmEy/2t9hyTXPUushBoeiqUAS2T5gRPsdIl3z68tVoXhmuXR9XtP2wcUu8aQOmtgn/szeoOwqJJMZ9X40fzC91cS07dl+P1foEXhLPII8B0eyJaB9IOpCjWbQiWBwbPLHd5PFWRumFnnsHA+xMVkK4PsDu8hz+S42bVvVHQdHQaHvmi+w89EgH/PFAnCV9BqNbwniMVPGPYKDouJHmOBjC7byS0jqUYAQ=="}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":6,"cache_creation_input_tokens":2020,"cache_read_input_tokens":89789,"output_tokens":218,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":2020},"inference_geo":"","iterations":[{"input_tokens":6,"output_tokens":218,"cache_read_input_tokens":89789,"cache_creation_input_tokens":2020,"cache_creation":{"ephemeral_5m_input_tokens":2020,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKTcrcqdtxj2wsw6XCG6","type":"assistant","uuid":"5ad9777a-5271-4306-b757-c47bf28f5b51","timestamp":"2026-04-22T20:42:55.048Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"5ad9777a-5271-4306-b757-c47bf28f5b51","isSidechain":false,"message":{"model":"claude-opus-4-7","id":"msg_01HkQ8NUt2DgcywYj3TK4iax","type":"message","role":"assistant","content":[{"type":"text","text":"It doesn't exist — the Write was rejected before the file was created. Want me to retry? Let me verify."}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":6,"cache_creation_input_tokens":2020,"cache_read_input_tokens":89789,"output_tokens":218,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":2020},"inference_geo":"","iterations":[{"input_tokens":6,"output_tokens":218,"cache_read_input_tokens":89789,"cache_creation_input_tokens":2020,"cache_creation":{"ephemeral_5m_input_tokens":2020,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKTcrcqdtxj2wsw6XCG6","type":"assistant","uuid":"65a8debe-1036-4443-a65a-b2bb51cff066","timestamp":"2026-04-22T20:42:55.454Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"65a8debe-1036-4443-a65a-b2bb51cff066","isSidechain":false,"message":{"model":"claude-opus-4-7","id":"msg_01HkQ8NUt2DgcywYj3TK4iax","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01SgnG8hPZyZTmP9wEapiikQ","name":"Bash","input":{"command":"ls /Users/steve.briggs/projects/televibe/README* 2>&1 || echo \"no README found\"","description":"Check for README file"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":6,"cache_creation_input_tokens":2020,"cache_read_input_tokens":89789,"output_tokens":218,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":2020},"inference_geo":"","iterations":[{"input_tokens":6,"output_tokens":218,"cache_read_input_tokens":89789,"cache_creation_input_tokens":2020,"cache_creation":{"ephemeral_5m_input_tokens":2020,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKTcrcqdtxj2wsw6XCG6","type":"assistant","uuid":"c0ece748-8946-453f-93fd-e408ce1952f1","timestamp":"2026-04-22T20:42:56.160Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"c0ece748-8946-453f-93fd-e408ce1952f1","isSidechain":false,"promptId":"18d5052c-f9ad-4086-bf19-2091920d7696","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01SgnG8hPZyZTmP9wEapiikQ","type":"tool_result","content":"(eval):1: no matches found: /Users/steve.briggs/projects/televibe/README*\nno README found","is_error":false}]},"uuid":"d1970212-eece-4828-b30c-11f9f090b5bd","timestamp":"2026-04-22T20:42:56.235Z","toolUseResult":{"stdout":"(eval):1: no matches found: /Users/steve.briggs/projects/televibe/README*\nno README found","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false},"sourceToolAssistantUUID":"c0ece748-8946-453f-93fd-e408ce1952f1","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"d1970212-eece-4828-b30c-11f9f090b5bd","isSidechain":false,"attachment":{"type":"task_reminder","content":[],"itemCount":0},"type":"attachment","uuid":"85f51e07-9345-4b0c-941c-7d565558a263","timestamp":"2026-04-22T20:42:56.236Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"type":"last-prompt","lastPrompt":"where is the readme?","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87"}
|
||
{"type":"permission-mode","permissionMode":"default","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87"}
|
||
{"parentUuid":"85f51e07-9345-4b0c-941c-7d565558a263","isSidechain":false,"message":{"model":"claude-opus-4-7","id":"msg_01UwPMjSxDunvf796uHkfMcn","type":"message","role":"assistant","content":[{"type":"text","text":"Confirmed — no README exists. My Write call was rejected, so nothing landed. Want me to try again with the same content? If you rejected because you want something different (shorter, different sections, different tone), let me know what to change and I'll redo it."}],"stop_reason":"end_turn","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":432,"cache_read_input_tokens":91809,"output_tokens":79,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":432},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":79,"cache_read_input_tokens":91809,"cache_creation_input_tokens":432,"cache_creation":{"ephemeral_5m_input_tokens":432,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKTd8Pd2UFDQYcGAgRb1","type":"assistant","uuid":"f58807b5-e6d4-46fe-90c7-288f851f4a42","timestamp":"2026-04-22T20:42:59.304Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"type":"file-history-snapshot","messageId":"9b8db9ed-e299-41fd-a7b2-d3fd49de1682","snapshot":{"messageId":"9b8db9ed-e299-41fd-a7b2-d3fd49de1682","trackedFileBackups":{"cmd/televibe/main.go":{"backupFileName":"8730970aec0a7d43@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"/Users/steve.briggs/.claude/projects/-Users-steve-briggs-projects-televibe/memory/user_role.md":{"backupFileName":"71055322cf35d2f4@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"/Users/steve.briggs/.claude/projects/-Users-steve-briggs-projects-televibe/memory/MEMORY.md":{"backupFileName":"6c3a0c244e8faa37@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"risk/score.go":{"backupFileName":"b2b28b4b7720c598@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"jira/itsm.go":{"backupFileName":"4bea62a21893a977@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"/Users/steve.briggs/.claude/projects/-Users-steve-briggs-projects-televibe/memory/project_televibe.md":{"backupFileName":"fcc9b61306f79703@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"ai/provider.go":{"backupFileName":"e31a444f304d29ac@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"risk/risk.go":{"backupFileName":"d8dae9dad960e9df@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"televibe.toml.example":{"backupFileName":"bbfb8d7aa32551d9@v2","version":2,"backupTime":"2026-04-22T20:40:13.616Z"},"app.go":{"backupFileName":"4a7fdf647325bcdd@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"ai/anthropic.go":{"backupFileName":"ee053cdf79f87e2b@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"ai/webhook.go":{"backupFileName":"acf5564723ce2540@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"config.go":{"backupFileName":"ce42830ce58f9030@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"ai/bedrock.go":{"backupFileName":"f4bb61d355f98fe7@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"go.mod":{"backupFileName":"9fc53402d3d41c42@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"}},"timestamp":"2026-04-22T20:43:06.247Z"},"isSnapshotUpdate":false}
|
||
{"parentUuid":"f58807b5-e6d4-46fe-90c7-288f851f4a42","isSidechain":false,"promptId":"e913685a-681d-4330-9159-78c75bdc1a9a","type":"user","message":{"role":"user","content":"yes try again"},"uuid":"9b8db9ed-e299-41fd-a7b2-d3fd49de1682","timestamp":"2026-04-22T20:43:06.244Z","permissionMode":"default","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"9b8db9ed-e299-41fd-a7b2-d3fd49de1682","isSidechain":false,"message":{"model":"claude-opus-4-7","id":"msg_01PgvZK3r4FXVahyhTkentzm","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_014VJTzhfwrXiq7YkryXy6F3","name":"Write","input":{"file_path":"/Users/steve.briggs/projects/televibe/README.md","content":"<p align=\"center\">\n <img src=\"logo.png\" alt=\"televibe\" width=\"240\" />\n</p>\n\n# televibe\n\nA [Teleport](https://goteleport.com) access-request plugin that routes each pending request through an AI risk analyst, auto-approves the boring ones, and files an ITSM Jira ticket for the sketchy ones — with the Teleport request held in `PENDING` until an SRE resolves the ticket.\n\nRisk tiers are reported in gen-z slang because audit logs should spark joy:\n\n| Score | Tier | Slang | Action |\n| ------ | -------- | ------------------------- | -------------------------------------- |\n| 0–24 | low | `no cap` | auto-approve, no Jira ticket |\n| 25–49 | medium | `sus` | file ITSM ticket, hold request pending |\n| 50–74 | high | `mad sus fr` | file ITSM ticket with tier label |\n| 75–100 | critical | `straight L, touch grass` | file ITSM ticket with tier label |\n\nThe ticket-creation threshold is configurable (`risk.ticket_threshold`).\n\n## How it works\n\n```\nTeleport ──► watcher ──► scorer ──► AI provider ──► tier\n │\n ├── below threshold ──► auto-approve via AccessReview\n │\n └── at/above threshold ──► Jira ITSM ticket ──► poll status\n │\n SRE approves/rejects │\n ▼\n Teleport AccessReview\n```\n\n**Risk components:**\n\n- **Structural (deterministic):** missing `CUSTX-###` ticket reference (+30), thin description `<40` chars (+15), off-hours request (+10).\n- **AI-judged (clamped):** description quality 0–25, privilege concern 0–25, anomalies 0–10.\n\n## AI providers\n\nPick one via `ai.provider`:\n\n- **`anthropic`** — direct call to the Anthropic Messages API. System prompt is sent with `cache_control: ephemeral` so repeated scoring hits the prompt cache.\n- **`bedrock`** — `bedrockruntime:InvokeModel` against a Claude-on-Bedrock model. Uses the default AWS credential chain.\n- **`webhook`** — generic `POST` of `{system_prompt, user_prompt, request}` to any URL you point it at (ChatGPT custom GPT action, n8n workflow, internal scoring service). The response must be JSON matching the `Assessment` shape.\n\n## Install\n\n```sh\ngo mod tidy\ngo build -o televibe ./cmd/televibe\n```\n\n## Configure\n\nCopy `televibe.toml.example` to `/etc/televibe/televibe.toml` and fill in:\n\n- `[teleport]` — proxy address + path to an identity file for a Teleport user with permission to watch access requests and submit reviews.\n- `[ai]` — pick a provider and supply its credentials.\n- `[jira]` — API user, token, ITSM project key, and the status names to treat as approved/rejected (e.g. `\"Approved\"` / `\"Rejected\"`).\n- `[risk]` — threshold, CUSTX pattern (defaults to `CUSTX-\\d+`), off-hours window, timezone.\n\n### Teleport role\n\nThe plugin user needs a role roughly like:\n\n```yaml\nkind: role\nversion: v7\nmetadata:\n name: televibe-plugin\nspec:\n allow:\n rules:\n - resources: [access_request]\n verbs: [list, read, update]\n - resources: [access_plugin_data]\n verbs: [update]\n```\n\nIssue an identity file with `tctl auth sign --user=televibe --out=/var/lib/teleport/televibe.pem --ttl=8760h --format=file`.\n\n### Jira workflow\n\nThe ITSM project needs statuses matching `jira.approved_status` and `jira.rejected_status`. When an SRE transitions the ticket to either, the poller reflects that decision back to the Teleport request on its next tick (`jira.poll_interval`, default `30s`).\n\n## Run\n\n```sh\n./televibe --config /etc/televibe/televibe.toml\n```\n\nJSON logs to stderr, level from `[log].level`.\n\n## Layout\n\n```\ntelevibe/\n├── cmd/televibe/main.go entry point\n├── config.go TOML loader + validation\n├── app.go watcher loop + ITSM poller\n├── ai/ Provider interface, Anthropic / Bedrock / webhook impls\n├── risk/ scorer, tier table, slang\n├── jira/itsm.go ticket create, status poll, restart rehydrate via JQL\n└── televibe.toml.example\n```\n\n## Restart safety\n\nOn startup, `televibe` runs a JQL search for open tickets labelled `televibe` in the ITSM project and pulls the Teleport request ID out of each ticket description to rebuild the held-request map. Restarts don't duplicate tickets.\n\n## License\n\nTBD.\n"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":6,"cache_creation_input_tokens":84,"cache_read_input_tokens":92241,"output_tokens":1787,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":84},"inference_geo":"","iterations":[{"input_tokens":6,"output_tokens":1787,"cache_read_input_tokens":92241,"cache_creation_input_tokens":84,"cache_creation":{"ephemeral_5m_input_tokens":84,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKTdsCqZomvJd69S95AL","type":"assistant","uuid":"3663d301-8eb4-429b-9a98-3939de2ffbb0","timestamp":"2026-04-22T20:43:22.011Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"type":"file-history-snapshot","messageId":"3663d301-8eb4-429b-9a98-3939de2ffbb0","snapshot":{"messageId":"9b8db9ed-e299-41fd-a7b2-d3fd49de1682","trackedFileBackups":{"cmd/televibe/main.go":{"backupFileName":"8730970aec0a7d43@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"/Users/steve.briggs/.claude/projects/-Users-steve-briggs-projects-televibe/memory/user_role.md":{"backupFileName":"71055322cf35d2f4@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"/Users/steve.briggs/.claude/projects/-Users-steve-briggs-projects-televibe/memory/MEMORY.md":{"backupFileName":"6c3a0c244e8faa37@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"risk/score.go":{"backupFileName":"b2b28b4b7720c598@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"jira/itsm.go":{"backupFileName":"4bea62a21893a977@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"/Users/steve.briggs/.claude/projects/-Users-steve-briggs-projects-televibe/memory/project_televibe.md":{"backupFileName":"fcc9b61306f79703@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"ai/provider.go":{"backupFileName":"e31a444f304d29ac@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"risk/risk.go":{"backupFileName":"d8dae9dad960e9df@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"televibe.toml.example":{"backupFileName":"bbfb8d7aa32551d9@v2","version":2,"backupTime":"2026-04-22T20:40:13.616Z"},"app.go":{"backupFileName":"4a7fdf647325bcdd@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"ai/anthropic.go":{"backupFileName":"ee053cdf79f87e2b@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"ai/webhook.go":{"backupFileName":"acf5564723ce2540@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"config.go":{"backupFileName":"ce42830ce58f9030@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"ai/bedrock.go":{"backupFileName":"f4bb61d355f98fe7@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"go.mod":{"backupFileName":"9fc53402d3d41c42@v2","version":2,"backupTime":"2026-04-22T20:40:13.617Z"},"README.md":{"backupFileName":null,"version":1,"backupTime":"2026-04-22T20:43:42.303Z"}},"timestamp":"2026-04-22T20:43:06.247Z"},"isSnapshotUpdate":true}
|
||
{"parentUuid":"3663d301-8eb4-429b-9a98-3939de2ffbb0","isSidechain":false,"promptId":"e913685a-681d-4330-9159-78c75bdc1a9a","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_014VJTzhfwrXiq7YkryXy6F3","type":"tool_result","content":"File created successfully at: /Users/steve.briggs/projects/televibe/README.md"}]},"uuid":"5e46b45c-2e05-4620-8ed7-7aee4007661f","timestamp":"2026-04-22T20:43:42.309Z","toolUseResult":{"type":"create","filePath":"/Users/steve.briggs/projects/televibe/README.md","content":"<p align=\"center\">\n <img src=\"logo.png\" alt=\"televibe\" width=\"240\" />\n</p>\n\n# televibe\n\nA [Teleport](https://goteleport.com) access-request plugin that routes each pending request through an AI risk analyst, auto-approves the boring ones, and files an ITSM Jira ticket for the sketchy ones — with the Teleport request held in `PENDING` until an SRE resolves the ticket.\n\nRisk tiers are reported in gen-z slang because audit logs should spark joy:\n\n| Score | Tier | Slang | Action |\n| ------ | -------- | ------------------------- | -------------------------------------- |\n| 0–24 | low | `no cap` | auto-approve, no Jira ticket |\n| 25–49 | medium | `sus` | file ITSM ticket, hold request pending |\n| 50–74 | high | `mad sus fr` | file ITSM ticket with tier label |\n| 75–100 | critical | `straight L, touch grass` | file ITSM ticket with tier label |\n\nThe ticket-creation threshold is configurable (`risk.ticket_threshold`).\n\n## How it works\n\n```\nTeleport ──► watcher ──► scorer ──► AI provider ──► tier\n │\n ├── below threshold ──► auto-approve via AccessReview\n │\n └── at/above threshold ──► Jira ITSM ticket ──► poll status\n │\n SRE approves/rejects │\n ▼\n Teleport AccessReview\n```\n\n**Risk components:**\n\n- **Structural (deterministic):** missing `CUSTX-###` ticket reference (+30), thin description `<40` chars (+15), off-hours request (+10).\n- **AI-judged (clamped):** description quality 0–25, privilege concern 0–25, anomalies 0–10.\n\n## AI providers\n\nPick one via `ai.provider`:\n\n- **`anthropic`** — direct call to the Anthropic Messages API. System prompt is sent with `cache_control: ephemeral` so repeated scoring hits the prompt cache.\n- **`bedrock`** — `bedrockruntime:InvokeModel` against a Claude-on-Bedrock model. Uses the default AWS credential chain.\n- **`webhook`** — generic `POST` of `{system_prompt, user_prompt, request}` to any URL you point it at (ChatGPT custom GPT action, n8n workflow, internal scoring service). The response must be JSON matching the `Assessment` shape.\n\n## Install\n\n```sh\ngo mod tidy\ngo build -o televibe ./cmd/televibe\n```\n\n## Configure\n\nCopy `televibe.toml.example` to `/etc/televibe/televibe.toml` and fill in:\n\n- `[teleport]` — proxy address + path to an identity file for a Teleport user with permission to watch access requests and submit reviews.\n- `[ai]` — pick a provider and supply its credentials.\n- `[jira]` — API user, token, ITSM project key, and the status names to treat as approved/rejected (e.g. `\"Approved\"` / `\"Rejected\"`).\n- `[risk]` — threshold, CUSTX pattern (defaults to `CUSTX-\\d+`), off-hours window, timezone.\n\n### Teleport role\n\nThe plugin user needs a role roughly like:\n\n```yaml\nkind: role\nversion: v7\nmetadata:\n name: televibe-plugin\nspec:\n allow:\n rules:\n - resources: [access_request]\n verbs: [list, read, update]\n - resources: [access_plugin_data]\n verbs: [update]\n```\n\nIssue an identity file with `tctl auth sign --user=televibe --out=/var/lib/teleport/televibe.pem --ttl=8760h --format=file`.\n\n### Jira workflow\n\nThe ITSM project needs statuses matching `jira.approved_status` and `jira.rejected_status`. When an SRE transitions the ticket to either, the poller reflects that decision back to the Teleport request on its next tick (`jira.poll_interval`, default `30s`).\n\n## Run\n\n```sh\n./televibe --config /etc/televibe/televibe.toml\n```\n\nJSON logs to stderr, level from `[log].level`.\n\n## Layout\n\n```\ntelevibe/\n├── cmd/televibe/main.go entry point\n├── config.go TOML loader + validation\n├── app.go watcher loop + ITSM poller\n├── ai/ Provider interface, Anthropic / Bedrock / webhook impls\n├── risk/ scorer, tier table, slang\n├── jira/itsm.go ticket create, status poll, restart rehydrate via JQL\n└── televibe.toml.example\n```\n\n## Restart safety\n\nOn startup, `televibe` runs a JQL search for open tickets labelled `televibe` in the ITSM project and pulls the Teleport request ID out of each ticket description to rebuild the held-request map. Restarts don't duplicate tickets.\n\n## License\n\nTBD.\n","structuredPatch":[],"originalFile":null,"userModified":false},"sourceToolAssistantUUID":"3663d301-8eb4-429b-9a98-3939de2ffbb0","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|
||
{"parentUuid":"5e46b45c-2e05-4620-8ed7-7aee4007661f","isSidechain":false,"message":{"model":"claude-opus-4-7","id":"msg_019hhqpxA6SvemUGC22ctiNb","type":"message","role":"assistant","content":[{"type":"text","text":"Written to `/Users/steve.briggs/projects/televibe/README.md` — references `logo.png` at the top, covers risk tiers, flow diagram, AI provider options, install/config/run, Teleport role, Jira workflow, and restart safety."}],"stop_reason":"end_turn","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":1833,"cache_read_input_tokens":92325,"output_tokens":87,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":1833},"inference_geo":"","iterations":[{"input_tokens":1,"output_tokens":87,"cache_read_input_tokens":92325,"cache_creation_input_tokens":1833,"cache_creation":{"ephemeral_5m_input_tokens":1833,"ephemeral_1h_input_tokens":0},"type":"message"}],"speed":"standard"}},"requestId":"req_011CaKTgXWzfzCh6SjMo92q2","type":"assistant","uuid":"fe50d94e-489e-4c8f-bed8-fe0594b30dbe","timestamp":"2026-04-22T20:43:44.753Z","userType":"external","entrypoint":"cli","cwd":"/Users/steve.briggs/projects/televibe","sessionId":"b94f12fe-9fb8-45ba-8dd5-65f49e81db87","version":"2.1.117","gitBranch":"HEAD"}
|