<div align="center">
<img src="https://raw.githubusercontent.com/selftune-dev/selftune/HEAD/assets/logo.svg" alt="selftune logo" width="80" />
selftune
AI 에이전트를 위한 스킬 수준 관측 가능성 및 자체 개선.
CI
CodeQL
OpenSSF Scorecard
npm version
License: MIT
TypeScript
Zero Dependencies
Bun
당신의 에이전트 스킬은 당신의 작업 방식을 학습합니다. 무엇이 고장 났는지 감지하고 자동으로 수정합니다.
웹사이트 · 설치 · 로컬 vs 클라우드 · 사용 사례 · 작동 방식 · 명령어 · 플랫폼 · 문서
</div>
selftune은 오픈 소스 에이전트 스킬 관측 가능성(observability) 툴킷으로, AI 에이전트가 스킬을 사용하는 방식을 감시하고, 스킬이 조용히 실패하는 경우를 감지하며, 사용자가 실제로 말하는 방식에 맞춰 스킬 설명을 자동으로 재작성합니다. 이는 에이전트의 스킬 라우팅 레이어(skill routing layer)에 대한 관측 가능성과 지속적인 개선을 결합한 것으로 생각할 수 있습니다.
당신의 스킬은 사용자가 말하는 방식을 이해하지 못합니다. "슬라이드 덱 만들어줘(make me a slide deck)"라고 말해도 아무 일도 일어나지 않습니다—오류도 없고, 로그도 없고, 신호도 없습니다. selftune은 실제 세션을 관찰하고, 실제로 사용하는 방식(말투)을 학습하며, 그에 맞춰 스킬 설명을 재작성합니다. 자동으로요.
Claude Code(주요 지원), Codex, OpenCode, Cline, OpenClaw, 그리고 Pi와 함께 작동합니다. 타입이 지정된 Drizzle Persistence를 사용하는 Bun 네이티브 방식입니다. MIT 라이선스입니다.
설치
npx skills add selftune-dev/selftune
그런 다음 에이전트에게 다음과 같이 지시합니다: "initialize selftune"
2분 만에, API 키 필요 없음, 외부 서비스 연결 불필요, 복잡한 설정 절차도 없습니다. 기존 에이전트 구독을 사용합니다. 어떤 스킬들이 충분히 활용되지 못하고 있는지(undertriggering) 확인할 수 있습니다.
CLI 전용 (스킬 없이 CLI만):
npx selftune@latest doctor
업데이트하기
스킬과 CLI는 하나의 npm 패키지로 함께 제공됩니다. 업데이트하려면:
npx skills add selftune-dev/selftune
이 명령어는 스킬(SKILL.md, 워크플로우)과 CLI의 최신 버전을 모두 재설치합니다. selftune doctor는 새 버전이 사용 가능할 때 경고를 표시합니다.
로컬 대시보드가 이미 실행 중이라면, 다음을 다시 실행합니다:
이제 이 명령어는 대상 포트에 있는 정상적인(healthy) 대시보드를 재사용하며, 업그레이드 후 오래된 독립형 대시보드 인스턴스를 자동으로 재시작하여 수동으로 프로세스를 찾지 않아도 새 UI를 가져올 수 있게 합니다. 강제 재시작하려면 selftune dashboard --restart를 사용하십시오.
브라우저가 재시작 후에도 이전 클라이언트를 유지하고 있다면, 대시보드는 이제 조용히 오래된 상태로 남아있는 대신 명시적인 새로고침 프롬프트를 표시합니다.
데스크톱 앱
네이티브 데스크톱 호스트는 CLI와 동일한 로컬 SQLite 데이터, 스킬 검색 기능, React 대시보드를 사용합니다. 터미널 명령에 사용되는 것과 동일한 컴파일된 selftune 바이너리를 번들링하고, 인증된 루프백(loopback)에서 selftune daemon run을 시작하며, SelfTune이 세션을 관찰하기 전에도 설치된 모든 스킬을 표시합니다.
첫 실행 온보딩 과정에서는 어떤 하네스 히스토리를 가져올지, 라이브 SelfTune 훅을 어디에 설치할지, 그리고 백그라운드에서 관측 가능성(observability), 일일 건강 추천, 또는 자율 개선 기능을 실행할지 선택할 수 있습니다.
설치된 빌드는 소유자 범위의 LaunchAgent, systemd user service 또는 Windows 예약 작업(scheduled task)을 통해 인증된 로컬 서비스를 윈도우가 종료한 후에도 유지할 수 있습니다. CLI는 이러한 서비스 정의를 소유하며, 충돌 후 재시작하고 메뉴 표시줄에서 제어됩니다. 서명된 데스크톱 릴리스는 GitHub Releases에서 인플레이스(in-place)로 업데이트되며, 백그라운드 다운로드와 새 버전 준비 시 명시적인 재시작 프롬프트를 제공합니다. Sync & Backup 토큰은 플랫폼 볼트가 사용 가능한 경우 macOS Keychain, Linux Secret Service 또는 Windows Credential Manager에 저장됩니다.
데스크톱은 로컬 워크플로우를 위해 클라우드 계정이 필요하지 않습니다. **설정(Settings) → 동기화 및 백업(Sync & Backup)**에서 **클라우드 계정 연결(Connect Cloud account)**을 누르면 짧은 시간 동안의 브라우저 승인 창이 열리며, 여기서 로그인하거나 계정을 생성할 수 있습니다. 이 승인은 장치를 안전하게 연결하고 API 토큰 복사 없이 첫 번째 백업을 시도하며, 원시 전사 기록(raw transcripts)은 로컬에 유지됩니다. 사이드바 서버 선택기는 동일한 바로가기를 노출합니다: SelfTune Cloud는 연결되지 않았을 때는 **연결(Connect)**을 표시하고, 이후에는 **연결됨(Connected)**을 표시합니다. 연결하는 것은 데스크톱 내부에 머무르게 하며, 연결된 행을 선택하면 로컬에서 Sync & Backup이 열리고, **클라우드 대시보드 열기 ↗**는 별도의 브라우저 동작입니다. 브라우저 승인이 완료되면 데스크톱으로 포커스가 돌아옵니다.
소스에서 빌드 및 실행하기:
cd apps/desktop
bun run dev
프로덕션 패키징 명령어는 bun run build 이후에 bun run package:mac, package:win, 그리고 package:linux입니다. 런타임 및 보안 모델은 Desktop Control Plane를 참조하십시오.
자체 호스팅(Self-Hosting)
선택적인 OSS 자체 호스팅 패키지는 동일한 대시보드와 Remote Library v1 프로토콜을 하나의 비루트 컨테이너에 패키징합니다. Postgres, 객체 스토리지 서비스, 큐 또는 워커가 필요하지 않습니다: 테넌트 범위의 SQLite 및 불변 콘텐츠 주소 지정 객체가 하나의 /data 볼륨에서 함께 작동합니다. 원시 전사 기록은 절대 동기화되지 않습니다.
cd apps/selfhost
cp .env.example .env
...
모든 SelfTune 설치본을 selftune library configure로 연결한 다음, SelfTune Cloud와 마찬가지로 library preview, sync, status, 및 diagnostics를 사용합니다. 선택적 계정 토큰은 조직 간 수신자 범위의 비공개 공유를 활성화합니다. TLS, 계정, 백업 및 복원 지침은 SelfTune Self-Host를 참조하세요.
로컬(Local), 자체 호스팅(self-hosted), 및 관리형(managed)
SelfTune은 두 개의 선택적 협업 호스트를 가진 로컬 우선 제품입니다. 실제 스킬(skills), 세션(sessions), 평가(evaluations), 및 개선 사항은 세 가지 모드 모두에서 사용자의 컴퓨터에 남아 있습니다.
| 기능/역량 | 로컬 데스크톱 (Local Desktop) | 고객 자체 호스팅 (Customer self-host) | 관리형 SelfTune Cloud (Managed SelfTune Cloud) |
|---|
| 스킬을 발견, 구성, 범위 지정, 평가 및 개선 | 예(Yes) | 예(Yes) | 예(Yes), 연결된 데스크톱을 통해 |
| ... | | | |
데스크톱으로 시작하세요. 조직이 자체 협업 데이터와 인프라를 소유하기를 원할 때 OSS 자체 호스팅을 추가합니다. 동일한 좁은 범위의 협업 여정을 대신 운영받고 싶을 때 관리형 클라우드를 추가합니다. 자체 호스팅에는 Stripe나 PragSys의 다중 고객 제어 평면(multi-customer control plane)이 필요하지 않습니다.
별도의 클라우드 CLI가 없습니다. 동일한 selftune 바이너리는 원격 라이브러리(Remote Library) 공유 및 개인 정보 보호가 안전한 매니페스트를 위해 두 호스트 모두에 연결할 수 있습니다. 기여자 릴레이(Contributor relay)는 구성된 원격 라이브러리 호스트 및 자격 증명을 따르므로, 자체 호스팅을 선택하는 경우에도 해당 집계값은 그 신뢰 경계 내에 유지됩니다. 평가, 제안 생성, 검증, 변경 사항 적용은 로컬로 유지됩니다.
로컬 대시보드 런타임(runtime) 또는 HMR 플로우에 기여하는 경우, [CONTRIBUTING.md]를 참조하세요.
이전/이후 (Before / After)
<p align="center">
<img src="https://raw.githubusercontent.com/selftune-dev/selftune/main/assets/BeforeAfter.gif" alt="Before: 47% pass rate → After: 89% pass rate" width="800">
</p>
selftune은 실제 사용자들이 "slides", "deck", "presentation for Monday"와 같이 말하지만, 이 단어들은 원래의 스킬 설명과 일치하지 않는다는 것을 학습했습니다. selftune은 사람들이 실제로 사용하는 방식에 맞춰 설명을 재작성합니다. eval 세트를 통해 검증하고 백업을 사용하여 배포했습니다. 완료되었습니다.
실제 작업 방식에 맞춰 구축됨
내가 직접 스킬을 작성하고 사용함 — 당신의 스킬 설명은 실제로 사용하는 방식과 일치하지 않습니다. 에이전트에게 "내 스킬 개선해 줘"라고 말하면, selftune이 실제 세션에서 언어를 학습하고, 이에 맞게 설명을 진화시키며, 배포 전에 검증합니다. 수동 조정(manual tuning)이 필요 없습니다.
다른 사람이 설치하는 스킬을 발행함 — 당신의 스킬은 당신에게는 작동하지만, 모든 사용자는 다르게 말합니다. selftune은 크리에이터가 실제 출시 전/후 루프(before-ship / after-ship loop)를 가질 수 있게 합니다: 출시 전에 라우터(router)를 테스트하고, selftune에 연결된 설치를 위해 크리에이터 주도 기여를 번들링하며, 출시 후에 기여자 신호(contributor signals)를 검사한 다음, 그 신호를 제안 및 개선된 시각화로 전환합니다.
여러 스킬을 가진 에이전트 구성을 관리함 — 15개 이상의 스킬이 설치되어 있습니다. 어떤 것은 작동하고, 어떤 것은 그렇지 않습니다. 일부는 충돌합니다. 에이전트에게 "내 스킬 상태가 어때?"라고 말하면, selftune은 건강 대시보드(health dashboard)를 제공하고 뒤처지는 스킬을 자동으로 개선해 줍니다.
비코딩 작업에 스킬 사용 — 마케팅 워크플로우, 리서치 파이프라인, 규정 준수 검사, 슬라이드 데크 등. "발표 자료 만들어 줘"라고 말해도 아무 일도 일어나지 않습니다. selftune은 "slides", "deck", 그리고 "presentation for Monday"가 모두 동일한 스킬을 의미한다는 것을 학습하고 라우팅(routing)을 자동으로 수정합니다.
크리에이터 라이프사이클
스킬을 발행한다면, 루프는 다음과 같습니다:
- 스킬 라우터(skill router), 워크플로우(workflows), 참조(references), 도구(tools)를 명확하게 구성합니다.
- 출시 전에 스킬 패키지(skill package)를 검증하고 라우터를 테스트합니다.
- 평가(evals), 단위 테스트(unit tests), 리플레이 검증(replay validation), 기준선(baseline)이 마련된 후에만 배포합니다.
selftune creator-contributions enable과 함께 selftune.contribute.json을 번들링합니다.
- 출시 후 Selftune Cloud에서 기여자 신호(contributor signals)를 검토합니다.
- 임계값(thresholds)이 충족될 때만 기여자 집계 데이터(contributor aggregate data)로부터 제안서(proposals)를 생성합니다.
- 일반적인 제안 흐름을 통해 변경 사항을 적용하고 모니터링합니다.
스킬 테스트 방법
간소화된 라이프사이클은 다음과 같습니다:
selftune verify --skill-path path/to/SKILL.md
selftune publish --skill-path path/to/SKILL.md
selftune search-run --skill-path path/to/SKILL.md --surface both
...
각 단계가 제공하는 것:
verify: 먼저 초안 패키지(draft-package) 준비 상태 검사를 실행한 다음, 초안이 준비되면 벤치마크 스타일의 패키지 보고서(package report)를 출력합니다. 아직 준비 상태가 불완전하면 추측하는 대신 누락된 다음 저수준 단계(low-level step)를 표시합니다.
publish: 초안 패키지 배포 흐름(draft-package publish flow)으로 위임하고 기본적으로 watch를 시작합니다. 수동 모니터링 인계(manual monitoring handoff)를 원한다면 --no-watch를 사용하십시오.
search-run: 승인된 프론티어(accepted frontier)에 대해 라우팅/바디 패키지 변형(routing/body package variants)의 제한된 미니배치(minibatch)를 평가하고 측정된 승자(winner)와 출처(provenance)를 영구 저장합니다.
search-run은 현재 명시적인 패키지 개선 표면(explicit package-improvement surface)입니다. run / orchestrate는 아직 제한된 패키지 검색을 자동으로 선택하지 않습니다.
improve는 evolve와 evolve body에 대한 의도 수준의 별칭(intention-level alias)입니다. 올바른 변이 표면(mutation surface)을 이미 알고 있다면 --scope description|routing|body를 사용하십시오.
run은 orchestrate에 대한 의도 수준의 별칭이므로, 내부 명령어 이름을 기억하지 않고 전체 폐쇄 루프(closed loop)를 미리 보거나 작동시킬 수 있습니다.
명시적인 제어가 필요할 때는 고급 라이프사이클 원시 요소(advanced lifecycle primitives)가 여전히 사용 가능합니다.
selftune create check --skill-path path/to/SKILL.md
selftune eval generate --skill my-skill
selftune eval unit-test --skill my-skill --generate --skill-path path/to/SKILL.md
...
로컬 대시보드 개요(local dashboard overview), 스킬별 보고서(per-skill report), 그리고 selftune status 모두 해당 아티팩트(artifacts)에서 읽어와 스킬이 테스트 중 차단되었는지, 배포 준비가 되었는지, 아니면 이미 모니터링 중인지를 보여줍니다.
작동 방식 (How It Works)
<p align="center">
<img src="https://raw.githubusercontent.com/selftune-dev/selftune/main/assets/FeedbackLoop.gif" alt="Observe → Detect → Evolve → Watch" width="800">
</p>
스킬이 학습하고 적응하도록 만드는 지속적인 피드백 루프(feedback loop)입니다. 자동으로 이루어집니다. 사용자의 에이전트가 모든 것을 실행하므로, 사용자는 단순히 스킬을 설치하고 자연스럽게 대화하기만 하면 됩니다.
관측(Observe) — 7개의 실시간 후크(hooks)가 모든 질의(query), 모든 스킬 호출(skill invocation), 그리고 모든 수정 신호(correction signal)를 포착합니다. 이는 단순한 원시 로그(raw logs)가 아닌 구조화된 원격 측정 데이터(structured telemetry)입니다. Claude Code에서는 selftune init 동안 후크가 자동으로 설치됩니다. 기존 트랜스크립트(transcripts)는 selftune ingest claude로 백필(backfill)할 수 있습니다.