Private by design · Zero cost · Open source
Every code change has a story.
Shadw captures it.
Shadw captures the reasoning from your AI coding sessions and attaches it to commits. A git diff shows what changed — Shadw shows why.
curl -fsSL https://shadw.dev/install.sh | bashOpen source · MIT licensed
Compatible with the tools you love — and more to come
Why Shadw
Decisions disappear. Shadw saves them.
When you work with an AI coding agent, the most valuable part — the reasoning, alternatives explored, and tradeoffs debated — vanishes after the session ends.
Captures the why
A git diff shows what changed, but not why. The reasoning, alternatives debated, and tradeoffs made during an AI session disappear the moment the conversation ends.
Zero friction
No extra steps, no new habits. You keep coding and committing exactly like before. Shadw stays out of your way and never slows you down.
Private by design
Your AI conversations never leave your machine. Only curated decision summaries are shared — you stay in control of what reaches your team.
Zero cost
No API keys, no subscriptions, no vendor lock-in. Open source and free forever.
Better code reviews
Reviewers see the intent behind every change, not just the result. Less back-and-forth, faster approvals, fewer misunderstandings.
Lightweight
No Docker, no database, no server. One command to set up: shadw init. Barely there until you need it.
How it works
Four steps, all automatic
From AI conversation to PR comment — here's what happens under the hood.
You code with AI
A background daemon watches your agent's session files for new conversation activity.
You commit
A post-commit hook triggers a local LLM that reads the conversation and extracts the key decisions.
Notes attach
Decision records are written as git notes on a dedicated refs/notes/shadw ref, linked to the commit.
PRs get context
On push, a GitHub Action reads the notes and posts a structured decision trail as a PR comment.
Decision trail
This is what shows up in your PR
Every push triggers a GitHub Action that reads the decision notes and posts them as a comment. Reviewers get the full picture without asking.
Decision Trail
f4a21c7Switched from REST polling to WebSockets for real-time dashboard updates@sarah flagged that the dashboard was hammering the API with 2-second polls across 50+ widgets. We considered SSE but needed bidirectional communication for filters. WebSockets cut server load by 80% and gave us sub-100ms updates. The tradeoff is reconnection logic on flaky networks — solved with exponential backoff and a visible connection status indicator.
Captured by Shadw
Decision Trail
a83ef02Kept Stripe webhooks idempotent instead of adding a job queue for payments@james wanted to guarantee no double charges during peak traffic. A job queue (Bull, SQS) would add infrastructure and latency. Instead, we store a unique idempotency key per webhook event and check it before processing. Simpler to debug, no new service to monitor, and Stripe already retries on failure. If we ever need async processing, we can layer it on later without changing the core flow.
Captured by Shadw
Decision Trail
d19b4e6Chose row-level security in Postgres over application-level tenant isolation@priya needed multi-tenant data isolation that couldn't be bypassed by a missed WHERE clause. We debated separate schemas per tenant, but that breaks connection pooling and makes migrations painful at scale. RLS policies on a tenant_id column enforce isolation at the database level — every query is automatically scoped. One less thing the application layer can get wrong.
Captured by Shadw
Add Shadw to your repo
One curl, one shadw init, and you're set. Runs quietly in the background from there.
curl -fsSL https://shadw.dev/install.sh | bashOpen source · MIT licensed