Pi is Inflection AI's conversational assistant. When teams use it for code questions, ChooChoo gives it a compiled PI.md so its answers reflect the actual stack, conventions, and constraints of the project.
Pi answers best when grounded in the specific project. ChooChoo generates PI.md from your linting config, ADRs, and key files so every code question lands answers in your team's reality, not a generic one.
PI.md with stack, conventions, and constraints
Consistent answers across team members asking the same Pi questions
Refreshed when your standards or stack changes
# PI.md
# Generated by ChooChoo. Do not edit by hand.
## What you're looking at
payments-api: a FastAPI service for financial
transactions. Use this file to ground responses
in the project's actual decisions and constraints.
## Stack
Python 3.12 · FastAPI · PostgreSQL · Redis
## Conventions
- Type annotations on every public function
- Pydantic for inputs/outputs
- pytest, ≥ 85% coverage in CI
## Constraints
- No raw SQL; SQLAlchemy ORM only
- Never log secrets, tokens, or PII
- Read configuration from environment, not code
# SKILLS.md
# Generated by ChooChoo. Do not edit by hand.
## auth
JWT token lifecycle: creation, validation, refresh.
Entry: src/auth/service.py
Tests: tests/auth/
## payments
Stripe integration: charges, subscriptions, webhooks.
Entry: src/payments/processor.py
Note: Never log STRIPE_KEY or card numbers
## database
SQLAlchemy sessions and query patterns.
Entry: src/db/session.py
Rule: Always use get_db() dependency injection
## notifications
Email (SendGrid) and SMS (Twilio) dispatch.
Entry: src/notifications/dispatch.py
# PLAN.md
# Generated by ChooChoo. Do not edit by hand.
## Goal
Refactor the authentication service to support
multi-factor authentication (MFA) via TOTP.
## Steps
1. [ ] Add TOTP secret column to users table
migration: src/db/migrations/0023_add_totp.py
2. [ ] Implement TOTP validation in auth service
src/auth/service.py → verify_totp()
3. [ ] Add /auth/mfa/setup and /auth/mfa/verify routes
src/api/auth.py
4. [ ] Write unit tests for new MFA paths
tests/auth/test_mfa.py (≥ 90% coverage)
5. [ ] Update AGENTS.md with new ADR-012
## Constraints
- Do not break existing JWT flow (ADR-001)
- TOTP secrets encrypted at rest (AES-256)
- Rate-limit /auth/mfa/verify to 5 attempts / 15 min
# ARCHITECTURE.md
# Generated by ChooChoo. Do not edit by hand.
## System Overview
payments-api is a stateless FastAPI service.
All state lives in PostgreSQL (primary data) and
Redis (sessions, rate limiting, event streams).
## Request Flow
Client → API Gateway → FastAPI → Service Layer
→ Repository Layer
→ PostgreSQL / Redis
## Key Modules
src/auth/ JWT issuance + TOTP (ADR-001, ADR-012)
src/payments/ Stripe integration (charges, webhooks)
src/db/ SQLAlchemy sessions + migration runner
src/api/ Route definitions (v1 + v2 namespaces)
## ADR Index
ADR-001 RS256 JWT for authentication
ADR-004 Redis Streams for webhook event bus
ADR-007 URL versioning (/v1/, /v2/)
ADR-012 TOTP-based MFA (in progress)
## Deployment
Docker → ECS Fargate (app)
RDS PostgreSQL 15 (primary)
ElastiCache Redis 7 (cache + streams)
# GOAL.md
# Generated by ChooChoo. Do not edit by hand.
## Current Sprint Goal
Implement MFA support without breaking existing
single-factor authentication flows.
## Success Criteria
- All existing auth tests continue to pass
- New /auth/mfa/* endpoints return correct responses
- TOTP validation rejects tokens older than 30 s
- Coverage for src/auth/ stays above 90%
## Out of Scope
- SMS-based MFA (deferred to ADR-013)
- Admin UI for MFA management (separate ticket)
- Recovery codes (phase 2)
## Definition of Done
- PR reviewed and approved
- CI green (lint + test + coverage)
- AGENTS.md updated with ADR-012 summary
- Deployed to staging and smoke-tested
flowchart TD
A([Client Request]) --> B[API Gateway]
B --> C{JWT Valid?}
C -- Yes --> D[FastAPI Router]
C -- No --> E([401 Unauthorized])
D --> F[Service Layer]
F --> G[Repository]
G --> H[(PostgreSQL)]
G --> I[(Redis)]
F --> J[Stripe API]
J --> K[Webhook Event]
K --> L[(Redis Streams)]