Skip to content

topcheer/python-debug-agent

Repository files navigation

Python Debug Agent

debug-agent-py Tools Inspectors Python PyPI

An AI-powered runtime debugging agent that embeds directly into your Python web application. Add one dependency, configure an LLM key, and chat with your live app at /agent to inspect memory, threads, GC, modules, database connections, Redis, Django models/URLs, Celery tasks, Flask extensions, Jinja2 templates, signals, routes, HTTP requests, and more — 113 diagnostic tools across 38 inspectors.

Version Support

Python Version Status
3.8 Not supported
3.9 Minimum supported
3.10 Supported
3.11 Supported
3.12 Supported
3.13 Supported
3.14 Tested

Uses from __future__ import annotations so X | Y union types work on Python 3.9+. Optional dependencies (Flask, SQLAlchemy, Redis, Celery) are not required at install time.

Quick Start

1. Install

pip install debug-agent-py

2. Integrate (Flask)

from flask import Flask
from debug_agent import setup_debug_agent

app = Flask(__name__)

# One line to integrate
setup_debug_agent(app)

3. Configure LLM

export LLM_API_KEY=your-key
export LLM_BASE_URL=https://open.bigmodel.cn/api/coding/paas/v4  # default
export LLM_MODEL=glm-5.2                                          # default

Supports any OpenAI-compatible endpoint.

4. Run and open

http://localhost:8000/agent

Features

  • Streaming AI responses with real-time tool call badges (pending / success / error)
  • Context compression — automatically summarizes old conversation when token limit is approached
  • Dark-themed chat UI with full markdown rendering (tables, code blocks, lists)
  • Max tool rounds (25) with forced final summary when limit is reached
  • 113 diagnostic tools across 38 inspectors
  • Works with Flask, FastAPI, and Django
  • Zero external dependencies (no Datadog, no Grafana, no APM)

Inspectors & Tools (113)

Memory Inspector

Tool Description
get_tracemalloc_stats Python tracemalloc top allocations by file/line
get_object_counts Count objects by type via gc
get_gc_stats gc.get_stats() generation details
get_ref_cycles Count reference cycles detected by gc
trigger_gc Force garbage collection

Threads Inspector

Tool Description
get_thread_info List all threads with name, daemon, alive status
get_thread_count Active thread count
get_thread_summary Thread state distribution
get_thread_stacks Current frame/stack for all threads

Database Inspector

Tool Description
get_sqlalchemy_engines Find SQLAlchemy engines and pool status
get_db_connections Inspect database connection pools
get_db_pool_config Pool configuration: size, timeout, recycle settings

Modules Inspector

Tool Description
get_loaded_modules List loaded Python modules (sys.modules) with versions
get_module_count Total loaded module count
get_installed_packages List installed packages from pip

Async Tasks Inspector

Tool Description
get_async_tasks List pending asyncio tasks
get_event_loop_info Event loop details: type, running state
get_pending_callbacks List scheduled callbacks on the event loop

Runtime Inspector

Tool Description
get_memory_info Process memory info (RSS, VMS, shared)
get_cpu_usage CPU usage percentage
get_python_info Python version, implementation, executable path
get_open_fds Open file descriptor count and limits

System Inspector

Tool Description
get_system_info Hostname, platform, CPU cores, disk
get_environment_variables Environment variables (masked secrets)
get_disk_usage Disk usage for the working directory

Framework Inspector

Tool Description
get_routes List all registered web routes/endpoints
get_middleware List registered middleware

HTTP Tracker Inspector

Tool Description
get_recent_requests Recent HTTP requests ring buffer
get_slow_requests Slowest requests by duration
get_error_requests Error requests (4xx/5xx)
get_request_stats P50/P95/P99 latency, error rate

Redis Inspector

Tool Description
get_redis_info Redis server info: memory, clients, persistence
get_redis_keys Scan Redis keyspace with pattern matching
get_redis_config Redis runtime configuration (CONFIG GET)
get_redis_slowlog Redis slow query log entries

Django Inspector

Tool Description
get_django_models List Django models with app label, table name, field count
get_django_urls List all URL patterns with view names and namespaces
get_django_settings Key Django settings (DBs, INSTALLED_APPS, MIDDLEWARE)
get_django_migrations Migration status per app: applied vs pending

Celery Inspector

Tool Description
get_celery_tasks List registered Celery tasks with routing info
get_celery_workers Active Celery workers with pool and concurrency
get_celery_queues Queue depth and message stats per queue

Flask Extensions Inspector

Tool Description
get_flask_extensions List registered Flask extensions and their bindings
get_flask_blueprints List Flask blueprints with URL prefixes and routes
get_flask_config Flask configuration object values (secrets masked)

Jinja2 Inspector

Tool Description
get_jinja_templates List loaded Jinja2 templates with loader paths
get_jinja_filters List registered Jinja2 filters, tests, and globals

Signals Inspector

Tool Description
get_signal_handlers List Python signal handlers registered via signal module
get_django_signals List Django signal receivers connected to senders

WSGI/ASGI Inspector

Tool Description
get_wsgi_info WSGI server details (Gunicorn/uWSGI workers, config)
get_asgi_apps List ASGI application scope and middleware chain

Logging Inspector

Tool Description
get_logging_tree Python logging module logger hierarchy and levels
get_recent_logs Recent log entries from the built-in ring buffer
get_logging_config Current logging configuration (handlers, formatters, levels)
set_log_level Dynamically set the log level for a named logger

Cache Inspector

Tool Description
get_cache_info Stats for registered caches (hit rate, miss count, key count)
get_cache_keys List keys from a registered cache with optional prefix filter
clear_cache Clear all entries from a registered cache

Outbound HTTP Inspector

Tool Description
get_http_pool_stats HTTP client connection pool stats (connections, keepalive, timeouts)
get_outbound_summary Aggregated outbound HTTP call stats (total, avg latency, error rate)

File Descriptor Inspector

Tool Description
get_fd_count Current number of open file descriptors
get_fd_limit File descriptor soft and hard limits (RLIMIT_NOFILE)
get_fd_list List open file descriptors with type and details

Metrics Inspector

Tool Description
get_registered_metrics List all registered metrics from prometheus_client
get_metric_value Get current value of a specific metric by name

FastAPI Inspector

Tool Description
get_fastapi_openapi List FastAPI routes, schemas, and OpenAPI spec details

Warnings Inspector

Tool Description
get_warnings List captured Python warnings with category, message, and location

Deadlock & Lock Contention Inspector (v0.6.0)

Tool Description
get_lock_contention Threading lock contention stats (wait time, hold time, acquisition count)
detect_deadlock Analyze all threads for deadlock patterns (circular wait detection)
get_mutex_stats Per-lock statistics: total acquisitions, contentions, average wait time

Database Migration Inspector (v0.6.0)

Tool Description
get_migration_status Current schema version, applied count, last migration applied
get_pending_migrations Migrations not yet applied (version, description, dependencies)
get_migration_history Applied migration history (version, applied_at, duration_ms)

Configuration Inspector (v0.6.0)

Tool Description
get_config_snapshot All registered config values (sensitive keys masked)
get_env_vars_masked Process environment variables with secret values redacted
get_config_sources Config source hierarchy (env, file, defaults) with effective values

Feature Flags Inspector (v0.6.0)

Tool Description
get_feature_flags List all registered feature flags with current state
evaluate_feature_flag Evaluate a specific flag for a given context/user

Endpoint Testing Inspector (v0.6.0)

Tool Description
test_endpoint Make an HTTP request to own app, return full response (status, headers, body)
batch_test_endpoints Test multiple endpoints in one call with aggregated results
get_endpoint_coverage Compare registered routes vs tested endpoints (coverage report)

Connection Pool Inspector (v0.6.0)

Tool Description
get_pool_details Detailed DB pool stats (pool size, checked-in, checked-out, overflow)
detect_pool_leaks Heuristic leak detection (growing pool, high wait ratio, saturation)
get_pool_wait_stats Connection acquire wait stats (avg, P95, max wait, timeout count)

CPU Profiler Inspector (v0.7.0)

Tool Description
start_cpu_profile Start a CPU profiling session (cProfile/yappi)
stop_cpu_profile Stop CPU profiling and return collected profile data
get_top_functions Get top CPU-consuming functions from the current profile

Memory Leak Detector Inspector (v0.7.0)

Tool Description
take_heap_snapshot Capture a heap snapshot for leak analysis (tracemalloc)
compare_heap_snapshots Compare two heap snapshots to identify object growth
get_leak_candidates Identify objects likely to be memory leaks

Deployment/Build Info Inspector (v0.7.0)

Tool Description
get_build_info Build version, commit hash, and package metadata
get_deployment_info Deployment environment, container, and orchestration metadata
get_runtime_version Python interpreter version and implementation details

Snapshot & Diff Inspector (v0.7.0)

Tool Description
take_snapshot Capture a runtime state snapshot
compare_snapshots Compare two snapshots to identify state changes
list_snapshots List all saved snapshots with timestamps

Service Registry Inspector (v0.7.0)

Tool Description
get_registered_services List all registered application services
get_service_dependencies Map service-to-service dependency graph

Custom Tools

from debug_agent import debug_tool

@debug_tool('check_redis', 'Check Redis connection')
def check_redis():
    return {'connected': True}

Configuration

Env Var Default Description
LLM_BASE_URL https://open.bigmodel.cn/api/coding/paas/v4 LLM endpoint
LLM_API_KEY (required) API key
LLM_MODEL glm-5.2 Model name
LLM_MAX_TOOL_ROUNDS 25 Max tool-calling rounds
LLM_CONTEXT_WINDOW_TOKENS 100000 Context window size

Run the Demo

The demo uses Flask + redis-py + SQLAlchemy + Celery. Start Redis with Docker Compose first:

Docker Compose

# docker-compose.yml
services:
  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"
    command: redis-server --save 60 1 --loglevel warning
docker compose up -d

Start the app

export LLM_API_KEY=your-key
cd demo && python app.py
# Open http://localhost:8000/agent

PyPI

debug-agent-py

Built With

ggcode

This project was built using ggcode — an AI coding assistant for terminal-based development.

License

MIT

About

AI-powered runtime debugging agent embedded in Python applications. Chat with your live app at /agent to inspect memory, threads, routes, and HTTP requests.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors