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.
Agent Hooks
Intercept and modify agent operations with hooks. Supports 20 hook events for code, commands, prompts, LLM calls, tool calls, and lifecycle events.
Quick Start
import { createHooksManager } from 'praisonai';
const hooks = createHooksManager();
// Log all LLM calls
hooks.register('pre_llm_call', async (context) => {
console.log('LLM Request:', context.prompt);
return context;
});
// Validate tool calls
hooks.register('pre_tool_call', async (context) => {
if (context.toolName === 'dangerous_tool') {
console.warn('Blocked dangerous tool');
return null; // Block the operation
}
return context;
});
Hook Events
Operation Hooks (Python Parity)
// Code operations
hooks.register('pre_read_code', handler);
hooks.register('post_read_code', handler);
hooks.register('pre_write_code', handler);
hooks.register('post_write_code', handler);
// Command operations
hooks.register('pre_run_command', handler);
hooks.register('post_run_command', handler);
// Prompt operations
hooks.register('pre_user_prompt', handler);
hooks.register('post_user_prompt', handler);
// MCP operations
hooks.register('pre_mcp_tool_use', handler);
hooks.register('post_mcp_tool_use', handler);
// LLM call hooks
hooks.register('pre_llm_call', async (ctx) => {
// Modify prompt, add context, etc.
return ctx;
});
hooks.register('post_llm_call', async (ctx) => {
// Log response, filter content, etc.
return ctx;
});
// Tool call hooks
hooks.register('pre_tool_call', async (ctx) => {
// Validate arguments, block dangerous tools
return ctx;
});
hooks.register('post_tool_call', async (ctx) => {
// Log results, modify output
return ctx;
});
Lifecycle Hooks
// Agent lifecycle
hooks.register('agent_start', (ctx) => console.log('Agent started'));
hooks.register('agent_complete', (ctx) => console.log('Agent completed'));
// Run lifecycle
hooks.register('run_started', handler);
hooks.register('run_completed', handler);
Blocking Operations
Return null from a hook to block the operation:
hooks.register('pre_tool_call', async (context) => {
const dangerousTools = ['delete_file', 'execute_shell'];
if (dangerousTools.includes(context.toolName)) {
console.warn(`Blocked: ${context.toolName}`);
return null; // Block the operation
}
return context; // Allow the operation
});
Modifying Context
Return modified context to change the operation:
hooks.register('pre_llm_call', async (context) => {
// Add system context
context.prompt = `[Safety Mode Active]\n${context.prompt}`;
return context;
});
hooks.register('post_llm_call', async (context) => {
// Redact sensitive info
context.response = context.response.replace(/\b\d{16}\b/g, '****');
return context;
});
Factory Functions
import { createLoggingOperationHooks, createValidationOperationHooks } from 'praisonai';
// Pre-configured logging
const loggingHooks = createLoggingOperationHooks((event, ctx) => {
console.log(`[${event}]`, ctx);
});
// Pre-configured validation
const validationHooks = createValidationOperationHooks((event, ctx) => {
if (!ctx.agentId) {
return { valid: false, reason: 'Missing agentId' };
}
return { valid: true };
});
Hook Priority
// Higher priority runs first
hooks.register('pre_llm_call', handler1, { priority: 10 });
hooks.register('pre_llm_call', handler2, { priority: 5 });
// handler1 runs before handler2
Hook Timeout
hooks.register('pre_llm_call', slowHandler, {
timeout: 5000 // 5 second timeout
});