Chapter 2: Getting Started with PMAT

Chapter Status: ✅ 100% Working (8/8 examples)

StatusCountExamples
✅ Working8All context features tested
⚠️ Not Implemented0Planned for future versions
❌ Broken0Known issues, needs fixing
📋 Planned0Future roadmap features

Last updated: 2025-09-09
PMAT version: pmat 2.69.0
Test-Driven: All examples validated in tests/ch02/test_context.sh

Your First PMAT Analysis

After installing PMAT (Chapter 1), you’re ready to start analyzing code. This chapter covers the essential commands you’ll use daily with PMAT.

The Context Command: Your Gateway to AI-Powered Analysis

The pmat context command is the foundation of PMAT’s AI integration capabilities. It generates comprehensive repository context that can be consumed by AI agents, LLMs, and other analysis tools.

Basic Context Generation

The simplest way to generate context is to run PMAT in your project directory:

# Generate context for current directory
pmat context

# Generate context for specific directory
pmat context /path/to/project

# Save context to file
pmat context > project_context.txt

Example Output

When you run pmat context on a Python project, you’ll see:

📁 Repository Context
=====================

Project: my-application
Files: 156
Total Lines: 8,432
Languages: Python (85%), JavaScript (10%), YAML (5%)

## Structure

. ├── README.md (127 lines) ├── src/ │ ├── main.py (245 lines) │ ├── models/ │ │ ├── user.py (189 lines) │ │ ├── product.py (234 lines) │ │ └── order.py (301 lines) │ ├── services/ │ │ ├── auth.py (156 lines) │ │ ├── payment.py (423 lines) │ │ └── notification.py (178 lines) │ └── utils/ │ ├── config.py (89 lines) │ └── helpers.py (112 lines) ├── tests/ (2,145 lines total) └── docs/ (1,234 lines total)


## Key Files

### src/main.py
Main application entry point with FastAPI setup, route definitions, and middleware configuration.

### src/services/payment.py
Payment processing service handling Stripe integration, refund logic, and transaction logging.

### src/models/user.py
User model with SQLAlchemy ORM, authentication methods, and role-based permissions.

Filtering Context

Not all files are relevant for every analysis. PMAT provides powerful filtering options:

Include Specific Files

# Include only Python files
pmat context --include="*.py"

# Include multiple patterns
pmat context --include="*.py,*.js,*.ts"

# Include by directory
pmat context --include="src/**/*.py"

Exclude Patterns

# Exclude test files
pmat context --exclude="tests/*,*_test.py"

# Exclude dependencies and build artifacts
pmat context --exclude="node_modules/,venv/,build/,dist/"

# Exclude by size (files over 1MB)
pmat context --exclude-large

Combined Filtering

# Python source files only, no tests or vendors
pmat context \
    --include="*.py" \
    --exclude="tests/,vendor/,*_test.py" \
    --max-file-size=500kb

Output Formats

PMAT supports multiple output formats for different use cases:

JSON Format

Perfect for programmatic consumption:

pmat context --format json > context.json

Output structure:

{
  "project": {
    "name": "my-application",
    "path": "/home/user/projects/my-application",
    "vcs": "git",
    "branch": "main"
  },
  "metrics": {
    "files": 156,
    "total_lines": 8432,
    "languages": {
      "Python": 7167,
      "JavaScript": 843,
      "YAML": 422
    }
  },
  "structure": {
    "src": {
      "type": "directory",
      "files": 12,
      "lines": 2354,
      "children": {
        "main.py": {
          "type": "file",
          "lines": 245,
          "language": "Python",
          "complexity": 8
        }
      }
    }
  },
  "dependencies": ["fastapi", "sqlalchemy", "pytest"],
  "quality_metrics": {
    "complexity_average": 6.2,
    "test_coverage": 82.5,
    "technical_debt_grade": "B+"
  }
}

Markdown Format

Ideal for documentation and reports:

pmat context --format markdown > PROJECT_CONTEXT.md

XML Format

For enterprise integrations:

pmat context --format xml > context.xml

AI-Optimized Format

Specifically designed for LLM consumption:

pmat context --ai-format

This format includes:

  • Structured tags for easy parsing
  • Token-efficient representation
  • Relevance scoring for files
  • Semantic grouping of related code

Context with Analysis

Combine context generation with code analysis for richer insights:

# Include quality metrics
pmat context --with-analysis

Enhanced output includes:

## Code Quality Analysis
- **Complexity**: Average 6.2, Max 15 (payment.py:process_transaction)
- **Duplication**: 3.2% (18 similar blocks detected)
- **Test Coverage**: 82.5% (2,145 test lines)
- **Technical Debt**: Grade B+ (Score: 1.8/5.0)

## Security Insights
- No hard-coded secrets detected
- 2 dependencies with known vulnerabilities (minor)
- Authentication properly implemented

## Architecture Patterns
- MVC-like structure detected
- Service layer pattern in use
- Repository pattern for data access
- Dependency injection configured

## Recommendations
1. Reduce complexity in payment.py:process_transaction (cyclomatic: 15)
2. Update vulnerable dependencies: requests==2.25.1, pyyaml==5.3.1
3. Add missing tests for error handling paths
4. Consider extracting business logic from models

Size Management

For large repositories, manage context size effectively:

Token Limits

For AI/LLM consumption, limit by tokens:

# Limit to 4000 tokens (GPT-3.5 context window)
pmat context --max-tokens 4000

# Limit to 8000 tokens (GPT-4 context window)
pmat context --max-tokens 8000

# Limit to 32000 tokens (Claude context window)
pmat context --max-tokens 32000

File Limits

Control the number of files included:

# Include only top 10 most relevant files
pmat context --max-files 10

# Prioritize by complexity
pmat context --max-files 20 --sort-by complexity

# Prioritize by recent changes
pmat context --max-files 20 --sort-by recency

Smart Truncation

PMAT intelligently truncates large files:

# Smart truncation (keeps important parts)
pmat context --smart-truncate

# Truncate at specific line count
pmat context --max-lines-per-file 500

Caching for Performance

For large repositories, use caching to speed up repeated context generation:

# Enable caching
pmat context --cache

# Force cache refresh
pmat context --cache --refresh

# Clear cache
pmat context --clear-cache

# Set cache TTL (time to live)
pmat context --cache --ttl 3600  # 1 hour

Integration Examples

With Claude or ChatGPT

# Generate and copy to clipboard (macOS)
pmat context --ai-format | pbcopy

# Generate and copy to clipboard (Linux)
pmat context --ai-format | xclip -selection clipboard

# Generate with specific instructions
pmat context --ai-format --prepend "Analyze this codebase for security vulnerabilities:"

With VS Code

# Generate context for current workspace
pmat context --format json > .vscode/pmat-context.json

In CI/CD Pipelines

# GitHub Actions example
- name: Generate PMAT Context
  run: |
    pmat context --format json > context.json
    pmat context --format markdown > context.md
    
- name: Upload Context Artifacts
  uses: actions/upload-artifact@v3
  with:
    name: pmat-context
    path: |
      context.json
      context.md

Advanced Options

Custom Templates

Use custom templates for context output:

# Use custom template
pmat context --template templates/context.hbs

# Built-in templates
pmat context --template minimal
pmat context --template detailed
pmat context --template security-focused

Multiple Repositories

Analyze multiple repositories in one context:

# Multiple paths
pmat context repo1/ repo2/ repo3/

# From file list
pmat context --repos-file projects.txt

# Monorepo with specific packages
pmat context --monorepo --packages="api,web,shared"

Incremental Context

For continuous analysis:

# Generate incremental context (changes since last run)
pmat context --incremental

# Changes since specific commit
pmat context --since HEAD~10

# Changes in last 24 hours
pmat context --since "24 hours ago"

Troubleshooting

Common Issues

Large Repository Timeout

# Increase timeout
pmat context --timeout 300

# Use parallel processing
pmat context --parallel

# Exclude large directories
pmat context --exclude="data/,logs/,artifacts/"

Memory Issues

# Use streaming mode for large repos
pmat context --stream

# Limit memory usage
pmat context --max-memory 2G

Permission Errors

# Skip files with permission errors
pmat context --skip-errors

# Run with specific permissions
sudo pmat context --user $(whoami)

Best Practices

  1. Start Small: Begin with filtered context before analyzing entire repositories
  2. Use Caching: Enable caching for large repositories to improve performance
  3. Filter Noise: Exclude test files, dependencies, and generated code for cleaner context
  4. Choose Right Format: Use JSON for tools, Markdown for humans, AI-format for LLMs
  5. Size Appropriately: Match context size to your consumption method’s limits
  6. Regular Updates: Refresh context regularly for evolving codebases
  7. Security First: Never include sensitive files (.env, secrets, keys) in context

Summary

The pmat context command is your starting point for AI-powered code analysis. It provides:

  • Flexible Generation: Multiple formats and filtering options
  • Smart Analysis: Optional quality metrics and insights
  • Performance: Caching and incremental updates
  • Integration Ready: Works with any AI tool or LLM
  • Size Management: Token and file limits for optimal consumption

Master this command, and you’ll unlock the full potential of AI-assisted development with PMAT.

Next Steps