revka skills, workflows, sop
CLI에서 스킬 설치·감사·테스트, 내장 워크플로 템플릿 동기화, SOP 정의 검증을 수행합니다.
세 가지 커맨드 그룹이 CLI에서 에이전트의 확장성 인터페이스를 담당합니다. revka skills는 사용자 정의 스킬 패키지를 설치·감사·제거·테스트하고, revka workflows는 바이너리에 내장된 워크플로 YAML 템플릿을 목록으로 보여 주거나 시드(seed)하며, revka sop는 디스크에 정의된 표준 운영 절차(SOP)를 목록 조회·검증·상세 확인합니다.
이 페이지는 커맨드라인에서 기능 패키지와 절차 정의를 관리할 때 참조하십시오. 작성 방법은 다른 문서에서 다룹니다. 스킬 모델은 스킬 시스템, 전체 워크플로 스키마는 워크플로 YAML 레퍼런스, SOP 구문은 SOP 레퍼런스를 참조하십시오. 이 페이지의 모든 커맨드는 오프라인으로 실행되며 실행 중인 데몬이 필요하지 않습니다.
revka skills
섹션 제목: “revka skills”스킬은 ~/.revka/workspace/skills/<name>/ 아래에 저장된 사용자 정의 또는 커뮤니티 제작 기능입니다. 각 스킬 디렉터리에는 매니페스트(SKILL.md 또는 SKILL.toml)가 포함되며, Revka가 런타임에 에이전트에 주입하는 프롬프트 콘텐츠와 도구(셸 또는 HTTP)를 정의할 수 있습니다.
| 서브커맨드 | 설명 |
|---|---|
revka skills list | 설치된 모든 스킬 목록 출력 |
revka skills install <source> | git URL 또는 로컬 경로에서 설치 (사전 감사 수행) |
revka skills remove <name> | 이름으로 설치된 스킬 제거 |
revka skills audit <source> | 스킬 디렉터리 또는 설치된 스킬 이름에 대한 정적 보안 감사 |
revka skills test [<name>] [--verbose] | TEST.sh 유효성 검사 실행 (이름 생략 시 모든 스킬 대상) |
설치된 스킬 목록 조회
섹션 제목: “설치된 스킬 목록 조회”revka skills list워크스페이스 skills/ 디렉터리(및 활성화된 경우 open-skills 디렉터리)에서 발견된 모든 스킬을 출력합니다.
스킬 설치
섹션 제목: “스킬 설치”install은 git 원격 URL 또는 로컬 경로를 인자로 받습니다.
# git 원격에서 설치 (https://, http://, ssh://, 또는 git@host:...)revka skills install https://github.com/example/skill.git
# 로컬 디렉터리에서 설치revka skills install /local/path/to/skill스킬 제거
섹션 제목: “스킬 제거”revka skills remove my-skill이름으로 설치된 스킬을 제거합니다.
스킬 감사
섹션 제목: “스킬 감사”audit은 install이 사용하는 것과 동일한 정적 분석을 설치된 스킬 이름 또는 디스크의 디렉터리에 대해 실행하므로, 설치 전에 스킬을 미리 검토할 수 있습니다.
revka skills audit my-skillrevka skills audit /path/to/skill-dir감사는 스킬 디렉터리의 모든 파일을 깊이 우선 방식으로 스캔하여 발견 사항을 보고합니다. 발견 사항이 없으면 감사가 통과되고, 발견 사항이 하나라도 있으면 설치가 차단됩니다.
스킬 테스트
섹션 제목: “스킬 테스트”test는 TEST.sh 유효성 검사 케이스를 실행합니다. 스킬 이름을 전달하면 해당 스킬 하나만, 생략하면 설치된 모든 스킬을 테스트합니다.
revka skills test # 모든 스킬revka skills test my-skill # 특정 스킬 하나revka skills test my-skill --verbose| 플래그 | 의미 |
|---|---|
--verbose | 케이스별 커맨드, 예상 vs 실제 종료 코드, 출력 내용 표시 |
스킬의 TEST.sh 파일에서 각 줄은 다음 형식의 테스트 케이스입니다.
command | expected_exit_code | expected_output_pattern실행기는 |(공백으로 둘러싼 파이프)를 기준으로 분리하므로 커맨드 내부의 셸 파이프가 구분자로 오인되지 않습니다. 빈 줄과 #으로 시작하는 줄은 무시됩니다. 출력 패턴에 정규 표현식 메타문자가 포함되어 있으면 정규식으로, 그렇지 않으면 부분 문자열로 매칭됩니다.
# Example TEST.shrevka --version | 0 | revkarevka doctor --help | 0 | UsageSKILL.toml 형식
섹션 제목: “SKILL.toml 형식”스킬 매니페스트는 SKILL.toml(구조화된 매니페스트) 또는 SKILL.md(YAML 프론트매터 + 마크다운 본문) 형식으로 작성할 수 있습니다. SKILL.toml 형식에는 [skill] 테이블과 선택적 [[tools]] 배열이 있습니다.
[skill]name = "release-notes"description = "Summarize merged PRs into release notes."version = "1.0.0" # defaults to "0.1.0" if omittedtags = ["git", "writing"] # optionalcontent_file = "PROMPT.md" # optional: external markdown used as prompt content
# Optional embedded prompt content (ignored when content_file is set)prompts = [ "You write concise, accurate release notes.",]
[[tools]]name = "list_merged"description = "List merged PRs since a tag."kind = "shell" # "shell" | "script" | "http"command = "gh pr list --state merged --search 'merged:>{{since}}'"
# args is a string→string map of named template parameters[tools.args]since = "v1.0.0"| 필드 | 타입 | 기본값 | 의미 |
|---|---|---|---|
skill.name | string | — (필수) | 고유한 스킬 이름 |
skill.description | string | — (필수) | 사람이 읽을 수 있는 용도 설명 |
skill.version | string | "0.1.0" | 시맨틱 버전 |
skill.author | string | — | 선택적 작성자 레이블 |
skill.tags | string[] | [] | 분류 태그 |
skill.content_file | string | — | 프롬프트 콘텐츠로 사용할 마크다운 파일 경로(매니페스트 기준 상대 경로). 설정 시 내장 prompts 배열은 무시됨 |
prompts | string[] | [] | 에이전트 시스템 프롬프트에 주입되는 내장 프롬프트 콘텐츠 |
tools[] | table[] | [] | 도구 정의(아래 참조) |
각 [[tools]] 항목에는 다음 필드가 있습니다.
| 필드 | 타입 | 의미 |
|---|---|---|
name | string | 도구 이름. 에이전트에는 <skill_name>.<tool_name> 형태로 노출됨 |
description | string | 도구가 수행하는 작업 |
kind | string | "shell", "script", 또는 "http" |
command | string | 실행할 셸 커맨드, 스크립트, 또는 URL. {{arg_name}} 치환 지원 |
args | map | 선택적 string→string 명명된 템플릿 파라미터 맵 |
보안 감사 규칙
섹션 제목: “보안 감사 규칙”감사는 스킬 디렉터리에 대한 결정론적 정적 스캔입니다. 스킬 루트에 SKILL.md 또는 SKILL.toml이 없으면 감사가 실패합니다. 이후 스캔은 다음 항목을 차단합니다.
- 심볼릭 링크. 스킬 트리 어디에 있든 심볼릭 링크는 거부됩니다.
- 스크립트 파일.
.sh,.bash,.zsh,.ksh,.fish,.ps1,.bat,.cmd확장자를 가진 파일 또는 셸 인터프리터(sh,bash,zsh,ksh,fish,pwsh,powershell)를 지정하는 shebang을 포함한 파일. 비셸 shebang(예:#!/usr/bin/env python3)은 허용됩니다. - 고위험 커맨드 패턴 — 마크다운 본문 또는
[[tools]].command/prompts문자열에서 발견되는 패턴:curl ... | sh,wget ... | sh, PowerShelliex/Invoke-Expression,rm -rf /,nc -e원격 실행,dd if=,mkfs, 클래식 포크 폭탄. - 매니페스트 도구 커맨드 내 셸 체이닝 연산자:
&&,||,;, 개행, 백틱,$(. - 매니페스트 결함: 잘못된 TOML,
command가 없는[[tools]]항목, 빈shell/script커맨드. - 안전하지 않은 마크다운 링크: 절대 경로,
~/경로, 지원되지 않는 URL 스킴, 스크립트 파일 링크, 원격 마크다운 링크(http/https/mailto로 끝나는.md), 스킬 루트를 벗어나 공유 스킬 디렉터리 외부로 해석되는 상대 링크.
512 KB를 초과하는 마크다운/TOML 파일은 정적 감사에서 너무 크다고 표시됩니다. 공유 스킬 루트 내에 머무는 크로스 스킬 마크다운 참조(예: ../other-skill/SKILL.md)는 대상 스킬이 현재 설치되어 있지 않더라도 허용됩니다.
스킬 환경 변수
섹션 제목: “스킬 환경 변수”아래 변수들은 파일을 직접 편집하지 않고도 config.toml의 [skills] 키 값을 덮어씁니다. 불리언 값은 1/0/true/false/yes/no/on/off를 모두 허용합니다.
| 변수 | 설정 키 | 의미 |
|---|---|---|
REVKA_OPEN_SKILLS_ENABLED | skills.open_skills_enabled | open-skills 커뮤니티 라이브러리 활성화 |
REVKA_OPEN_SKILLS_DIR | skills.open_skills_dir | open-skills 디렉터리 경로 재정의 |
REVKA_SKILLS_ALLOW_SCRIPTS | skills.allow_scripts | 스킬 내 스크립트 파일 허용 |
REVKA_SKILLS_PROMPT_MODE | skills.prompt_injection_mode | 프롬프트 주입 모드: full 또는 compact |
Open Skills는 besoeasy/open-skills GitHub 저장소에서 7일 주기로 동기화되는 선택적 라이브러리입니다. 동기화된 스킬은 설치된 스킬과 동일하게 로드 전에 감사를 거치므로, allow_scripts가 설정되지 않으면 스크립트 파일은 차단됩니다. 해당 설정 블록은 다음과 같습니다.
[skills]open_skills_enabled = trueopen_skills_dir = "~/.revka/open-skills" # optional overrideallow_scripts = falseprompt_injection_mode = "full" # full | compactrevka workflows
섹션 제목: “revka workflows”워크플로는 Operator MCP 백엔드가 실행하고 Kumiho에 저장하는 선언적 YAML 파이프라인입니다. CLI의 역할은 제한적입니다. 바이너리에 번들된 워크플로 템플릿을 목록으로 보여 주고 워크스페이스에 시드하는 것입니다.
| 서브커맨드 | 설명 |
|---|---|
revka workflows list | 이 바이너리에 내장된 워크플로 목록 출력 |
revka workflows sync [--force] | 번들된 워크플로 YAML을 워크스페이스에 복사 |
revka workflows listrevka workflows syncrevka workflows sync --forcesync는 번들된 YAML 템플릿을 <workspace>/operator_mcp/workflow/builtins/에 복사합니다. --force 없이는 비파괴적으로 동작하여 기존 파일을 그대로 둡니다. --force를 전달하면 덮어씁니다. 이 디렉터리는 오퍼레이터가 가장 낮은 우선순위 워크플로 소스로 스캔하므로, Revka 업그레이드 후 기본 워크플로를 갱신하기에 적합한 위치입니다.
| 플래그 | 의미 |
|---|---|
--force | 디스크에 이미 존재하는 워크플로 파일 덮어쓰기 |
revka sop
섹션 제목: “revka sop”표준 운영 절차(SOP)는 디스크에 SOP.toml(메타데이터 + 트리거)과 선택적 SOP.md(단계) 파일로 정의된 결정론적·이벤트 기반 절차이며, Rust SopEngine이 실행합니다. CLI는 읽기 및 검증 전용입니다.
| 서브커맨드 | 설명 |
|---|---|
revka sop list | 로드된 모든 SOP와 트리거 및 실행 모드 목록 출력 |
revka sop validate [<name>] | 모든 SOP 또는 이름으로 지정한 하나의 SOP 검증 |
revka sop show <name> | 단일 SOP의 상세 보기 출력 |
revka sop listrevka sop validate # validate every SOPrevka sop validate deploy-prod # validate one SOPrevka sop show deploy-prodrevka sop list는 각 SOP의 버전, 우선순위, 설명, 모드, 단계 수, 트리거, 쿨다운을 출력합니다.
SOPs (3): deploy-prod v1.0.0 [high] — Deploy service to production Mode: supervised Steps: 4 Triggers: webhook:/sop/deploy, manual Cooldown: 300srevka sop validate는 SOP에서 경고가 발생하면 비정상 종료(non-zero)하므로, 절차 정의에 대한 CI 게이트로 활용할 수 있습니다.
SOP 활성화
섹션 제목: “SOP 활성화”[sop]sops_dir = "sops" # set this to activate SOP agent tools; defaults to <workspace>/sopsdefault_execution_mode = "supervised"디스크의 최소 SOP 구조는 다음과 같습니다.
~/.revka/workspace/sops/ deploy-prod/ SOP.toml # metadata + triggers (required) SOP.md # numbered procedure steps (optional)[sop]name = "deploy-prod"description = "Deploy service to production"version = "1.0.0"priority = "high" # low | normal | high | criticalexecution_mode = "supervised" # auto | supervised | step_by_step | priority_based | deterministiccooldown_secs = 300max_concurrent = 1
[[triggers]]type = "webhook"path = "/sop/deploy"
[[triggers]]type = "manual"