Axol: Cheerful desktop companion that surfaces alerts from JSON payloads

hackernews | | 📰 뉴스
#ai 모델 #claude
원문 출처: hackernews · Genesis Park에서 요약 및 분석

요약

macOS에서 실행되는 'Axol'은 스크립트나 CI 도구에서 발생하는 JSON 형식의 알림을 로컬 서버로 수신해 말풍선으로 표시하는 도구입니다. 사용자는 curl 명령어를 통해 제목과 본문, 우선순위 등을 전송할 수 있으며, 'open-url' 같은 제한된 액션을 설정해 클릭 시 해당 URL이나 파일로 바로 이동할 수 있습니다. 또한 JSON 어댑터를 활용하면 GitHub 웹훅과 같은 타사 페이로드를 Axol이 이해하는 형식으로 변환해 별도의 코딩 없이 알림을 받을 수 있습니다.

본문

Alerts with a face. Any tool that can curl can pop her speech bubble. Click to jump back to the terminal, URL, or file that needs you. On macOS with the Xcode command line tools: git clone https://github.com/Roach/axol.git cd axol ./build.sh ./axol Axol listens on 127.0.0.1:47329 . Anything you can curl can talk to her — post an envelope from a script, a Makefile, a CI step: curl -s -X POST http://127.0.0.1:47329/ \ -H 'Content-Type: application/json' \ -d '{ "title": "ci-bot", "body": "build passed on main", "priority": "normal", "source": "github-actions", "actions": [{ "type": "open-url", "url": "https://github.com/.../runs/1" }] }' Required field: title . Priority high / urgent floats worry bubbles above her head; urgent also pins the speech bubble open until you handle it. Actions are a closed set — focus-pid , open-url , reveal-file , noop — so there's no shell execution path. Adapters are JSON files that translate a third-party payload into Axol's envelope. Drop one into ~/Library/Application Support/Axol/adapters/ and anything that POSTs JSON to localhost:47329 can talk to her — no code required. Whatever JSON your tool already emits. GitHub sends this to a webhook on every workflow run. { "workflow_run": { "conclusion": "failure", "head_branch": "main", "html_url": "https://github.com/.../runs/42" } } match picks the adapter. switch + cases choose a template. {{…}} placeholders are filled from the payload. { "match": { "field": "workflow_run", "exists": true }, "switch": "workflow_run.conclusion", "cases": { "failure": { "title": "{{workflow_run.head_branch}}", "body": "CI failed", "priority": "urgent", "actions": [{ "type": "open-url", "url": "{{workflow_run.html_url}}" }] } } } Axol's common shape. Any payload that reaches the bubble goes through this — adapters can't smuggle in unknown action types or shell commands. { "title": "main", "body": "CI failed", "priority": "urgent", "actions": [{ "type": "open-url", "url": "https://github.com/.../runs/42" }] } Urgent bubbles pin open until clicked. Clicking runs the first action — here, opening the workflow run in the browser. One adapter ships with Axol (adapters/claude-code.json , for Claude Code hooks). Everything else you add lives in ~/Library/Application Support/Axol/adapters/ . Template language — deliberately tiny: {{field}} top-level substitution {{nested.field}} dot-path into objects {{field | default 'x'}} fallback when missing {{basename path}} last path component {{trim field}} strip surrounding whitespace

Genesis Park 편집팀이 AI를 활용하여 작성한 분석입니다. 원문은 출처 링크를 통해 확인할 수 있습니다.

공유

관련 저널 읽기

전체 보기 →