LivinGrimoire AGI 생태계를 위한 모듈형 Ephemeral Agents 소개
Source: Dev.to

무언가도 남기지 않는 스킬, 속삭임도 없이 사라지다
TL;DR: 저는 LivinGrimoire 스킬을 완전히 삭제할 수 있는 패턴을 공유합니다—메모리에서, 디스크에서, 존재 자체에서. 레지스트리 흔적도 없습니다. 소스 파일도 없습니다. 존재했다는 증거도 없습니다.
문제: AGI 스킬이 흔적을 남김
LivinGrimoire 생태계에서 스킬은 보통 영구적입니다. 스킬을 로드하면 뇌 레지스트리에 남고, 소스 파일은 디스크에 유지되며, 영원히 입력에 반응합니다.
하지만 다음과 같은 스킬이 필요하다면:
- 한 번만 실행하고 사라지는 명령?
- 스스로를 완전히 정리하는?
- 포렌식 증거를 전혀 남기지 않는?
- 진정으로 일회용인?
Enter GhostSkill and APEraser.
해결책: 자체 삭제 스킬
다음은 전체 패턴입니다 (이 코드의 .py 파일 이름에 DLC가 포함되고 프로젝트의 DLC 디렉터리에 배치되어 있는지 확인하십시오):
- Project repo:
- Example project structure:
from LivinGrimoirePacket.LivinGrimoire import Skill, Brain, AlgPart
import sys
import os
from pathlib import Path
class APEraser(AlgPart):
"""
AlgPart that:
1. Removes the skill from brain registry
2. DELETES the source file completely
3. Leaves zero trace on disk
"""
def __init__(self, brain: Brain, skill_to_remove: Skill):
super().__init__()
self.brain = brain
self.target: Skill = skill_to_remove
self.done = False
def action(self, ear: str, skin: str, eye: str) -> str:
# Step 1: Remove from registry
self.brain.remove_skill(self.target)
# Step 2: Delete the source file
self._delete_source_file()
self.done = True
return ""
def _delete_source_file(self):
"""Permanently delete the source file of the target skill"""
try:
# Get the target skill's module and file
target_module = sys.modules[self.target.__module__]
current_file = target_module.__file__
if not current_file or not os.path.exists(current_file):
return False
source_path = Path(current_file)
# Delete the file
os.remove(str(source_path))
# Optional: Also delete .pyc if it exists
pyc_path = source_path.parent / "__pycache__" / f"{source_path.stem}.pyc"
if pyc_path.exists():
os.remove(str(pyc_path))
return True
except Exception as e:
print(f" [ERROR] Failed to delete source file: {e}")
return False
def completed(self) -> bool:
return self.done
class GhostSkill(Skill):
"""
Base class for skills that completely erase themselves
"""
def __init__(self, brain: Brain):
super().__init__()
self.brain = brain
def vanish(self):
"""Queue the eraser AlgPart"""
self.algPartsFusion(3, APEraser(self.brain, self))
# example payload for testing
class CountdownGhost(GhostSkill):
def __init__(self, brain: Brain):
super().__init__(brain)
self.count_down = 3
def input(self, ear: str, skin: str, eye: str):
if self.count_down == 1:
self.vanish() # triggers deletion
return
else:
self.count_down -= 1
self.setSimpleAlg(f'count down to delete at {self.count_down}')
def add_DLC_skills(brain: Brain):
"""Called by your dynamic loader"""
brain.add_skill(CountdownGhost(brain))
작동 방식
Eraser AlgPart
APEraser는 AlgPart이며, 대기열에 넣어지면 즉시 실행되는 알고리즘 구성 요소입니다. 하나의 원자적 연산으로 두 가지 작업을 수행합니다:
- 대상 스킬을 뇌의 레지스트리에서 제거 (
brain.remove_skill()) - 스킬의 소스 파일을 디스크에서 삭제 (
os.remove())
순서가 중요합니다: 먼저 레지스트리에서 삭제하고, 그 다음 파일을 삭제합니다. 스킬 객체는 메모리에 남아 파일 삭제 작업을 마칠 충분한 시간을 가지지만, 뇌에게는 이미 “죽은” 상태입니다.
GhostSkill 기본 클래스
GhostSkill을 상속받는 모든 스킬은 vanish() 메서드를 갖게 됩니다. 이 메서드는 APEraser를 우선순위 3(즉시 실행)으로 큐에 넣습니다. vanish()가 호출되면 스킬의 운명이 결정됩니다.
Countdown 예제
CountdownGhost는 전형적인 사용 사례를 보여줍니다:
- 각 입력 사이클마다 3부터 카운트다운
- 카운트가 1이 되면
vanish()호출 - 스킬이 완전히 스스로를 삭제하여 흔적이 남지 않음
런타임에 발생하는 일
[CYCLE 1] count down to delete at 2
[CYCLE 2] count down to delete at 1
[CYCLE 3] [INTERNAL] vanish() called
→ APEraser queued
→ APEraser.action() executes:
→ brain.remove_skill(CountdownGhost)
→ _delete_source_file() removes DLC/CountdownGhost.py
→ __pycache__ entry also deleted
[CYCLE 4] Skill not found in registry. Silence.
최종 결과
- 뇌 레지스트리에는 스킬이 없음
- 디스크에 .py 파일이 없음
- .pyc 바이트코드 캐시가 없음
- 콘솔 출력만 남으며 (이를 억제할 수 있음)
왜 이것이 중요한가
진정한 일회성
일부 작업은 한 번만 수행되어야 합니다. 로드되고 실행된 뒤 사라지는 스킬은 다음에 적합합니다:
- 일회성 초기화 루틴
- 임시 모니터링
- 자체 파괴 페이로드
- 정리 작업
제로 포렌식 흔적
보안에 민감한 애플리케이션에서는 흔적을 남기지 않는 것이 필수입니다. 이 패턴은 스킬이 임무를 완료하면 분석할 흔적이 남지 않도록 보장합니다.
동적 DLC 통합
동적 DLC 로더(런타임에 폴더를 스캔하여 스킬 파일을 찾음)와 결합하면, 메인 파일에 정적 임포트 없이 스킬을 로드하고 실행하며 삭제하는 시스템을 만들 수 있습니다.
# Example dynamic loader
def call_add_DLC_skills(brain):
for file in os.listdir("DLC"):
if file.endswith(".py") and file.startswith("DLC_"):
# Dynamically import, execute add_DLC_skills(),
# then the skill can delete itself
pass
보안 경고 없음
테스트 결과, 일반 소비자용 보안 도구(예: Windows Defender)가 이 패턴을 경고하지 않는 것으로 나타났습니다. 이유는 정상적인 동작처럼 보이기 때문입니다—프로그램이 자체 임시 파일을 정리하는 것이죠. 지속성도 없고, 시스템 수정도 없으며, 네트워크 연결도 없습니다. 단지 정중한 자체 삭제일 뿐입니다.
잠재적 적용 분야
- 일시적 에이전트 – 작업을 완료할 만큼만 존재하는 스킬
- 보안 일회성 작업 – 증거를 남기면 안 되는 임무
- 자체 청소 시스템 – 오래된 스킬을 삭제하여 스스로 청결을 유지하는 AI
- 반포렌식 설계 – 감사 로그가 바람직하지 않은 적용 사례
- 임시 페이로드 – 특정 이벤트를 위해 배포된 뒤 사라지는 스킬
주의사항 및 고려사항
- 파일 권한 – 스킬은 자체 소스 파일을 삭제할 권한이 있어야 합니다. 일반적으로 파일이 사용자의 프로젝트 디렉터리에 있기 때문에 작동합니다.
- 엔터프라이즈 환경 – 일부 기업 보안 도구는 모든 파일 작업을 추적합니다. 감시가 강력한 환경에서는 파일 삭제가 여전히 기록될 수 있습니다.
- .pyc 정리 – 컴파일된 바이트코드 캐시(
__pycache__)를 항상 삭제하세요. 그렇지 않으면 포렌식 분석 시 소스가 없어도 컴파일된 버전을 찾을 수 있습니다. - 작업 순서 – 레지스트리 삭제가 파일 삭제보다 먼저 일어납니다. 이는 의도된 동작으로, 스킬은 시스템에 “죽은” 상태이지만 메모리에는 남아 있어 정리를 완료합니다.
더 큰 그림
이 패턴은 LivinGrimoire 아키텍처에 대해 깊은 통찰을 보여줍니다: 스킬은 일시적일 수 있습니다. 스킬은 뇌에 영구적인 거주자가 될 필요가 없으며, 유령처럼—보이고, 작동하고, 흔적 없이 사라질 수 있습니다.
AGI 시스템에 대해 이는 완전히 새로운 가능성을 열어줍니다:
- 일시적인 인격은 단 한 번의 대화에만 존재합니다
- 자기 파괴형 지식은 사용 후 추출할 수 없습니다
- 일회용 도구는 잔여물을 남기지 않습니다
Try It Yourself
- 코드를 DLC 파일(예:
DLC_ghost_demo.py)로 저장합니다. - DLC 디렉터리를 스캔하는 동적 로더를 설정합니다.
- LivinGrimoire 뇌를 실행합니다.
- 스킬 카운트가 내려가 사라지는 것을 확인합니다.
- DLC 폴더를 확인하세요—파일이 사라졌습니다.
다음은?
- Remote ghosting – 스스로 삭제되지만 먼저 본인에게 연락하는 스킬
- Delayed vanishing – 미래의 트리거가 발생할 때까지 남아 있는 스킬
- Partial ghosts – 특정 구성 요소만 삭제하는 스킬
- Ghost swarms – 자체 파괴를 조정하는 다수의 스킬
대화에 참여하세요
LivinGrimoire에서 일회용 에이전트를 구축해 보셨나요? 자체 삭제 스킬을 창의적으로 활용해 본 적이 있나요? 아래에 댓글을 남기시거나 LivinGrimoire 포럼에서 저를 찾아 주세요.
코드는 잘 짜고, 흔적은 남기지 마세요.
