Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -406,6 +406,12 @@ This prevents the common failure mode: changing a shared type in one service and

## Configuration Reference

> **Want a ready-to-use starting point?** Copy the example configs:
> ```bash
> cp -r examples/.preflight /path/to/your/project/
> ```
> See [`examples/.preflight/README.md`](examples/.preflight/README.md) for details.

### `.preflight/config.yml`

Drop this in your project root. Every field is optional — defaults are sensible.
Expand Down
25 changes: 25 additions & 0 deletions examples/.preflight/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# `.preflight/` Example Config

Copy this directory into your project root to configure preflight:

```bash
cp -r examples/.preflight /path/to/your/project/
```

## Files

| File | Purpose |
|------|---------|
| `config.yml` | Main config — profile, related projects, thresholds, embeddings |
| `triage.yml` | Triage rules — which keywords trigger which classification level |
| `contracts/*.yml` | Manual contract definitions — supplement auto-extraction |

## Quick Setup

1. Copy the directory: `cp -r examples/.preflight ./`
2. Edit `config.yml` — set your `related_projects` paths
3. Edit `triage.yml` — add your domain-specific keywords to `always_check`
4. Optionally add contracts in `contracts/` for planned or external APIs
5. Commit `.preflight/` to your repo so your team shares the same config

All fields are optional. Defaults work well out of the box — only customize what you need.
29 changes: 29 additions & 0 deletions examples/.preflight/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# .preflight/config.yml — drop this in your project root
# All fields are optional. Defaults are sensible.
# See: https://github.com/TerminalGravity/preflight#configuration-reference

# Profile controls overall verbosity
# "minimal" — only flag ambiguous+, skip clarification detail
# "standard" — default behavior
# "full" — maximum detail on every non-trivial prompt
profile: standard

# Related projects for cross-service awareness
# Preflight will search these projects' indexes when your prompt
# touches shared contracts (types, routes, schemas).
related_projects:
# - path: /absolute/path/to/auth-service
# alias: auth-service
# - path: /absolute/path/to/shared-types
# alias: shared-types

# Behavioral thresholds
thresholds:
session_stale_minutes: 30 # warn if no activity for this long
max_tool_calls_before_checkpoint: 100 # suggest checkpoint after N tool calls
correction_pattern_threshold: 3 # min corrections before forming a pattern

# Embedding configuration
embeddings:
provider: local # "local" (Xenova, zero config) or "openai"
# openai_api_key: sk-... # only needed if provider is "openai"
47 changes: 47 additions & 0 deletions examples/.preflight/contracts/api.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# .preflight/contracts/api.yml — manual contract definitions
# These supplement auto-extracted contracts from your codebase.
# Manual definitions win on name conflicts with auto-extracted ones.
#
# Use this when:
# - You have contracts that aren't in code yet (planned APIs)
# - Auto-extraction misses something important
# - You want to document cross-service agreements explicitly

- name: User
kind: interface
description: Core user object shared across services
fields:
- name: id
type: string
required: true
- name: email
type: string
required: true
- name: role
type: "'admin' | 'member' | 'viewer'"
required: true
- name: createdAt
type: Date
required: true

- name: "POST /api/users"
kind: route
description: Create a new user account
fields:
- name: body
type: "{ email: string, role: string }"
required: true
- name: response
type: "{ user: User, token: string }"
required: true

- name: "GET /api/users/:id"
kind: route
description: Fetch user by ID
fields:
- name: params
type: "{ id: string }"
required: true
- name: response
type: User
required: true
38 changes: 38 additions & 0 deletions examples/.preflight/triage.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# .preflight/triage.yml — controls the triage classification engine
# Customize which prompts get flagged, skipped, or escalated.

rules:
# Prompts containing these words → always at least AMBIGUOUS
# Add domain terms that are too vague without context
always_check:
- rewards
- permissions
- migration
- schema
# - billing # uncomment for your domain
# - onboarding

# Prompts containing these words → TRIVIAL (pass through immediately)
# Common low-risk commands that don't need analysis
skip:
- commit
- format
- lint
- "git status"
- "git log"

# Prompts containing these words → CROSS-SERVICE
# Triggers search across related_projects defined in config.yml
cross_service_keywords:
- auth
- notification
- event
- webhook
# - payment
# - analytics

# How aggressively to classify
# "relaxed" — more prompts pass as clear (faster, less interruption)
# "standard" — balanced (recommended)
# "strict" — more prompts flagged as ambiguous (thorough, more interruptions)
strictness: standard
Loading