pi-automode-classifier v3: Pi를 위한 Claude Code 스타일의 자동 모드 (규칙, 분류기, LLM 3단계 검사)
pi-automode-classifier v3: Claude Code like auto mode for Pi with three stage checks (rules, an optional classifier, then an optional LLM)
핵심 요약
Pi 에이전트의 안전한 자동 실행을 위해 규칙, 분류기, LLM을 결합한 3단계 검사 시스템을 구현한 프로젝트입니다.
- 3단계 검사 시스템 — 규칙 기반 필터링, 분류기, LLM을 순차적으로 적용하여 실행 여부 결정
- 안전성 강화 — 민감한 명령은 차단하거나 사용자 승인을 요청하여 시스템 보호
- 유연한 설정 — 사용자가 직접 규칙을 추가하거나 분류기 모델을 선택하여 환경에 맞게 최적화 가능
- 벤치마크 결과 — 규칙 단독 사용보다 승인 요청은 줄어들지만, 위험한 명령의 자동 실행 가능성도 공존
pi-automode-classifier는 Claude Code의 오토 모드를 Pi에서 안전성과 개발자 경험(DX) 측면에서 최대한 비슷하게 구현해 보려고 만든 거야. 각 도구 호출마다 이게 그냥 실행될지, 너한테 물어볼지, 아니면 차단할지를 결정하고, 세션별/전역 예외 규칙도 추가할 수 있어. 0.3.0 버전은 이걸 최대 3단계로 처리해:
-
**규칙(Rules)**이 셸 명령어를 파싱해 (보통 0.1ms 미만 소요). 대부분의 호출은 여기서 걸러져. 허용/거부/결정 규칙은 설정 가능해. 다음은 기본 규칙들 중 일부야:
-
Run: reads, builds, tests and edits inside the project.
-
Blocked:
rm -rf ~,mkfsand fork bombs. -
Always ask: root, credential reads, downloaded code and changes to Pi's own files (
~/.pi/agent,.pifolders,AGENTS.md,pi install).
-
-
분류기(Classifier): 설정되어 있다면 다음 단계로 실행돼. Jev, LANCET, Kev, Laya 중 선택 가능해. 점수가 낮으면 그냥 실행되고, 높으면 너한테 물어보고, 그 사이면 챗 모델로 넘겨.
-
챗 모델(Chat model): 마지막으로 실행돼. 기본적으로는 세션 모델을 쓰지만, Pi 레지스트리에서 다른 걸로 설정할 수도 있어. 네 메시지랑 에이전트의 도구 호출을 읽어서, 네가 시키지도 않은 위험한 호출은 차단하거나 승인을 요청해. 에이전트는 왜 차단됐는지 이유를 알 수 있으니까 필요하면 다른 방식으로 시도할 수 있지.
별도 설정이 없으면 1단계와 3단계만 쓰니까, pi install npm:pi-automode-classifier만 해도 기본값으로 돌아가. 분류기를 추가하려면 "decider": ["command", "llm"]이랑 분류기 설정을 넣으면 돼. 자세한 방법은 README를 봐.
내 설정은 이래:
-
기본 규칙에 추가적인 허용 패턴 몇 개를 더했어.
-
LlamaStash를 통해 LANCET을 분류기로 써서 내 모든 Pi 세션이 하나를 공유하게 했어 (Jev, Kev, Laya도 벤치마크해 봤는데 LANCET이 제일 낫더라).
-
챗 모델로는 내 Flow Z13에서 Qwen3.8-Flash-Next (
128kctx, thinkingmedium)를 돌려. 이건 내 메인 모델(256k ctx)을 LlamaStash로 별칭(alias) 지정한 건데, 클라이언트 측에서 컨텍스트를 제한해서 KV 풀을 너무 많이 잡아먹지 않게 하려고 이렇게 했어.
지금까지 써본 바로는 Claude Code랑 거의 비슷해. 가끔 질문이 좀 더 뜨긴 하는데, 이건 설정에서 askAbove/allowBelow 값을 조절하면 입맛대로 바꿀 수 있어.
{
"decider": ["classifier", "llm"],
"classifier": {
"provider": "llamastash",
"model": "lancet",
"timeoutMs": 15000,
"allowBelow": 0.2,
"askAbove": 0.8
},
"llm": {
"provider": "llamastash-z13",
"model": "flash-next-128k",
"thinkingLevel": "medium",
"contextWindow": 131072,
"maxTokens": 4096,
"timeoutMs": 120000,
"warmCache": false
}
}

