VIBELINK DOCS · USER & DEVELOPER GUIDE

Start, work, and extend VibeLink

Find the guide for your first workspace, everyday workflows, agent hooks, and Chrome extension development.

DESKTOP 0.7.xMANIFEST V3GPL-3.0

USER GUIDE / QUICK START

설치하고 첫 작업 시작하기

VibeLink는 여러 AI 코딩 에이전트를 한 워크스페이스에서 실행하는 데스크톱 프로그램입니다. VibeLink 자체는 무료이며, 사용할 AI 서비스의 계정과 API 요금은 각 제공자의 정책을 따릅니다.

1

운영체제에 맞는 설치 파일 받기

다운로드 페이지에서 Windows, Ubuntu 또는 macOS 패키지를 선택합니다. 버전별 변경 사항과 대응 소스는 릴리스 페이지에서 확인합니다. Voice는 별도 Windows 앱이고 Android 앱은 원격 클라이언트입니다.

2

사용할 에이전트 CLI 준비하기

Claude Code, Codex, Gemini CLI 등 원하는 CLI를 해당 제공자의 안내에 따라 설치하고 로그인합니다. VibeLink에서 설치된 에이전트를 감지하더라도 제공자의 인증은 별도로 완료해야 합니다.

3

프로젝트 폴더로 워크스페이스 열기

작업할 폴더를 선택하고 페인을 열어 에이전트를 고릅니다. 첫 작업은 “이 프로젝트의 실행 방법을 확인하고 현재 상태를 설명해줘”처럼 작고 확인 가능한 요청으로 시작합니다.

4

워크플로 초기 설정 검토하기

프로젝트 지침, 스킬, 워크트리 사용 방식을 선택합니다. 예와 아니요 모두 저장되며 나중에 워크스페이스 설정에서 바꿀 수 있습니다. 변경 파일과 적용 범위는 워크스페이스 초기 설정 안내를 참고하세요.

USER GUIDE / EVERYDAY WORK

프로그램의 주요 기능 사용하기

WORKSPACE

페인과 터미널

한 윈도우 안에서 페인을 분할하고 탭으로 전환하거나 확대해 작업합니다. 에이전트를 추가할 때마다 작업 폴더와 역할을 확인하세요. 여러 에이전트가 같은 파일을 동시에 수정해야 한다면 작업별 워크트리로 분리합니다.

다시 시작한 뒤 복원된 페인의 경로와 에이전트 상태를 확인하고 작업을 이어갑니다. 터미널 배치와 실제 실행 프로세스의 상태는 구분해 확인하세요.

REVIEW

답변 읽고 후속 요청하기

Review에서 에이전트가 보고한 답변을 Markdown으로 읽고 메모하거나 후속 요청을 보냅니다. 완료 표시만 보고 코드가 검증됐다고 판단하지 말고, 답변에 적힌 변경 파일과 실제 검사 결과를 함께 확인합니다.

답변이 없거나 잘렸다면 아래 문제 해결에서 해당 에이전트의 완료 hook 상태를 확인하세요.

GIT

변경 확인과 워크트리

Source Control에서 diff를 확인하고 작업에 해당하는 파일만 stage·commit합니다. History와 Branches로 이력과 브랜치를 비교합니다. 인라인 hunk 코멘트는 특정 변경에 대한 피드백을 남길 때 사용합니다.

워크트리는 같은 Git 저장소의 작업 폴더를 분리합니다. 생성 후에도 검증·커밋·병합은 별도 단계이며, 다른 작업의 미커밋 변경을 덮어쓰지 않아야 합니다.

AUTOMATIONS

반복 작업 예약하기

자동화에서 일정 또는 트리거에 따라 실행할 에이전트 작업을 구성합니다. 실행할 프로젝트, 명령·프롬프트와 사용할 에이전트를 먼저 작은 작업으로 확인하세요.

실행 기록에서 성공·실패와 결과를 검토합니다. 예약이 저장됐다는 사실과 실제 작업이 완료됐다는 사실은 다릅니다. 외부 전송·배포 같은 작업에는 그 작업에 맞는 권한이 필요합니다.

BROWSER & REMOTE

브라우저와 원격 접속

페인 내 브라우저는 별도 프로필을 사용합니다. 평소 쓰는 Chrome의 로그인 상태와 탭을 사용하려면 Browser Control 확장을 연결합니다. 설치와 연결 확인은 브라우저 설치 절차를 따릅니다.

SSH 호스트에서는 원격 경로와 에이전트 설치 상태를 확인한 뒤 작업합니다. Android 원격 클라이언트는 Desktop의 연결 설정을 사용하며, 양쪽 버전과 연결 상태를 먼저 확인합니다.

설정과 스킬

Settings에서 터미널 테마, 키 바인딩, 인터페이스 언어와 에이전트별 스킬을 조정합니다. 스킬은 에이전트가 도구를 사용하는 방법을 설명하는 지침입니다. 스킬 설치만으로 브라우저 확장 설치·계정 로그인·외부 작업 권한까지 완료되지는 않습니다.

하루의 작업 흐름프로젝트 열기 → 작업별 페인/워크트리 준비 → 에이전트 실행 → Review와 diff 확인 → 필요한 검사 → 커밋.

USER GUIDE / TROUBLESHOOTING

잘 동작하지 않을 때

?

에이전트가 감지되지 않아요

일반 터미널에서 해당 CLI가 실행되는지 먼저 확인합니다. 설치 경로가 PATH에 반영됐는지, 로그인과 제공자 설정이 끝났는지 점검한 뒤 VibeLink에서 다시 확인하세요.

?

작업 상태나 Review가 갱신되지 않아요

VibeLink 안에서 시작한 페인인지, 해당 에이전트의 hook이 설치됐는지 확인합니다. 상태 이벤트와 최종 답변 이벤트는 서로 다릅니다. 개발자는 아래 상태·완료 계약과 실제 payload를 비교하세요.

?

Chrome이 연결되지 않아요

vibelink --json status가 running인지 먼저 확인합니다. 그다음 확장 사용 설정, connected, extensionVersion, trustedExtensionId를 확인합니다. 다른 복사본으로 교체한 경우에만 ID 충돌 여부를 확인하고 pairing을 초기화합니다.

?

문서와 메뉴가 달라요

설치한 Desktop과 CLI 버전을 확인하고 릴리스 변경 사항을 비교하세요. 개발 소스의 기능이 아직 공개 설치 파일에 포함되지 않았을 수 있습니다. 재현 단계와 버전을 정리해 버그 리포트 또는 공식 커뮤니티로 알려주세요.

01 / START HERE

Choose the extension point

VibeLink has three extension points. Pick the smallest one that matches the job.

A

Agent hook

Connect start, tool, permission, and completion events to pane state and Review.

hook 만들기 →
B

Browser Control

A Manifest V3 companion controls existing Chrome tabs over a local WebSocket. Data does not go to the website.

확장 만들기 →
권장 순서Skill로 지침을 정리하고 → hook으로 상태/결과를 연결하고 → 브라우저 제어가 필요할 때만 MV3 확장을 추가하세요.

02 / MENTAL MODEL

The data flow

Agent hooks report state and completion through the narrow VibeLink CLI contract. The Chrome extension connects to the daemon over an authenticated loopback WebSocket. The daemon validates workspace, pane, and instance before updating the UI and Review.

Agent CLInative events / payload
→
Hook adapterstate + completion
→
VibeLink daemonworkspace · pane · instance
→
Pane / Reviewworking · waiting · idle
Chrome service workerchrome.debugger
⇄
loopback WebSocketOrigin: chrome-extension://…
⇄
VibeLink daemonpaired extension id

03 / AGENT HOOKS

Build an agent hook

Desktop supports JSON hooks, drop-in TypeScript plugins, the Hermes Python plugin, and Kimi TOML. Merge into existing configuration; never overwrite a user’s hooks.

1

이벤트를 고릅니다

Working: prompt/tool events · Waiting: permission/question · Idle: completed turn · Bind: session start.

2

VibeLink 환경을 확인합니다

VIBELINK_SESSION_ID, VIBELINK_PANE_ID, VIBELINK_PANE_INSTANCE_ID, VIBELINK_CLI_EXE가 없으면 조용히 stdin을 소비하고 종료합니다.

3

상태와 완료를 분리합니다

상태는 terminal state, 최종 답변은 terminal complete --hook-stdin으로 보냅니다. 완료 payload는 가능한 경우 원문을 보존합니다.

// OpenCode drop-in example
import { spawn } from 'node:child_process'

const cli = process.env.VIBELINK_CLI_EXE
const ids = ['--workspace', process.env.VIBELINK_SESSION_ID, '--pane', process.env.VIBELINK_PANE_ID, '--agent-id', 'my-agent', '--pane-instance-id', process.env.VIBELINK_PANE_INSTANCE_ID]
const reportState = (state) => cli && spawn(cli, ['terminal', 'state', ...ids, '--state', state], { detached: true, windowsHide: true }).unref()
const reportCompletion = (text) => {
  if (!cli || !text?.trim()) return
  const child = spawn(cli, ['terminal', 'complete', ...ids, '--hook-stdin'], { windowsHide: true })
  child.stdin.end(JSON.stringify({ vibelinkFinalResponse: text.trim() }))
}

export const VibeLinkCompletion = async ({ client }) => ({
  'chat.message': async () => reportState('working'),
  event: async ({ event }) => {
    if (event.type === 'permission.asked') return reportState('waiting')
    if (event.type !== 'session.idle') return
    const text = await lastAssistantText(client, event.properties.sessionID)
    reportState('idle')
    reportCompletion(text)
  },
})

지원 어댑터와 기본 위치

Agent기본 파일방식주요 이벤트
Claude Code~/.claude/settings.jsonJSON hookSessionStart · Stop · PreToolUse · PermissionRequest · PostToolUse
Codex$CODEX_HOME/hooks.jsonJSON hookSessionStart · UserPromptSubmit · PreToolUse · PermissionRequest · Stop
Gemini CLI~/.gemini/settings.jsonJSON hookBeforeAgent · AfterAgent
Cursor Agent~/.cursor/hooks.jsonJSON hookbeforeSubmitPrompt · stop
OpenCode~/.config/opencode/plugins/vibelink-complete.jsdrop-in pluginchat.message · event · session.idle
Pi / Oh My Pi~/.pi or ~/.omp/agent/extensions/TypeScript extensionagent_start · message_end · agent_settled
Hermes%LOCALAPPDATA%/hermes/config.yamlPython pluginpre_llm_call · post_llm_call · on_session_end
Kimi Code$KIMI_CODE_HOME/config.tomlTOML hookUserPromptSubmit · PreToolUse · Stop

04 / CHROME MV3

Build a Chrome extension

Browser Control uses a Manifest V3 service worker and chrome.debugger, with one loopback WebSocket to the VibeLink daemon. It does not download and execute remote code outside the package.

{
  "manifest_version": 3,
  "name": "My VibeLink Control",
  "version": "0.1.0",
  "background": { "service_worker": "service-worker.js", "type": "module" },
  "permissions": ["debugger", "storage", "tabs"]
}

권한을 최소화하세요

debugger는 Chrome이 사용자에게 디버깅 알림을 표시합니다. 이 알림을 숨기거나 우회하지 말고, 필요한 권한만 manifest에 선언합니다.

브리지를 인증하세요

Chrome이 보내는 Origin: chrome-extension://<id>를 daemon에서 확인하고, 첫 연결 ID를 data 디렉터리에 저장해 다른 확장 ID를 거부합니다.

보안 경계웹사이트 서버·외부 API·native messaging host를 경로에 넣지 않습니다. VibeLink Browser Control의 기본 통신은 로컬 loopback뿐입니다.

05 / LOCAL DEVELOPMENT

Install and develop locally

STORE

Chrome Web Store

  1. VibeLink Download에서 Browser Control zip을 받습니다.
  2. Chrome Web Store에서 확장을 설치하고 사용 설정합니다.
  3. Desktop을 재시작한 뒤 `vibelink browser chrome`의 connected/version을 확인합니다.
UNPACKED

unpacked 개발

  1. Desktop Settings → Browser → Install Chrome extension을 실행합니다.
  2. chrome://extensions에서 Developer mode를 켜고 Load unpacked를 선택합니다.
  3. 코드만 바뀌었으면 Reload를 누릅니다. ID·경로·bridge 계약이 바뀌었으면 기존 복사본을 제거하고 다시 Load 합니다.
# 연결 상태 확인
vibelink --json status
vibelink --json browser chrome

# 확장 ID를 바꾼 뒤 pairing 초기화
vibelink browser chrome --unpair

06 / CONTRACT

State and completion contract

The visible state is working, waiting, or idle; bind is an installation action that associates a session. Completion payloads differ by agent, so read direct text first, then a transcript path, then a session id as a conservative fallback.

bindpane와 agent 연결
workingprompt / tool 실행
waiting권한·질문 대기
idleturn 종료·Review 생성
{
  "vibelinkFinalResponse": "에이전트가 실제로 반환한 최종 답변",
  "agent": "opencode",
  "transcript_path": "C:/…/session.jsonl"
}

직접 답변 필드 예: vibelinkFinalResponse, last_assistant_message, prompt_response, assistant_response. 경로 필드 예: transcript_path, session_id.

07 / SHIP IT

Verification checklist

릴리스 호환성OpenCode 2 plugin API는 2026년 9월 기준 beta입니다. 지원할 최소 버전과 최신 버전에서 모두 테스트하고, exact npm version 또는 Git commit으로 재현 가능한 빌드를 고정하세요.

08 / REFERENCES

Official references

Basis: VibeLink Desktop agent_hooks and browser-extension sources, plus official platform docs checked in September 2026.

VibeLink 문서 — 사용법과 플러그인 개발