Changelog¶
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]¶
Added¶
herald_pushMCP tool — bidirectional bridge allowing Claude Code to push session context to Herald for remote monitoring and continuation from another device- New task type
linkedfor sessions pushed from Claude Code viaherald_push - Deduplication: pushing the same
session_idupdates the existing linked task instead of creating a duplicate list_tasksshows linked sessions withlinkedstatus filter- SQLite migration:
typecolumn on tasks table to distinguish regular tasks from linked sessions
Security¶
- C1: Validate
redirect_uriagainst configured allowlist in OAuth authorization flow — prevents open redirect attacks - C2: Enforce mandatory PKCE S256 on all OAuth flows —
code_challengeandcode_verifierare now required, not optional - C3: Implement per-token and per-IP rate limiting middleware — token bucket algorithm, pure Go, no external deps
- C4: Enforce
max_concurrenttask limit —Start()now checks running count before spawning goroutines - C5: Validate and clamp
timeout_minutesagainstmax_timeout— defense-in-depth at handler and task manager layers - C6: Use
crypto/subtle.ConstantTimeComparefor all secret comparisons — client secret hashed at rest with SHA-256, PKCE verification also constant-time
Fixed¶
oauthError()was passingnilas*http.Requesttohttp.Redirect— would panic on OAuth error redirects (found during C2 fix)
[0.1.0] — 2026-02-12¶
Added¶
- MCP server with Streamable HTTP transport
- 9 MCP tools:
start_task,check_task,get_result,list_tasks,cancel_task,get_diff,list_projects,read_file,get_logs - Async task execution with Claude Code CLI
- OAuth 2.1 + PKCE authentication
- Git branch isolation per task
- Session resumption (multi-turn Claude Code conversations)
- Multi-project support with per-project allowed tools
- SQLite persistence (pure Go, zero CGO)
- MCP push notifications (server-initiated, via SSE)
- Structured logging with
log/slog - README in English and French