.env
.env.*
!.env.example
traceDir
node_modules

# Defense against MCP env-var leaks: external tooling can mkdir a literal
# directory like "${HOME/...}" relative to cwd when bash-style env defaults
# aren't expanded. Never let those slip into the repo again.
# NB: the `{` is escaped as `[{]` so these stay valid globs for the Rust
# `ignore` crate (ast-grep / ripgrep), which otherwise reads `{` as an
# unclosed alternate group and aborts directory traversal. git treats
# `[{]` as a literal-`{` character class, so the guard is unchanged.
$[{]HOME*
$[{]VAR*

llm-model-costs.json
quickwit-*

# Go stuff
/service

# ClickHouse local data (created by local dev CH instance)
/store/
/data/
/metadata/
/langwatch/store/
/langwatch/data/
/langwatch/metadata/
__pycache__
dist/

langwatch_server/
.DS_Store

# vscode
.vscode/

# Misc
.local

# # CLI Testing files
prompts-lock.json
prompts.json
prompts/**

# SpecStory
.cursorindexingignore
.specstory

# Chainlit
.chainlit

# Claude Code personal settings
**/.claude/settings.local.json
**/.claude/agent-memory/
**/.claude/projects/
.claude/scheduled_tasks.lock
.claude/skills/local-*/
# Per-iter QA / dogfood notes are workspace-local. Durable proof
# belongs in docs/ or specs/; transient transcripts and screenshots
# stay untracked.
.claude/qa-*/

# PR body draft checkpoints — coordinated through the agent channel
# before any `gh pr edit`. Live PR body is the source of truth.
.monitor-logs/

# Dev instance port file (generated by make dev-up)
.dev-port

# Browser test artifacts (screenshots uploaded to img402.dev, not committed)
browser-tests/
**/.claude/screenshots/
**/.claude/ralph-loop*.md
# Loose PNG artifacts left by dogfood / scenario sessions — the convention
# is to upload to img402.dev and link from the PR body, not to commit binaries.
**/.claude/*.png
/dogfood-*.png
/.browser-test-screenshots/

# Ralph-loop agent coordination files — internal working state, not shipped.
# PR body content lives on GitHub; cross-lane readiness + iter journals,
# follow-up notes, audit drafts, etc. are local-only. If something here
# matters long-term it should graduate to docs/ or specs/ instead.
# README.md is the exception — it documents the .claude/ layout itself.
.claude/*.md
!.claude/README.md
# PR description documents are the canonical reviewer artifact for the
# branch they describe — graduated from local notes to tracked content
# per @rchaves directive 2026-04-27.
!.claude/PR-*.md

# Playwright E2E tests
agentic-e2e-tests/test-results/
agentic-e2e-tests/playwright-report/
agentic-e2e-tests/.auth/
agentic-e2e-tests/debug-*.png
agentic-e2e-tests/tests/seed.spec.ts
agentic-e2e-tests/node_modules/
seed.spec.ts
.playwright-mcp/
.mcp.local.json

# Browser-QA screenshot artifacts (published via the pr-screenshots repo, never committed here)
/*.png

**/**/.worktrees/**
!.worktrees/.gitkeep

# Skills compiled output (regenerated by generate.sh)
skills/_compiled/*.txt

# Skills test artifacts
skills/_tests/helpers/.mcp-config.json
preprocessed_configs/
status
uuid
.claude/worktrees/

# Agent scratch — transient PR-description drafts staged for `gh api PATCH`
# of the GitHub PR body; never the source of truth (PR body on GitHub is).
.claude/PR-*-DESCRIPTION.md
.claude/PR-DESCRIPTION.md

# PR-body screenshots live in the github.com/langwatch/pr-screenshots repo,
# referenced by raw URL from the PR body — never committed to the product tree.
langwatch/pr-screenshots/

# Per-scenario LLM conversation transcripts (langy.scenario.test.ts)
langwatch/e2e/langy/scenario-logs/

# Agent scratch + dogfood evidence (never track)
**/.claude/dogfood-evidence/
**/.claude/tmp/

# Dev server logs
server.log
