Note
Plugins
AgentControlPlugin, Skills, Steering, GoalLoop, ContextOffloader
⏱ 35분
94 / 189
Plugins
AgentControlPlugin, Skills, Steering, GoalLoop, ContextOffloader
에이전트를 안전하게 제어한다
Hooks에서 Sandbox까지 — 4계층 제어 체계
🧩
Plugins
AgentControlPlugin · Skills · ContextOffloader
PART 3 · Plugins
Plugins
확장 계층 — 제어 로직과 도구를 하나의 모듈로 묶어 장착
🧩
Plugins
훅과 도구를 하나의 클래스로 묶어 에이전트 초기화 시 장착합니다.
- @hook + @tool 데코레이터
- AgentControlPlugin — deny/steer 정책
- ContextOffloader — 컨텍스트 절약
- 초기화 시 1회 장착
takeaway
정책과 기능을 모듈로 — 에이전트 코드는 그대로 둡니다.
PART 3 · Plugins
핵심 플러그인 5종
정책 제어·지시어 로드·컨텍스트 오프로딩·가이던스·실시간 텍스트 주입을 분담하는 플러그인
AgentControlPlugin
서버 관리 규칙으로 도구 호출을 deny/steer 제어 — 별도 패키지
Skills
모듈식 지시어 패키지(SKILL.md)를 필요할 때만 로드
Context Offloader
과대 도구 결과를 스토리지로 오프로드하여 컨텍스트 절약
Steering
진행 중인 에이전트에 컨텍스트 인지 가이던스를 주입
Context Injector
모델 호출 직전에 실시간 텍스트를 주입
takeaway
Skills·ContextOffloader·Steering·Context Injector는 SDK가 제공하고, AgentControlPlugin만 별도 패키지입니다 — 정책 제어는 서버·controls.yaml 연동이 전제입니다.
PART 3 · Plugins
커스텀 플러그인 작성
Plugin을 상속하여 자체 제어 로직 구현
python
from strands import Agent
from strands.plugins import Plugin, hook
from strands.hooks import AfterModelCallEvent, BeforeInvocationEvent
class CostGuardPlugin(Plugin): # 토큰 비용 누적 추적, 예산 초과 시 중단
name = "cost-guard"
def __init__(self, budget_usd: float = 1.0):
super().__init__()
self.budget_usd = budget_usd
self.baseline_tokens, self.spent_usd = 0, 0.0
@hook
def reset_on_invocation(self, event: BeforeInvocationEvent) -> None:
# 호출 시작 시점의 누적 토큰을 기준점으로 기록
metrics = event.agent.event_loop_metrics
self.baseline_tokens = metrics.accumulated_usage["totalTokens"]
self.spent_usd = 0.0
@hook
def check_cost(self, event: AfterModelCallEvent) -> None:
total = event.agent.event_loop_metrics.accumulated_usage["totalTokens"]
# 0.000003은 토큰당 예시 단가 — 사용하는 모델의 실제 단가로 교체
self.spent_usd = (total - self.baseline_tokens) * 0.000003
if self.spent_usd >= self.budget_usd:
raise RuntimeError(f"Budget exceeded: ${self.spent_usd:.4f}")
agent = Agent(model="us.anthropic.claude-sonnet-4-6", plugins=[CostGuardPlugin(budget_usd=0.50)])
PART 3 · Plugins
플러그인 라이프사이클
플러그인 초기화부터 이벤트 구독까지의 동작 순서
-
1
Discovery
Plugin 클래스에서 @hook, @tool 데코레이터가 붙은 메서드를 스캔하여 수집
-
2
Hook Registration
각 @hook 메서드의 타입 힌트를 분석하여 해당 이벤트 타입에 콜백 등록
-
3
Tool Registration
@tool 메서드를 에이전트의 도구 목록에 추가 — 모델이 호출 가능
-
4
init_agent 호출
커스텀 초기화 로직 실행 — 상태 설정, 조건부 훅 추가, 에이전트 속성 접근
-
5
Plugin Ready
등록 완료 후 에이전트 실행 시 이벤트 발생마다 콜백 자동 호출
takeaway
데코레이터만 붙이면 발견과 등록은 프레임워크가 합니다 — 플러그인 코드는 로직에만 집중
제어 없는 자율은 위험합니다.
Hooks · Plugins · Interventions · Sandbox — 4계층으로 에이전트를 통제