home / skills / laurigates / claude-plugins / configure-memory-profiling

configure-memory-profiling skill

/configure-plugin/skills/configure-memory-profiling

This skill checks and configures memory profiling for Python projects using pytest-memray to detect leaks and enforce memory thresholds.

npx playbooks add skill laurigates/claude-plugins --skill configure-memory-profiling

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
7.6 KB
---
model: haiku
created: 2025-12-16
modified: 2026-02-10
reviewed: 2025-12-16
description: Check and configure memory profiling with pytest-memray for Python projects
allowed-tools: Glob, Grep, Read, Write, Edit, Bash, AskUserQuestion, TodoWrite, WebSearch, WebFetch
argument-hint: "[--check-only] [--fix] [--threshold <mb>] [--native]"
name: configure-memory-profiling
---

# /configure:memory-profiling

Check and configure memory profiling infrastructure for Python projects using pytest-memray.

## When to Use This Skill

| Use this skill when... | Use another approach when... |
|------------------------|------------------------------|
| Setting up memory profiling for a Python project from scratch | Project is not Python — memray/pytest-memray are Python-only |
| Adding pytest-memray integration for CI memory regression detection | Profiling CPU performance — use cProfile or py-spy instead |
| Configuring memory leak detection in test suites | Running load/stress tests — use `/configure:load-tests` |
| Setting memory thresholds and allocation benchmarks for CI | Quick one-off memory check — run `uv run pytest --memray` directly |
| Enabling native C extension stack tracking for deep profiling | Profiling production systems live — use memray standalone or Grafana |

## Context

- Project root: !`pwd`
- Python project: !`find . -maxdepth 1 \( -name 'pyproject.toml' -o -name 'setup.py' \) 2>/dev/null`
- pytest-memray installed: !`grep -r 'pytest-memray' pyproject.toml requirements*.txt 2>/dev/null`
- memray installed: !`grep -r 'memray' pyproject.toml requirements*.txt 2>/dev/null`
- Conftest fixtures: !`grep -l 'memray' tests/conftest.py 2>/dev/null`
- Memory test files: !`find tests -maxdepth 2 -name '*memory*' -o -name '*memray*' 2>/dev/null`
- Benchmark tests: !`find tests -maxdepth 2 -type d -name 'benchmarks' 2>/dev/null`
- CI workflows: !`find .github/workflows -maxdepth 1 -name '*memory*' 2>/dev/null`
- Memory reports dir: !`find . -maxdepth 1 -type d -name 'memory-reports' 2>/dev/null`

## Parameters

Parse from `$ARGUMENTS`:

- `--check-only`: Report memory profiling compliance status without modifications
- `--fix`: Apply all fixes automatically without prompting
- `--threshold <mb>`: Set default memory threshold in MB (default: 100)
- `--native`: Enable native stack tracking for C extensions

**Supported tools:**

| Tool | Best For |
|------|----------|
| pytest-memray (recommended) | Test-integrated profiling, CI/CD memory limits, leak detection |
| memray standalone | Deep analysis, flame graphs, production profiling |
| tracemalloc | Quick debugging, no dependencies, lightweight |

## Execution

Execute this memory profiling configuration check:

### Step 1: Verify this is a Python project

Read the context values. If no `pyproject.toml` or `setup.py` is found, report "Not a Python project" and stop.

### Step 2: Check latest tool versions

Use WebSearch or WebFetch to verify current versions:

1. **pytest-memray**: Check [PyPI](https://pypi.org/project/pytest-memray/)
2. **memray**: Check [PyPI](https://pypi.org/project/memray/)

### Step 3: Analyze current memory profiling setup

Check for complete setup:

- pytest-memray installed as dev dependency
- memray backend installed
- pytest configuration in pyproject.toml (markers, addopts)
- Memory limit tests using `@pytest.mark.limit_memory`
- Leak detection enabled (`--memray-leak-detection`)
- Native tracking configured (if `--native` flag)
- CI/CD integration configured
- Reports directory exists

### Step 4: Generate compliance report

Print a compliance report covering:
- Installation status (pytest-memray, memray, pytest versions)
- Configuration (pytest integration, markers, leak detection, native tracking)
- Test coverage (memory limit tests, allocation benchmarks)
- CI/CD integration (workflow, threshold, artifact upload, trend tracking)

End with overall issue count and recommendations.

If `--check-only` is set, stop here.

### Step 5: Install and configure pytest-memray (if --fix or user confirms)

1. Install pytest-memray: `uv add --group dev pytest-memray`
2. Install native support if `--native`: `uv add --group dev pytest-memray[native]`
3. Update `pyproject.toml` with pytest configuration (markers, filterwarnings)
4. Create `memory-reports/` directory
5. Use configuration templates from [REFERENCE.md](REFERENCE.md)

### Step 6: Create memory profiling test files

1. Add memory fixtures to `tests/conftest.py` (reports dir setup, threshold fixture, data generator)
2. Create `tests/test_memory_example.py` with example memory limit tests
3. Create `tests/benchmarks/test_memory_benchmarks.py` for trend tracking
4. Use test templates from [REFERENCE.md](REFERENCE.md)

### Step 7: Add package scripts

Add memory profiling commands to Makefile or pyproject.toml:
- `test-memory`: `uv run pytest --memray`
- `test-memory-report`: Run with bin output + generate flame graph
- `test-memory-leaks`: `uv run pytest --memray --memray-leak-detection`
- `test-memory-native`: `uv run pytest --memray --native`

### Step 8: Configure CI/CD integration

Create `.github/workflows/memory-profiling.yml` with:
- Memory profiling on PRs (detect regressions)
- Scheduled weekly benchmarks for trend tracking
- Flame graph generation
- PR comment with results
- Use workflow template from [REFERENCE.md](REFERENCE.md)

### Step 9: Update standards tracking

Update `.project-standards.yaml`:

```yaml
components:
  memory_profiling: "2025.1"
  memory_profiling_tool: "pytest-memray"
  memory_profiling_threshold_mb: 100
  memory_profiling_leak_detection: true
  memory_profiling_ci: true
  memory_profiling_native: false
```

### Step 10: Print final compliance report

Print a summary of packages installed, configuration applied, test files created, commands available, CI/CD configured, and next steps for the user.

For detailed test templates, CI workflows, and standalone memray commands, see [REFERENCE.md](REFERENCE.md).

## Agentic Optimizations

| Context | Command |
|---------|---------|
| Quick compliance check | `/configure:memory-profiling --check-only` |
| Auto-fix all issues | `/configure:memory-profiling --fix` |
| Run memory tests | `uv run pytest --memray` |
| Detect memory leaks | `uv run pytest --memray --memray-leak-detection` |
| Run with native tracking | `uv run pytest --memray --native` |
| Generate flamegraph | `uv run memray flamegraph output.bin -o flamegraph.html` |

## Flags

| Flag | Description |
|------|-------------|
| `--check-only` | Report status without offering fixes |
| `--fix` | Apply all fixes automatically without prompting |
| `--threshold <mb>` | Set default memory threshold in MB (default: 100) |
| `--native` | Enable native stack tracking for C extensions |

## Examples

```bash
# Check compliance and offer fixes
/configure:memory-profiling

# Check only, no modifications
/configure:memory-profiling --check-only

# Auto-fix with custom threshold
/configure:memory-profiling --fix --threshold 200

# Enable native tracking for C extensions
/configure:memory-profiling --fix --native
```

## Error Handling

- **Not a Python project**: Skip with message, suggest manual setup
- **pytest not installed**: Offer to install pytest first
- **memray not supported**: Note platform limitations (Linux/macOS only)
- **Native tracking unavailable**: Warn about missing debug symbols
- **CI workflow exists**: Offer to update or skip

## See Also

- `/configure:tests` - Configure testing frameworks
- `/configure:coverage` - Code coverage configuration
- `/configure:load-tests` - Load and performance testing
- `/configure:all` - Run all compliance checks
- **pytest-memray docs**: https://pytest-memray.readthedocs.io
- **memray docs**: https://bloomberg.github.io/memray

Overview

This skill checks and configures memory profiling for Python projects using pytest-memray. It detects current setup, reports compliance, and can apply fixes to install tools, add test fixtures, and integrate profiling into CI. The skill supports optional native tracking for C extensions and configurable memory thresholds.

How this skill works

The skill inspects the project root for Python metadata (pyproject.toml or setup.py) and searches dependencies and test files for memray-related entries. It verifies installation and configuration (pytest-memray, memray, pytest settings, markers, leak detection) and scans CI workflows and reports directories. When requested, it installs or updates packages, writes pytest configuration and test templates, creates a memory-reports directory, and adds CI workflow and project-standards entries.

When to use it

  • Setting up memory profiling for a Python project from scratch
  • Adding pytest-memray integration to CI to detect memory regressions
  • Creating memory limit tests and leak detection in test suites
  • Enabling native C extension stack tracking for deep analysis
  • Establishing trend tracking with benchmark memory tests

Best practices

  • Keep pytest-memray and memray as dev dependencies and pin versions in pyproject.toml
  • Add pytest markers and addopts to central pytest config to enable consistent runs
  • Store binary reports in a dedicated memory-reports/ directory and upload as CI artifacts
  • Use a reasonable threshold (default 100 MB) and tune it per-project with --threshold
  • Schedule periodic benchmark runs in CI to track trends and detect regressions early

Example use cases

  • Run a compliance check to detect missing memray tooling and CI integration
  • Auto-fix by installing pytest-memray, adding fixtures, and creating sample memory tests
  • Enable native tracking for a project with C extensions using the --native flag
  • Add a GitHub Actions workflow to run memory tests on PRs and weekly benchmarks
  • Generate flamegraphs from memray outputs for deep allocation analysis

FAQ

What if the repository is not a Python project?

The skill will report "Not a Python project" and stop. It can provide manual setup guidance but will not apply changes.

Can this run without modifying files?

Yes—use --check-only to run a full compliance report without making any changes.

Does native tracking work everywhere?

Native tracking depends on platform support and debug symbols; the skill warns if native support is unavailable or unsupported.