본문으로 건너뛰기

플러그인

anchor alias
anchor alias

플러그인

Hermes에는 핵심 코드를 수정하지 않고도 사용자 정의 도구, 훅, 통합을 추가할 수 있는 플러그인 시스템이 있습니다.

자신이나 팀, 혹은 하나의 프로젝트를 위해 사용자 정의 도구를 만들고 싶다면, 보통 이것이 올바른 경로입니다. 개발자 가이드의 도구 추가 페이지는 ......에 있는 빌트인 Hermes 핵심 도구를 위한 것입니다.

Hermes 플러그인 만들기 — 완전한 작동 예제와 함께 단계별 안내.

간단한 개요

~/.hermes/plugins/에 디렉토리를 plugin.yaml와 Python 코드와 함께 드롭하세요:

~/.hermes/plugins/my-plugin/
├── plugin.yaml # manifest
├── __init__.py # register() — wires schemas to handlers
├── schemas.py # tool schemas (what the LLM sees)
└── tools.py # tool handlers (what runs when called)

Hermes 시작 — 도구가 내장 도구와 함께 나타납니다. 모델이 즉시 이를 호출할 수 있습니다.

최소 동작 예제

여기 hello_world 도구를 추가하고 모든 도구 호출을 훅을 통해 기록하는 완전한 플러그인이 있습니다.

~/.hermes/plugins/hello-world/plugin.yaml

name: hello-world
version: "1.0"
description: A minimal example plugin

~/.hermes/plugins/hello-world/__init__.py

"""Minimal Hermes plugin — registers a tool and a hook."""

import json


def register(ctx):
# --- Tool: hello_world ---
schema = {
"name": "hello_world",
"description": "Returns a friendly greeting for the given name.",
"parameters": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Name to greet",
}
},
"required": ["name"],
},
}

def handle_hello(params, **kwargs):
del kwargs
name = params.get("name", "World")
return json.dumps({"success": True, "greeting": f"Hello, {name}!"})

ctx.register_tool(
name="hello_world",
toolset="hello_world",
schema=schema,
handler=handle_hello,
description="Return a friendly greeting for the given name.",
)

# --- Hook: log every tool call ---
def on_tool_call(tool_name, params, result):
print(f"[hello-world] tool called: {tool_name}")

ctx.register_hook("post_tool_call", on_tool_call)

두 파일을 ~/.hermes/plugins/hello-world/에 넣고 Hermes를 재시작하면, 모델이 즉시 hello_world를 호출할 수 있습니다. 훅은 각 도구 호출 후 로그 라인을 출력합니다.

./.hermes/plugins/ 아래의 프로젝트 로컬 플러그인은 기본적으로 비활성화되어 있습니다. Hermes를 시작하기 전에 신뢰할 수 있는 저장소에 대해서만 HERMES_ENABLE_PROJECT_PLUGINS=true를 설정하여 활성화하세요.

플러그인이 할 수 있는 것

아래의 모든 ctx.* API는 플러그인의 register(ctx) 함수 안에서 사용할 수 있습니다.

능력어떻게
도구 추가ctx.register_tool(name=..., toolset=..., schema=..., handler=...)
후크 추가ctx.register_hook("post_tool_call", callback)
슬래시 명령어 추가ctx.register_command(name, handler, description) — CLI 및 게이트웨이 세션에 /name 추가
명령어에서 도구 배포ctx.dispatch_tool(name, args) — 상위 에이전트 컨텍스트가 자동 연결된 등록된 도구를 호출합니다
CLI 명령어 추가ctx.register_cli_command(name, help, setup_fn, handler_fn)hermes <plugin> <subcommand>를 추가합니다
메시지 주입ctx.inject_message(content, role="user")메시지 삽입 참조
선박 데이터 파일Path(__file__).parent / "data" / "file.yaml"
기술 번들ctx.register_skill(name, path)plugin:skill라는 네임스페이스로, skill_view("plugin:skill")를 통해 로드됨
환경 변수에 대한 게이트requires_env: [API_KEY] in plugin.yaml — hermes plugins install 중에 프롬프트됨
pip을 통해 배포[project.entry-points."hermes_agent.plugins"]
게이트웨이 플랫폼(Discord, Telegram, IRC 등)을 등록하세요ctx.register_platform(name, label, adapter_factory, check_fn,...)플랫폼 어댑터 추가 참조
이미지 생성 백엔드를 등록하세요ctx.register_image_gen_provider(provider)이미지 생성 제공자 플러그인 참조
비디오 생성 백엔드 등록ctx.register_video_gen_provider(provider)비디오 생성 제공자 플러그인 참조
컨텍스트 압축 엔진 등록ctx.register_context_engine(engine)컨텍스트 엔진 플러그인 참조
메모리 백엔드 등록plugins/memory/<name>/__init__.py의 서브클래스 MemoryProvider메모리 제공자 플러그인 참조 (별도의 검색 시스템 사용)
호스트가 소유한 LLM 호출 실행ctx.llm.complete(...) / ctx.llm.complete_structured(...) — 사용자의 활성 모델과 인증을 빌려 옵션 JSON 스키마 검증과 함께 일회성 완료를 수행합니다. 자세한 내용은 플러그인 LLM 액세스를 참조하세요.
추론 백엔드(LLM 제공자)를 등록하세요register_provider(ProviderProfile(...)) in plugins/model-providers/<name>/__init__.py모델 제공자 플러그인 참조 (별도의 검색 시스템 사용)

플러그인 검색

출처경로사용 사례
묶음으로 제공된<repo>/plugins/헤르메스가 장착된 선박 — 내장 플러그인을 참조하세요
사용자~/.hermes/plugins/개인 플러그인
프로젝트.hermes/plugins/프로젝트별 플러그인 (HERMES_ENABLE_PROJECT_PLUGINS=true 필요)
파이프hermes_agent.plugins 진입점배포된 패키지
아무 것도services.hermes-agent.extraPlugins / extraPythonPackagesNixOS 선언적 설치 — Nix 설정을 참조하세요

이후의 출처가 이름 충돌에 대해 이전 출처를 덮어쓰므로, 동일한 이름을 가진 사용자 플러그인은 번들된 플러그인을 대체합니다.

플러그인 하위 카테고리

각 소스 내에서 Hermes는 플러그인을 전문 검색 시스템으로 연결하는 하위 카테고리 디렉터리도 인식합니다:

하위 디렉토리그것이 담고 있는 것발견 시스템
plugins/ (루트)일반 플러그인 — 도구, 훅, 슬래시 명령어, CLI 명령어, 번들된 스킬PluginManager (종류: standalone 또는 backend)
plugins/platforms/<name>/게이트웨이 채널 어댑터 (ctx.register_platform())PluginManager (종류: platform, 한 단계 더 깊음)
plugins/image_gen/<name>/이미지 생성 백엔드 (ctx.register_image_gen_provider())PluginManager (종류: backend, 한 단계 더 깊음)
plugins/memory/<name>/메모리 제공자 (하위 클래스 MemoryProvider)자체 로더 in plugins/memory/__init__.py (종류: exclusive — 한 번에 하나만 활성화됨)
plugins/context_engine/<name>/문맥 압축 엔진 (ctx.register_context_engine())자체 로더 in plugins/context_engine/__init__.py (한 번에 하나만 활성화 가능)
plugins/model-providers/<name>/LLM 제공자 프로필 (register_provider(ProviderProfile(...)))자체 로더 in providers/__init__.py (첫 get_provider_profile() 호출 시 지연 스캔됨)

사용자 플러그인은 ~/.hermes/plugins/model-providers/<name>/~/.hermes/plugins/memory/<name>/에서 동일한 이름의 번들 플러그인을 덮어씌웁니다 — register_provider() / register_memory_provider()에서는 최종 작성자가 승리합니다. 디렉토리를 넣으면, 저장소를 수정하지 않고도 내장된 것을 대체합니다.

플러그인은 선택적입니다(일부 예외를 제외하고)

일반 플러그인 및 사용자가 설치한 백엔드는 기본적으로 비활성화되어 있습니다 — 검색에서는 이를 찾을 수 있습니다(그래서 hermes plugins/plugins에 표시되지만), 플러그인의 이름을 plugins.enabled~/.hermes/config.yaml에서 추가할 때까지 훅이나 도구가 로드되지 않습니다. 이는 사용자의 명시적인 동의 없이는 서드파티 코드가 실행되지 않도록 합니다.

plugins:
enabled:
- my-tool-plugin
- disk-cleanup
disabled: # optional deny-list — always wins if a name appears in both
- noisy-plugin

상태를 전환하는 세 가지 방법:

hermes plugins                    # interactive toggle (space to check/uncheck)
hermes plugins enable <name> # add to allow-list
hermes plugins disable <name> # remove from allow-list + add to disabled
``hermes plugins install owner/repo` 후에, `Enable 'name' now? [y/N]`가 요청됩니다 — 기본값은 아니오입니다. 스크립트 설치에서는 `--enable` 또는 `--no-enable`로 프롬프트를 건너뜁니다.

### 허용 목록이 제한하지 않는 것 \{#what-the-allow-list-does-not-gate}

여러 가지 플러그인 우회 `plugins.enabled` — 이들은 Hermes의 내장 인터페이스의 일부이며 기본적으로 차단되면 기본 기능이 손상될 수 있습니다:

| 플러그인 종류 | 대신 어떻게 활성화되는지 |
|---|---|
| **번들 플랫폼 플러그인** (`plugins/platforms/` 아래의 IRC, Teams 등) | 자동으로 로드되므로 배송된 모든 게이트웨이 채널을 사용할 수 있습니다. 실제 채널은 `config.yaml``gateway.platforms.&lt;name&gt;.enabled`을 통해 켜집니다. |
| **번들 백엔드** (`plugins/image_gen/` 등 아래의 이미지 생성 제공자) | 자동으로 로드되어 기본 백엔드가 '그냥 작동'합니다. 선택은 `&lt;category&gt;.provider`에서 `config.yaml`을 통해 이루어집니다(예: `image_gen.provider: openai`). |
| **메모리 제공자** (`plugins/memory/`) | 모두 발견됨; 정확히 하나가 활성 상태이며, `config.yaml`에서 `memory.provider`에 의해 선택됨. |
| **컨텍스트 엔진** (`plugins/context_engine/`) | 모두 발견됨; 하나는 활성 상태이며, `config.yaml`에서 `context.engine`에 의해 선택됨. |
| **모델 제공자** (`plugins/model-providers/`) | `plugins/model-providers/` 아래의 모든 번들 제공자는 첫 번째 `get_provider_profile()` 호출 시 검색되고 등록됩니다. 사용자는 `--provider` 또는 `config.yaml`를 통해 한 번에 하나씩 선택합니다. |
| **Pip로 설치된 `backend` 플러그인** | 일반 플러그인과 동일하게 `plugins.enabled`를 통해 옵트인하세요. |
| **사용자 설치 플랫폼** (`~/.hermes/plugins/platforms/` 아래) | `plugins.enabled`을 통해 옵트인 — 제3자 게이트웨이 어댑터는 명시적인 동의를 필요로 합니다. |

요약하면: **번들된 '항상 작동하는' 인프라는 자동으로 로드되며, 서드파티 일반 플러그인은 선택적입니다.** `plugins.enabled` 허용 목록은 사용자가 `~/.hermes/plugins/`에 넣은 임의 코드에 대한 게이트입니다.

### 기존 사용자를 위한 마이그레이션 \{#migration-for-existing-users}

Hermes를 옵트인 플러그인(config schema v21 이상) 버전으로 업그레이드하면, 이미 `~/.hermes/plugins/`에 설치되어 있지만 `plugins.disabled`에는 없던 사용자 플러그인은 **자동으로 `plugins.enabled`로 이전**됩니다. 기존 설정은 계속 작동합니다. 번들로 제공되는 독립 실행형 플러그인은 이전되지 않습니다 — 기존 사용자도 명시적으로 옵트인해야 합니다. (번들로 제공되는 플랫폼/백엔드 플러그인은 게이트가 걸린 적이 없기 때문에 이전이 필요하지 않았습니다.)

## 사용 가능한 후크 \{#available-hooks}

플러그인은 이러한 라이프사이클 이벤트에 대한 콜백을 등록할 수 있습니다. 전체 세부 사항, 콜백 시그니처 및 예제는 **[이벤트 훅 페이지](/docs/user-guide/features/hooks#plugin-hooks)**를 참조하세요.

| 갈고리 | 발사할 때 |
|------|-----------|
| [`pre_tool_call`](/docs/user-guide/features/hooks#pre_tool_call) | 어떤 도구가 실행되기 전에 |
| [`post_tool_call`](/docs/user-guide/features/hooks#post_tool_call) | 어떤 도구가 반환된 후 |
| [`pre_llm_call`](/docs/user-guide/features/hooks#pre_llm_call) | 한 턴에 한 번, LLM 루프 전에 — `{"context": "..."}`를 [사용자 메시지에 컨텍스트 주입](/docs/user-guide/features/hooks#pre_llm_call)할 수 있습니다. |
| [`post_llm_call`](/docs/user-guide/features/hooks#post_llm_call) | 턴마다 한 번, LLM 루프 이후에 (성공한 턴에만) |
| [`on_session_start`](/docs/user-guide/features/hooks#on_session_start) | 새 세션이 생성되었습니다 (첫 번째 턴만) |
| [`on_session_end`](/docs/user-guide/features/hooks#on_session_end) | 모든 `run_conversation` 호출 종료 + CLI 종료 처리기 |
| [`on_session_finalize`](/docs/user-guide/features/hooks#on_session_finalize) | CLI/게이트웨이가 활성 세션을 종료합니다 (`/new`, GC, CLI 종료) |
| [`on_session_reset`](/docs/user-guide/features/hooks#on_session_reset) | 게이트웨이는 새로운 세션 키로 교체합니다 (`/new`, `/reset`, `/clear`, 유휴 회전) |
| [`subagent_stop`](/docs/user-guide/features/hooks#subagent_stop) | `delegate_task`가 끝난 후 각 어린이마다 한 번 |
| [`pre_gateway_dispatch`](/docs/user-guide/features/hooks#pre_gateway_dispatch) | 게이트웨이가 인증 및 디스패치 이전에 사용자 메시지를 받았습니다. `{"action": "skip"}`를 반환합니다.| "다시 쓰기" \"| "흐름에 영향을 주기 위해 'allow',...`를 사용합니다. |

## 플러그인 유형 \{#plugin-types}

Hermes에는 네 가지 종류의 플러그인이 있습니다:

| 타입 | 그것이 하는 일 | 선택 | 위치 |
|------|-------------|-----------|----------|
| **일반 플러그인** | 도구, 훅, 슬래시 명령어, CLI 명령어 추가 | 다중 선택 (사용/사용 안 함) | `~/.hermes/plugins/` |
| **메모리 제공자** | 내장 메모리를 교체하거나 보충하세요 | 단일 선택(하나 활성) | `plugins/memory/` |
| **컨텍스트 엔진** | 내장 컨텍스트 압축기를 교체하세요 | 단일 선택(하나 활성) | `plugins/context_engine/` |
| **모델 제공자** | 추론 백엔드(OpenRouter, Anthropic 등)를 선언하십시오 | 다중 레지스터, `--provider` / `config.yaml`에 의해 선택됨 | `plugins/model-providers/` |

메모리 제공자와 컨텍스트 엔진은 **제공자 플러그인**입니다 — 각 유형은 한 번에 하나만 활성화될 수 있습니다. 모델 제공자도 플러그인이지만 여러 개가 동시에 로드될 수 있으며, 사용자는 `--provider` 또는 `config.yaml`을 통해 한 번에 하나씩 선택합니다. 일반 플러그인은 어떤 조합으로든 활성화할 수 있습니다.

## 플러그형 인터페이스 — 각 경우 어디로 가야 하는가 \{#pluggable-interfaces--where-to-go-for-each}

위의 표는 네 가지 플러그인 카테고리를 보여주지만, "일반 플러그인" 내에서 `PluginContext`는 여러 개의 개별 확장 포인트를 제공합니다 — 그리고 Hermes는 Python 플러그인 시스템 외부의 확장도 허용합니다(구성 기반 백엔드, 셸 연결 명령, 외부 서버 등). 만들고자 하는 것에 맞는 문서를 찾기 위해 이 표를 사용하세요:

| 추가하고 싶어요… | 어떻게 | 저작 가이드 |
|---|---|---|
| LLM이 호출할 수 있는 **도구** | 파이썬 플러그인 — `ctx.register_tool()` | [Hermes 플러그인 만들기](/docs/guides/build-a-hermes-plugin) · [도구 추가하기](/docs/developer-guide/adding-tools) |
| **라이프사이클 훅** (사전/사후 LLM, 세션 시작/종료, 도구 필터) | 파이썬 플러그인 — `ctx.register_hook()` | [Hooks 참조](/docs/user-guide/features/hooks) · [Hermes 플러그인 만들기](/docs/guides/build-a-hermes-plugin) |
| CLI / 게이트웨이를 위한 **슬래시 명령어** | 파이썬 플러그인 — `ctx.register_command()` | [Hermes 플러그인 만들기](/docs/guides/build-a-hermes-plugin) · [CLI 확장하기](/docs/developer-guide/extending-the-cli) |
| `hermes &lt;thing&gt;`의 **하위 명령어** | 파이썬 플러그인 — `ctx.register_cli_command()` | [CLI 확장하기](/docs/developer-guide/extending-the-cli) |
| 플러그인이 제공하는 번들 **스킬** | 파이썬 플러그인 — `ctx.register_skill()` | [스킬 만들기](/docs/developer-guide/creating-skills) |
| **추론 백엔드** (LLM 제공자: OpenAI-호환, Codex, Anthropic-Messages, Bedrock) | 프로바이더 플러그인 — `register_provider(ProviderProfile(...))` in `plugins/model-providers/&lt;name&gt;/` | **[모델 제공자 플러그인](/docs/developer-guide/model-provider-plugin)** · [제공자 추가](/docs/developer-guide/adding-providers) |
| 게이트웨이 채널(Discord / Telegram / IRC / Teams 등) | 플랫폼 플러그인 — `ctx.register_platform()` in `plugins/platforms/&lt;name&gt;/` | [플랫폼 어댑터 추가하기](/docs/developer-guide/adding-platform-adapters) |
| **메모리 백엔드** (Honcho, Mem0, Supermemory, …) | 메모리 플러그인 — `plugins/memory/&lt;name&gt;/`의 하위 클래스 `MemoryProvider` | [메모리 제공자 플러그인](/docs/developer-guide/memory-provider-plugin) |
| **문맥 압축 전략** | 컨텍스트 엔진 플러그인 — `ctx.register_context_engine()` | [컨텍스트 엔진 플러그인](/docs/developer-guide/context-engine-plugin) |
| **이미지 생성 백엔드** (DALL·E, SDXL, …) | 백엔드 플러그인 — `ctx.register_image_gen_provider()` | [이미지 생성 제공자 플러그인](/docs/developer-guide/image-gen-provider-plugin) |
| **비디오 생성 백엔드** (Veo, Kling, Pixverse, Grok-Imagine, Runway, …) | 백엔드 플러그인 — `ctx.register_video_gen_provider()` | [비디오 생성 제공자 플러그인](/docs/developer-guide/video-gen-provider-plugin) |
| **TTS 백엔드** (모든 CLI — Piper, VoxCPM, Kokoro, xtts, 음성 복제 스크립트, …) | 구성 기반 — `config.yaml`에서 `type: command`와 함께 `tts.providers.&lt;name&gt;` 아래에 선언 | [TTS 설정](/docs/user-guide/features/tts#custom-command-providers) |
| STT 백엔드(커스텀 위스퍼 바이너리, 로컬 ASR CLI) | 구성 기반 — `HERMES_LOCAL_STT_COMMAND` 환경 변수를 셸 템플릿으로 설정 | [음성 메시지 전사(STT)](/docs/user-guide/features/tts#voice-message-transcription-stt) |
| **MCP를 통한 외부 도구** (파일 시스템, GitHub, Linear, Notion, 모든 MCP 서버) | 구성 기반 — `config.yaml`에서 `command:` / `url:``mcp_servers.&lt;name&gt;`를 선언합니다. Hermes는 서버의 도구를 자동으로 검색하고 내장 도구와 함께 등록합니다. | [MCP](/docs/user-guide/features/mcp) |
| **추가 스킬 소스** (커스텀 GitHub 저장소, 개인 스킬 인덱스) | CLI — `hermes skills tap add &lt;repo&gt;` | [스킬 허브](/docs/user-guide/features/skills#skills-hub) · [맞춤 탭 게시](/docs/user-guide/features/skills#publishing-a-custom-skill-tap) |
| **게이트웨이 이벤트 훅** (`gateway:startup`, `session:start`, `agent:end`, `command:*`에서 실행) | `HOOK.yaml` + `handler.py``~/.hermes/hooks/&lt;name&gt;/`에 넣으세요 | [이벤트 훅](/docs/user-guide/features/hooks#gateway-event-hooks) |
| **셸 훅** (이벤트 시 셸 명령 실행 — 알림, 감사 로그, 데스크톱 알림) | 구성 기반 — `config.yaml` 안의 `hooks:` 아래에 선언 | [셸 후크](/docs/user-guide/features/hooks#shell-hooks) |

:::note
모든 것이 Python 플러그인은 아닙니다. 일부 확장 기능은 **구성 기반 셸 명령**(TTS, STT, 셸 훅)을 의도적으로 사용하여 이미 가지고 있는 CLI가 Python을 작성하지 않고도 플러그인이 되도록 합니다. 다른 것들은 에이전트가 연결하고 도구를 자동으로 등록하는 **외부 서버**(MCP)입니다. 그리고 일부는 자체 매니페스트 형식을 가진 **드롭인 디렉터리**(게이트웨이 훅)입니다. 사용 사례에 맞는 통합 스타일에 적합한 surface를 선택하세요; 위 표의 작성 가이드 각각은 플레이스홀더, 탐색 및 예제를 다룹니다.

:::
## NixOS 선언적 플러그인 \{#nixos-declarative-plugins}

NixOS에서는 플러그인을 모듈 옵션을 통해 선언적으로 설치할 수 있습니다 — `hermes plugins install`가 필요하지 않습니다. 자세한 내용은 **[Nix 설정 가이드](/docs/getting-started/nix-setup#plugins)**를 참조하세요.

```nix
services.hermes-agent = &#123;
# Directory plugin (source tree with plugin.yaml)
extraPlugins = [ (pkgs.fetchFromGitHub &#123;... &#125;) ];
# Entry-point plugin (pip package)
extraPythonPackages = [ (pkgs.python312Packages.buildPythonPackage &#123;... &#125;) ];
# Enable in config
settings.plugins.enabled = [ "my-plugin" ];
&#125;;

선언적 플러그인은 nix-managed- 접두사로 심볼릭 링크됩니다 — 이들은 수동으로 설치된 플러그인과 공존하며 Nix 구성에서 제거될 때 자동으로 정리됩니다.

플러그인 관리

hermes plugins                               # unified interactive UI
hermes plugins list # table: enabled / disabled / not enabled
hermes plugins install user/repo # install from Git, then prompt Enable? [y/N]
hermes plugins install user/repo --enable # install AND enable (no prompt)
hermes plugins install user/repo --no-enable # install but leave disabled (no prompt)
hermes plugins update my-plugin # pull latest
hermes plugins remove my-plugin # uninstall
hermes plugins enable my-plugin # add to allow-list
hermes plugins disable my-plugin # remove from allow-list + add to disabled

인터랙티브 UI

인수 없이 hermes plugins를 실행하면 복합 대화형 화면이 열립니다:

Plugins
↑↓ navigate SPACE toggle ENTER configure/confirm ESC done

General Plugins
→ [✓] my-tool-plugin — Custom search tool
webhook-notifier — Event hooks
disk-cleanup — Auto-cleanup of ephemeral files [bundled]

Provider Plugins
Memory Provider ▸ honcho
컨텍스트 Engine ▸ compressor
  • 일반 플러그인 섹션 — 체크박스, SPACE로 전환. 체크됨 = plugins.enabled에 있음, 체크 해제됨 = plugins.disabled에 있음 (명시적 비활성).
  • 제공자 플러그인 섹션 — 현재 선택 항목을 보여줍니다. ENTER를 눌러 라디오 선택기 안으로 들어가 하나의 활성 제공자를 선택할 수 있습니다.
  • 번들로 제공되는 플러그인은 [bundled] 태그와 함께 동일한 목록에 표시됩니다.

제공자 플러그인 선택 사항이 config.yaml에 저장되었습니다:

memory:
provider: "honcho" # empty string = built-in only

컨텍스트:
engine: "compressor" # default built-in compressor

활성화 vs. 비활성화 vs. 해당 없음

플러그인은 세 가지 상태 중 하나를 차지합니다:

의미plugins.enabled에서?plugins.disabled 안에?
enabled다음 세션에 로드됨No
disabled명시적으로 꺼짐 — enabled에도 있어도 로드되지 않음(무관한)
not enabled발견되었지만 선택하지 않음NoNo

새로 설치되거나 번들로 제공되는 플러그인의 기본값은 not enabled입니다. hermes plugins list은 세 가지 서로 다른 상태를 모두 보여주므로 명시적으로 꺼진 것과 단순히 활성화를 기다리고 있는 것을 구분할 수 있습니다.

실행 세션에서 /plugins는 현재 로드된 플러그인을 표시합니다.

메시지 주입

플러그인은 ctx.inject_message()을 사용하여 활성 대화에 메시지를 삽입할 수 있습니다:

ctx.inject_message("New data arrived from the webhook", role="user")

서명: ctx.inject_message(content: str, role: str = "user") -> bool

작동 방식:

  • 에이전트가 유휴 상태(사용자 입력을 기다리는 중)인 경우, 메시지는 다음 입력으로 대기열에 쌓이고 새 턴이 시작됩니다.
  • 에이전트가 중간 실행(mid-turn) 상태일 경우(활성으로 실행 중일 때), 메시지는 현재 작업을 중단시킵니다 — 이는 사용자가 새 메시지를 입력하고 Enter를 누르는 것과 동일합니다.
  • 비-"user" 역할의 경우, 콘텐츠는 [role]로 접두사가 붙습니다 (예: [system]...).
  • 메시지가 성공적으로 큐에 추가되면 True를 반환하고, CLI 참조가 없는 경우(예: 게이트웨이 모드) False를 반환합니다.

이것은 원격 제어 뷰어, 메시지 브리지 또는 웹후크 수신기와 같은 플러그인이 외부 소스에서 대화로 메시지를 전달할 수 있도록 합니다.

노트

inject_message는 CLI 모드에서만 사용할 수 있습니다. 게이트웨이 모드에서는 CLI 참조가 없으며 이 메서드는 False을 반환합니다.

핸들러 계약, 스키마 형식, 후크 동작, 오류 처리 및 일반적인 실수에 대해 **전체 가이드**를 참조하세요.