use Cognesy\Agents\Hooks\Guards\StepsLimitHook;
use Cognesy\Agents\Hooks\Guards\TokenUsageLimitHook;
use Cognesy\Agents\Hooks\Guards\ExecutionTimeLimitHook;
// Stop after 10 steps
$stepsGuard = new StepsLimitHook(
maxSteps: 10,
stepCounter: fn($state) => $state->stepCount(),
);
// Stop after 5000 tokens
$tokenGuard = new TokenUsageLimitHook(maxTotalTokens: 5000);
// Stop after 30 seconds
$timeGuard = new ExecutionTimeLimitHook(maxSeconds: 30.0);
$stack = $stack
->with($stepsGuard, HookTriggers::beforeStep(), priority: 100)
->with($tokenGuard, HookTriggers::beforeStep(), priority: 100)
->with($timeGuard, HookTriggers::with(HookTrigger::BeforeExecution, HookTrigger::BeforeStep), priority: 100);
// @doctest id="e4f8"