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 | bash

Open source · MIT licensed

Compatible with the tools you love — and more to come

ClaudeOpenAI

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.

01

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.

02

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.

03

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.

04

Zero cost

No API keys, no subscriptions, no vendor lock-in. Open source and free forever.

05

Better code reviews

Reviewers see the intent behind every change, not just the result. Less back-and-forth, faster approvals, fewer misunderstandings.

06

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.

github-actionsbot

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

github-actionsbot

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

github-actionsbot

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 | bash

Open source · MIT licensed