콘텐츠로 이동

revka skills, workflows, sop

CLI에서 스킬 설치·감사·테스트, 내장 워크플로 템플릿 동기화, SOP 정의 검증을 수행합니다.

세 가지 커맨드 그룹이 CLI에서 에이전트의 확장성 인터페이스를 담당합니다. revka skills는 사용자 정의 스킬 패키지를 설치·감사·제거·테스트하고, revka workflows는 바이너리에 내장된 워크플로 YAML 템플릿을 목록으로 보여 주거나 시드(seed)하며, revka sop는 디스크에 정의된 표준 운영 절차(SOP)를 목록 조회·검증·상세 확인합니다.

이 페이지는 커맨드라인에서 기능 패키지와 절차 정의를 관리할 때 참조하십시오. 작성 방법은 다른 문서에서 다룹니다. 스킬 모델은 스킬 시스템, 전체 워크플로 스키마는 워크플로 YAML 레퍼런스, SOP 구문은 SOP 레퍼런스를 참조하십시오. 이 페이지의 모든 커맨드는 오프라인으로 실행되며 실행 중인 데몬이 필요하지 않습니다.

스킬은 ~/.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 유효성 검사 실행 (이름 생략 시 모든 스킬 대상)
Terminal window
revka skills list

워크스페이스 skills/ 디렉터리(및 활성화된 경우 open-skills 디렉터리)에서 발견된 모든 스킬을 출력합니다.

install은 git 원격 URL 또는 로컬 경로를 인자로 받습니다.

Terminal window
# git 원격에서 설치 (https://, http://, ssh://, 또는 git@host:...)
revka skills install https://github.com/example/skill.git
# 로컬 디렉터리에서 설치
revka skills install /local/path/to/skill
Terminal window
revka skills remove my-skill

이름으로 설치된 스킬을 제거합니다.

auditinstall이 사용하는 것과 동일한 정적 분석을 설치된 스킬 이름 또는 디스크의 디렉터리에 대해 실행하므로, 설치 전에 스킬을 미리 검토할 수 있습니다.

Terminal window
revka skills audit my-skill
revka skills audit /path/to/skill-dir

감사는 스킬 디렉터리의 모든 파일을 깊이 우선 방식으로 스캔하여 발견 사항을 보고합니다. 발견 사항이 없으면 감사가 통과되고, 발견 사항이 하나라도 있으면 설치가 차단됩니다.

testTEST.sh 유효성 검사 케이스를 실행합니다. 스킬 이름을 전달하면 해당 스킬 하나만, 생략하면 설치된 모든 스킬을 테스트합니다.

Terminal window
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.sh
revka --version | 0 | revka
revka doctor --help | 0 | Usage

스킬 매니페스트는 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 omitted
author = "[email protected]" # optional
tags = ["git", "writing"] # optional
content_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.namestring— (필수)고유한 스킬 이름
skill.descriptionstring— (필수)사람이 읽을 수 있는 용도 설명
skill.versionstring"0.1.0"시맨틱 버전
skill.authorstring선택적 작성자 레이블
skill.tagsstring[][]분류 태그
skill.content_filestring프롬프트 콘텐츠로 사용할 마크다운 파일 경로(매니페스트 기준 상대 경로). 설정 시 내장 prompts 배열은 무시됨
promptsstring[][]에이전트 시스템 프롬프트에 주입되는 내장 프롬프트 콘텐츠
tools[]table[][]도구 정의(아래 참조)

[[tools]] 항목에는 다음 필드가 있습니다.

필드타입의미
namestring도구 이름. 에이전트에는 <skill_name>.<tool_name> 형태로 노출됨
descriptionstring도구가 수행하는 작업
kindstring"shell", "script", 또는 "http"
commandstring실행할 셸 커맨드, 스크립트, 또는 URL. {{arg_name}} 치환 지원
argsmap선택적 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, PowerShell iex/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_ENABLEDskills.open_skills_enabledopen-skills 커뮤니티 라이브러리 활성화
REVKA_OPEN_SKILLS_DIRskills.open_skills_diropen-skills 디렉터리 경로 재정의
REVKA_SKILLS_ALLOW_SCRIPTSskills.allow_scripts스킬 내 스크립트 파일 허용
REVKA_SKILLS_PROMPT_MODEskills.prompt_injection_mode프롬프트 주입 모드: full 또는 compact

Open Skills는 besoeasy/open-skills GitHub 저장소에서 7일 주기로 동기화되는 선택적 라이브러리입니다. 동기화된 스킬은 설치된 스킬과 동일하게 로드 전에 감사를 거치므로, allow_scripts가 설정되지 않으면 스크립트 파일은 차단됩니다. 해당 설정 블록은 다음과 같습니다.

[skills]
open_skills_enabled = true
open_skills_dir = "~/.revka/open-skills" # optional override
allow_scripts = false
prompt_injection_mode = "full" # full | compact

워크플로는 Operator MCP 백엔드가 실행하고 Kumiho에 저장하는 선언적 YAML 파이프라인입니다. CLI의 역할은 제한적입니다. 바이너리에 번들된 워크플로 템플릿을 목록으로 보여 주고 워크스페이스에 시드하는 것입니다.

서브커맨드설명
revka workflows list이 바이너리에 내장된 워크플로 목록 출력
revka workflows sync [--force]번들된 워크플로 YAML을 워크스페이스에 복사
Terminal window
revka workflows list
revka workflows sync
revka workflows sync --force

sync는 번들된 YAML 템플릿을 <workspace>/operator_mcp/workflow/builtins/에 복사합니다. --force 없이는 비파괴적으로 동작하여 기존 파일을 그대로 둡니다. --force를 전달하면 덮어씁니다. 이 디렉터리는 오퍼레이터가 가장 낮은 우선순위 워크플로 소스로 스캔하므로, Revka 업그레이드 후 기본 워크플로를 갱신하기에 적합한 위치입니다.

플래그의미
--force디스크에 이미 존재하는 워크플로 파일 덮어쓰기

표준 운영 절차(SOP)는 디스크에 SOP.toml(메타데이터 + 트리거)과 선택적 SOP.md(단계) 파일로 정의된 결정론적·이벤트 기반 절차이며, Rust SopEngine이 실행합니다. CLI는 읽기 및 검증 전용입니다.

서브커맨드설명
revka sop list로드된 모든 SOP와 트리거 및 실행 모드 목록 출력
revka sop validate [<name>]모든 SOP 또는 이름으로 지정한 하나의 SOP 검증
revka sop show <name>단일 SOP의 상세 보기 출력
Terminal window
revka sop list
revka sop validate # validate every SOP
revka sop validate deploy-prod # validate one SOP
revka sop show deploy-prod

revka 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: 300s

revka sop validate는 SOP에서 경고가 발생하면 비정상 종료(non-zero)하므로, 절차 정의에 대한 CI 게이트로 활용할 수 있습니다.

[sop]
sops_dir = "sops" # set this to activate SOP agent tools; defaults to <workspace>/sops
default_execution_mode = "supervised"

디스크의 최소 SOP 구조는 다음과 같습니다.

~/.revka/workspace/sops/
deploy-prod/
SOP.toml # metadata + triggers (required)
SOP.md # numbered procedure steps (optional)
SOP.toml
[sop]
name = "deploy-prod"
description = "Deploy service to production"
version = "1.0.0"
priority = "high" # low | normal | high | critical
execution_mode = "supervised" # auto | supervised | step_by_step | priority_based | deterministic
cooldown_secs = 300
max_concurrent = 1
[[triggers]]
type = "webhook"
path = "/sop/deploy"
[[triggers]]
type = "manual"