Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.praison.ai/llms.txt

Use this file to discover all available pages before exploring further.

Context Monitor

The Context Monitor writes runtime context snapshots to disk, providing visibility into exactly what’s being sent to the model.

Agent-Centric Quick Start

from praisonaiagents import Agent
from praisonaiagents import ManagerConfig

# Enable monitoring via context param
agent = Agent(
    instructions="You are helpful.",
    context=ManagerConfig(
        monitor_enabled=True,
        monitor_path="./context.txt",
        monitor_format="human",  # or "json"
        redact_sensitive=True,
    ),
)

# Monitoring happens automatically during chat
response = agent.chat("Hello!")
# Check ./context.txt for snapshot

Low-Level API

from praisonaiagents import (
    ContextMonitor,
    ContextLedger,
    BudgetAllocation,
)

# Create monitor
monitor = ContextMonitor(
    enabled=True,
    path="./context.txt",
    format="human",
    frequency="turn",
)

# Write snapshot
monitor.snapshot(
    ledger=ledger_data,
    budget=budget_data,
    messages=messages,
    trigger="turn",
)

CLI Usage

# Enable monitoring when starting chat
praisonai chat --context-monitor

# Custom path and format
praisonai chat --context-monitor --context-monitor-path ./debug/context.json --context-monitor-format json

# In-session commands
/context on          # Enable monitoring
/context off         # Disable monitoring
/context dump        # Write snapshot now
/context path ./ctx  # Change output path
/context format json # Change format

Output Formats

Human-Readable (context.txt)

================================================================================
PRAISONAI CONTEXT SNAPSHOT
================================================================================
Timestamp: 2025-01-07T19:30:45Z
Session ID: abc123
Agent: CodeAssistant
Model: gpt-4o-mini
Model Limit: 128,000 tokens
Output Reserve: 8,000 tokens
Usable Budget: 120,000 tokens

--------------------------------------------------------------------------------
TOKEN LEDGER
--------------------------------------------------------------------------------
Component          | Tokens  | Budget  | % Used
-------------------|---------|---------|--------
System Prompt      |    1250 |    2000 |  62.5%
History            |   45000 |   72000 |  62.5%
Tool Outputs       |   18000 |   20000 |  90.0%
-------------------|---------|---------|--------
TOTAL              |   66820 |  120000 |  55.7%

--------------------------------------------------------------------------------
CONVERSATION HISTORY (12 turns)
--------------------------------------------------------------------------------
[Turn 1] USER: Help me refactor the authentication module
[Turn 2] ASSISTANT: I'll help you refactor...
...
================================================================================

JSON (context.json)

{
  "timestamp": "2025-01-07T19:30:45Z",
  "session_id": "abc123",
  "agent_name": "CodeAssistant",
  "model_name": "gpt-4o-mini",
  "budget": {
    "model_limit": 128000,
    "output_reserve": 8000,
    "usable": 120000
  },
  "ledger": {
    "system_prompt": 1250,
    "history": 45000,
    "tool_outputs": 18000,
    "total": 66820
  },
  "utilization": 0.557,
  "messages": [...],
  "warnings": []
}

Update Frequency

FrequencyTriggerUse Case
turnAfter each user/assistant turnGeneral monitoring
tool_callBefore/after each tool callDebug tool output growth
manualOnly via /context dumpOn-demand inspection
overflowWhen budget exceededAlert-based
monitor = ContextMonitor(
    enabled=True,
    frequency="tool_call",  # Write on every tool call
)

Sensitive Data Redaction

By default, sensitive data is redacted in snapshots:
from praisonaiagents import redact_sensitive

text = "API key: sk-proj-abc123..."
redacted = redact_sensitive(text)
# Output: "API key: [REDACTED]"
Patterns redacted:
  • API keys (sk-, api_key, etc.)
  • Passwords
  • Tokens
  • Connection strings
# Disable redaction (not recommended)
praisonai chat --context-monitor --no-context-redact

Multi-Agent Monitoring

from praisonaiagents import MultiAgentMonitor

# Create per-agent monitors
multi_monitor = MultiAgentMonitor(base_path="./context/")

# Get monitor for each agent
researcher_monitor = multi_monitor.get_agent_monitor("researcher")
writer_monitor = multi_monitor.get_agent_monitor("writer")

# Enable all
multi_monitor.enable_all()
Output files:
context/
├── context_researcher.txt
├── context_writer.txt
└── context_combined.txt

Safety Features

  1. Opt-in by default: Monitoring is disabled unless explicitly enabled
  2. Redaction: Sensitive data redacted by default
  3. Atomic writes: Uses temp file + rename to prevent corruption
  4. Respects ignore rules: Honors .praisonignore for file content

Configuration

# config.yaml
context:
  monitor:
    enabled: false
    path: ./context.txt
    format: human
    frequency: turn
    redact_sensitive: true

Environment Variables

PRAISONAI_CONTEXT_MONITOR=true
PRAISONAI_CONTEXT_MONITOR_PATH=./context.txt
PRAISONAI_CONTEXT_MONITOR_FORMAT=human
PRAISONAI_CONTEXT_MONITOR_FREQUENCY=turn
PRAISONAI_CONTEXT_REDACT=true

Next Steps