페인과 터미널
한 윈도우 안에서 페인을 분할하고 탭으로 전환하거나 확대해 작업합니다. 에이전트를 추가할 때마다 작업 폴더와 역할을 확인하세요. 여러 에이전트가 같은 파일을 동시에 수정해야 한다면 작업별 워크트리로 분리합니다.
다시 시작한 뒤 복원된 페인의 경로와 에이전트 상태를 확인하고 작업을 이어갑니다. 터미널 배치와 실제 실행 프로세스의 상태는 구분해 확인하세요.
VIBELINK DOCS · USER & DEVELOPER GUIDE
Find the guide for your first workspace, everyday workflows, agent hooks, and Chrome extension development.
USER GUIDE / QUICK START
VibeLink는 여러 AI 코딩 에이전트를 한 워크스페이스에서 실행하는 데스크톱 프로그램입니다. VibeLink 자체는 무료이며, 사용할 AI 서비스의 계정과 API 요금은 각 제공자의 정책을 따릅니다.
Claude Code, Codex, Gemini CLI 등 원하는 CLI를 해당 제공자의 안내에 따라 설치하고 로그인합니다. VibeLink에서 설치된 에이전트를 감지하더라도 제공자의 인증은 별도로 완료해야 합니다.
작업할 폴더를 선택하고 페인을 열어 에이전트를 고릅니다. 첫 작업은 “이 프로젝트의 실행 방법을 확인하고 현재 상태를 설명해줘”처럼 작고 확인 가능한 요청으로 시작합니다.
프로젝트 지침, 스킬, 워크트리 사용 방식을 선택합니다. 예와 아니요 모두 저장되며 나중에 워크스페이스 설정에서 바꿀 수 있습니다. 변경 파일과 적용 범위는 워크스페이스 초기 설정 안내를 참고하세요.
USER GUIDE / EVERYDAY WORK
한 윈도우 안에서 페인을 분할하고 탭으로 전환하거나 확대해 작업합니다. 에이전트를 추가할 때마다 작업 폴더와 역할을 확인하세요. 여러 에이전트가 같은 파일을 동시에 수정해야 한다면 작업별 워크트리로 분리합니다.
다시 시작한 뒤 복원된 페인의 경로와 에이전트 상태를 확인하고 작업을 이어갑니다. 터미널 배치와 실제 실행 프로세스의 상태는 구분해 확인하세요.
Review에서 에이전트가 보고한 답변을 Markdown으로 읽고 메모하거나 후속 요청을 보냅니다. 완료 표시만 보고 코드가 검증됐다고 판단하지 말고, 답변에 적힌 변경 파일과 실제 검사 결과를 함께 확인합니다.
답변이 없거나 잘렸다면 아래 문제 해결에서 해당 에이전트의 완료 hook 상태를 확인하세요.
Source Control에서 diff를 확인하고 작업에 해당하는 파일만 stage·commit합니다. History와 Branches로 이력과 브랜치를 비교합니다. 인라인 hunk 코멘트는 특정 변경에 대한 피드백을 남길 때 사용합니다.
워크트리는 같은 Git 저장소의 작업 폴더를 분리합니다. 생성 후에도 검증·커밋·병합은 별도 단계이며, 다른 작업의 미커밋 변경을 덮어쓰지 않아야 합니다.
자동화에서 일정 또는 트리거에 따라 실행할 에이전트 작업을 구성합니다. 실행할 프로젝트, 명령·프롬프트와 사용할 에이전트를 먼저 작은 작업으로 확인하세요.
실행 기록에서 성공·실패와 결과를 검토합니다. 예약이 저장됐다는 사실과 실제 작업이 완료됐다는 사실은 다릅니다. 외부 전송·배포 같은 작업에는 그 작업에 맞는 권한이 필요합니다.
페인 내 브라우저는 별도 프로필을 사용합니다. 평소 쓰는 Chrome의 로그인 상태와 탭을 사용하려면 Browser Control 확장을 연결합니다. 설치와 연결 확인은 브라우저 설치 절차를 따릅니다.
SSH 호스트에서는 원격 경로와 에이전트 설치 상태를 확인한 뒤 작업합니다. Android 원격 클라이언트는 Desktop의 연결 설정을 사용하며, 양쪽 버전과 연결 상태를 먼저 확인합니다.
Settings에서 터미널 테마, 키 바인딩, 인터페이스 언어와 에이전트별 스킬을 조정합니다. 스킬은 에이전트가 도구를 사용하는 방법을 설명하는 지침입니다. 스킬 설치만으로 브라우저 확장 설치·계정 로그인·외부 작업 권한까지 완료되지는 않습니다.
USER GUIDE / TROUBLESHOOTING
일반 터미널에서 해당 CLI가 실행되는지 먼저 확인합니다. 설치 경로가 PATH에 반영됐는지, 로그인과 제공자 설정이 끝났는지 점검한 뒤 VibeLink에서 다시 확인하세요.
VibeLink 안에서 시작한 페인인지, 해당 에이전트의 hook이 설치됐는지 확인합니다. 상태 이벤트와 최종 답변 이벤트는 서로 다릅니다. 개발자는 아래 상태·완료 계약과 실제 payload를 비교하세요.
vibelink --json status가 running인지 먼저 확인합니다. 그다음 확장 사용 설정, connected, extensionVersion, trustedExtensionId를 확인합니다. 다른 복사본으로 교체한 경우에만 ID 충돌 여부를 확인하고 pairing을 초기화합니다.
01 / START HERE
VibeLink has three extension points. Pick the smallest one that matches the job.
Connect start, tool, permission, and completion events to pane state and Review.
hook 만들기 →A Manifest V3 companion controls existing Chrome tabs over a local WebSocket. Data does not go to the website.
확장 만들기 →A SKILL.md package adds instructions and workflow knowledge without executable hooks.
스킬 설정 보기 →02 / MENTAL MODEL
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.
03 / AGENT HOOKS
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.
Working: prompt/tool events · Waiting: permission/question · Idle: completed turn · Bind: session start.
VIBELINK_SESSION_ID, VIBELINK_PANE_ID, VIBELINK_PANE_INSTANCE_ID, VIBELINK_CLI_EXE가 없으면 조용히 stdin을 소비하고 종료합니다.
상태는 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.json | JSON hook | SessionStart · Stop · PreToolUse · PermissionRequest · PostToolUse |
| Codex | $CODEX_HOME/hooks.json | JSON hook | SessionStart · UserPromptSubmit · PreToolUse · PermissionRequest · Stop |
| Gemini CLI | ~/.gemini/settings.json | JSON hook | BeforeAgent · AfterAgent |
| Cursor Agent | ~/.cursor/hooks.json | JSON hook | beforeSubmitPrompt · stop |
| OpenCode | ~/.config/opencode/plugins/vibelink-complete.js | drop-in plugin | chat.message · event · session.idle |
| Pi / Oh My Pi | ~/.pi or ~/.omp/agent/extensions/ | TypeScript extension | agent_start · message_end · agent_settled |
| Hermes | %LOCALAPPDATA%/hermes/config.yaml | Python plugin | pre_llm_call · post_llm_call · on_session_end |
| Kimi Code | $KIMI_CODE_HOME/config.toml | TOML hook | UserPromptSubmit · PreToolUse · Stop |
04 / CHROME MV3
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를 거부합니다.
05 / LOCAL DEVELOPMENT
chrome://extensions에서 Developer mode를 켜고 Load unpacked를 선택합니다.# 연결 상태 확인
vibelink --json status
vibelink --json browser chrome
# 확장 ID를 바꾼 뒤 pairing 초기화
vibelink browser chrome --unpair06 / 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.
{
"vibelinkFinalResponse": "에이전트가 실제로 반환한 최종 답변",
"agent": "opencode",
"transcript_path": "C:/…/session.jsonl"
}직접 답변 필드 예: vibelinkFinalResponse, last_assistant_message, prompt_response, assistant_response. 경로 필드 예: transcript_path, session_id.
07 / SHIP IT
08 / REFERENCES
Basis: VibeLink Desktop agent_hooks and browser-extension sources, plus official platform docs checked in September 2026.