OpenClaw v2026.2 적용 | 본문은 기본 설치를 완료하고 브라우저로 OpenClaw를 관리하고 싶은 사용자를 대상으로 합니다.
TL;DR: Web UI는 http://127.0.0.1:18789에서 접속합니다. Chat(대화), Sessions(세션), Config(설정), Nodes(노드), Logs(로그), Skills(스킬) 페이지를 포함합니다. Canvas는 Agent 기반 시각화 작업 공간으로, 차트, 대시보드, 인터랙티브 UI를 만들 수 있습니다. 원격 접속: Tailscale Serve 또는 SSH 터널. 모바일 Canvas는 iOS/Android 앱에서 사용 가능합니다.
Web Control UI
Web UI 접속
Gateway를 시작한 후 브라우저에서 접속합니다:
http://127.0.0.1:18789
인터페이스 개요
flowchart LR
subgraph WebUI["Web Control UI"]
Chat[Chat 대화]
Sessions[Sessions 세션]
Config[Config 설정]
Nodes[Nodes 노드]
Logs[Logs 로그]
Skills[Skills 스킬]
end
subgraph Features["기능"]
F1[실시간 대화]
F2[세션 관리]
F3[설정 편집]
F4[노드 제어]
F5[로그 보기]
F6[스킬 관리]
end
Chat --> F1
Sessions --> F2
Config --> F3
Nodes --> F4
Logs --> F5
Skills --> F6
페이지 기능
Chat(대화)
| 기능 | 설명 |
|---|---|
| 메시지 입력 | 텍스트, Markdown, 코드 블록 지원 |
| 메시지 기록 | 전체 대화 기록 표시 |
| 도구 호출 | 도구 호출 과정 및 결과 표시 |
| 사고 과정 | Agent 사고 과정 선택 표시 |
| Token 통계 | Token 사용량 표시 |
| 모델 전환 | 사용 모델 빠른 전환 |
Sessions(세션)
| 기능 | 설명 |
|---|---|
| 세션 목록 | 모든 활성 세션 확인 |
| 세션 상세 | 개별 세션 상태 및 설정 확인 |
| 세션 작업 | 세션 초기화, 삭제, 내보내기 |
| 세션 전환 | 세션 간 전환 |
| 세션 격리 | 채널, 사용자별 세션 보기 |
Config(설정)
| 기능 | 설명 |
|---|---|
| 설정 편집 | 온라인 설정 파일 편집 |
| 설정 검증 | 실시간 설정 문법 검증 |
| 설정 핫 업데이트 | 재시작 없이 적용 |
| 설정 내보내기 | 설정 백업 내보내기 |
| 설정 이력 | 설정 변경 이력 확인 |
Nodes(노드)
| 기능 | 설명 |
|---|---|
| 노드 목록 | 연결된 기기 노드 확인 |
| 노드 상태 | 온라인 상태, 권한 표시 |
| 노드 제어 | 노드 기능 활성화/비활성화 |
| 노드 페어링 | 새 노드 페어링 |
Logs(로그)
| 기능 | 설명 |
|---|---|
| 실시간 로그 | 시스템 로그 스트리밍 표시 |
| 로그 필터 | 레벨, 모듈별 필터 |
| 로그 검색 | 키워드 로그 검색 |
| 로그 내보내기 | 로그 파일 다운로드 |
Skills(스킬)
| 기능 | 설명 |
|---|---|
| 스킬 목록 | 설치된 스킬 확인 |
| 스킬 설치 | ClawHub에서 스킬 설치 |
| 스킬 설정 | 스킬 매개변수 설정 |
| 스킬 비활성화 | 스킬 활성화/비활성화 |
Web UI 설정
{
"web": {
"enabled": true,
"port": 18789,
"bind": "loopback",
"auth": {
"mode": "password",
"password": "your-secure-password"
},
"theme": "dark"
}
}
| 설정 항목 | 설명 | 기본값 |
|---|---|---|
enabled |
Web UI 활성화 | true |
port |
리스닝 포트 | 18789 |
bind |
바인딩 주소 | loopback |
auth.mode |
인증 모드 | none |
auth.password |
접근 비밀번호 | - |
theme |
테마 | dark |
원격 접속
방법 1: Tailscale
{
"gateway": {
"tailscale": {
"mode": "serve"
}
}
}
Tailscale 네트워크로 접속:
https://your-tailnet-name.ts.net
방법 2: SSH 터널
# 로컬에서 SSH 터널 생성
ssh -L 18789:localhost:18789 user@remote-server
# 그 다음 접속
http://localhost:18789
방법 3: 리버스 프록시
Caddy 또는 Nginx 사용:
Caddyfile:
your-domain.com {
reverse_proxy localhost:18789
}
Canvas 시각화 작업 공간
Canvas란?
Canvas는 Agent 기반 시각화 작업 공간입니다. Agent는 다음을 수행할 수 있습니다:
- 동적 차트 생성
- 인터랙티브 UI 구성
- 실시간 데이터 표시
- 대시보드 생성
- 외부 콘텐츠 임베드
Canvas 아키텍처
flowchart TB
subgraph Agent["Agent"]
PROMPT[요청 분석]
GEN[A2UI 생성]
EXEC[작업 실행]
end
subgraph Canvas["Canvas 런타임"]
RENDER[렌더링 엔진]
STATE[상태 관리]
EVENT[이벤트 처리]
end
subgraph UI["사용자 인터페이스"]
DISPLAY[Canvas 표시]
INTERACT[사용자 상호작용]
end
Agent --> Canvas
PROMPT --> GEN
GEN --> RENDER
RENDER --> DISPLAY
DISPLAY --> INTERACT
INTERACT --> EVENT
EVENT --> EXEC
기본 사용
채팅에서 Canvas 사용
사용자: 간단한 할 일 앱 만들어줘
Agent: 할 일 Canvas 앱을 만들어 드리겠습니다...
[Canvas 컴포넌트 생성]
Canvas 명령
| 명령 | 설명 |
|---|---|
/canvas create |
새 Canvas 생성 |
/canvas show |
현재 Canvas 표시 |
/canvas clear |
Canvas 비우기 |
/canvas export |
Canvas 내보내기 |
Canvas 컴포넌트
텍스트 컴포넌트
canvas.text({
content: "Hello, World!",
style: {
fontSize: "24px",
color: "#333",
fontWeight: "bold"
}
})
버튼 컴포넌트
canvas.button({
label: "Click Me",
onClick: () => {
console.log("Button clicked!")
},
style: {
background: "#3b82f6",
color: "white"
}
})
리스트 컴포넌트
canvas.list({
items: ["Item 1", "Item 2", "Item 3"],
onSelect: (item) => {
console.log(`Selected: ${item}`)
}
})
차트 컴포넌트
canvas.chart({
type: "bar",
data: {
labels: ["Jan", "Feb", "Mar"],
datasets: [{
label: "Revenue",
data: [100, 200, 150]
}]
}
})
폼 컴포넌트
canvas.form({
fields: [
{ name: "username", type: "text", label: "Username" },
{ name: "email", type: "email", label: "Email" },
{ name: "submit", type: "submit", label: "Submit" }
],
onSubmit: (data) => {
console.log("Form submitted:", data)
}
})
실전 예시
예시 1: 데이터 대시보드
// Agent가 생성한 Canvas 코드
canvas.render(`
<Dashboard>
<Header title="Sales Dashboard" />
<Row>
<Card title="Total Revenue" value="$125,430" trend="+12%" />
<Card title="Active Users" value="3,245" trend="+5%" />
<Card title="Conversion Rate" value="4.2%" trend="-1%" />
</Row>
<Row>
<Chart type="line" data={revenueData} title="Revenue Trend" />
<Chart type="bar" data={usersData} title="User Growth" />
</Row>
</Dashboard>
`)
예시 2: 인터랙티브 계산기
canvas.render(`
<Calculator>
<Display value={display} />
<Keypad>
<Button onClick={() => input('7')}>7</Button>
<Button onClick={() => input('8')}>8</Button>
<Button onClick={() => input('9')}>9</Button>
<Button onClick={() => input('/')}>/</Button>
// ... more buttons
</Keypad>
</Calculator>
`)
const state = { display: '0' }
function input(value) {
state.display = calculate(state.display, value)
canvas.update()
}
예시 3: 실시간 모니터링
canvas.render(`
<Monitor>
<Header title="System Monitor" />
<Metrics>
<Metric
label="CPU Usage"
value={cpuUsage}
threshold={80}
unit="%"
/>
<Metric
label="Memory"
value={memoryUsed}
threshold={90}
unit="GB"
/>
<Metric
label="Disk I/O"
value={diskIO}
unit="MB/s"
/>
</Metrics>
<Chart type="line" data={historyData} realtime />
</Monitor>
`)
// 주기적 데이터 업데이트
setInterval(() => {
cpuUsage = getCpuUsage()
memoryUsed = getMemoryUsed()
diskIO = getDiskIO()
canvas.update()
}, 1000)
Canvas API
canvas.render(template)
Canvas 내용 렌더링.
canvas.render(`
<Container>
<Text>Hello</Text>
</Container>
`)
canvas.update()
Canvas 상태 업데이트.
state.count++
canvas.update()
canvas.clear()
Canvas 비우기.
canvas.clear()
canvas.snapshot()
Canvas 스냅샷 가져오기.
const image = await canvas.snapshot()
canvas.eval(code)
Canvas 컨텍스트에서 코드 실행.
await canvas.eval(`
document.getElementById('counter').innerText = '${count}'
`)
A2UI 컴포넌트 라이브러리
Canvas는 A2UI(Agent-to-UI) 컴포넌트 라이브러리를 사용합니다:
레이아웃 컴포넌트
| 컴포넌트 | 설명 |
|---|---|
<Container> |
컨테이너 |
<Row> |
가로 레이아웃 |
<Column> |
세로 레이아웃 |
<Grid> |
그리드 레이아웃 |
<Card> |
카드 컨테이너 |
데이터 표시
| 컴포넌트 | 설명 |
|---|---|
<Text> |
텍스트 |
<Heading> |
제목 |
<List> |
목록 |
<Table> |
테이블 |
<Chart> |
차트 |
인터랙티브 컴포넌트
| 컴포넌트 | 설명 |
|---|---|
<Button> |
버튼 |
<Input> |
입력란 |
<Select> |
드롭다운 선택 |
<Checkbox> |
체크박스 |
<Form> |
폼 |
Canvas와 Agent 협업
Agent가 Canvas 생성
사용자: 프로젝트 진행 상황 추적 패널 만들어줘
Agent: 프로젝트 진행 상황 추적 Canvas를 만들어 드리겠습니다...
Agent는 다음을 수행합니다:
- 요구사항 분석
- 레이아웃 설계
- Canvas 코드 생성
- 인터페이스 렌더링
Canvas가 Agent 트리거
사용자가 Canvas와 상호작용할 때 Agent 작업을 트리거할 수 있습니다:
canvas.button({
label: "Generate Report",
onClick: async () => {
await agent.send("월간 보고서 생성해줘")
}
})
다양한 기기에서 Canvas 사용
macOS
Canvas는 독립 창으로 표시됩니다:
openclaw canvas show
iOS
Canvas는 iOS Node 앱에 통합됩니다:
- OpenClaw iOS 앱 열기
- Canvas 탭으로 전환
Android
Canvas는 Android Node 앱에 통합됩니다:
- OpenClaw Android 앱 열기
- Canvas 탭으로 전환
Web
Canvas는 Web UI에 표시됩니다:
- http://localhost:18789 열기
- Canvas 탭 클릭
Canvas 설정
{
"canvas": {
"enabled": true,
"theme": "dark",
"autoUpdate": true,
"updateInterval": 1000,
"maxComponents": 100,
"persistState": true
}
}
| 설정 항목 | 설명 | 기본값 |
|---|---|---|
enabled |
Canvas 활성화 | true |
theme |
테마 | dark |
autoUpdate |
자동 상태 업데이트 | true |
updateInterval |
업데이트 간격(밀리초) | 1000 |
maxComponents |
최대 컴포넌트 수 | 100 |
persistState |
상태 유지 | true |
요약
Web Control UI와 Canvas로 OpenClaw는 단순 채팅 어시스턴트를 넘어 완전한 인터랙션 플랫폼이 됩니다:
- Web UI: 브라우저 제어 패널로 모든 것을 관리
- Canvas: Agent 기반 시각화 작업 공간
- A2UI: 풍부한 컴포넌트 라이브러리로 빠른 UI 구성
- 크로스 디바이스: macOS, iOS, Android, Web에서 동일한 경험
이 기능들로 Agent가 대시보드, 관리 인터페이스, 인터랙티브 도구를 만들 수 있어 AI 어시스턴트 활용 범위가 크게 넓어집니다.
본문 요약:
- Web Control UI 기능과 사용법 습득
- Canvas 기본 개념과 컴포넌트 학습
- A2UI 컴포넌트 라이브러리 이해
- Canvas와 Agent 협업 방식 학습
- 다기기 Canvas 사용법 습득
업데이트 기록:
- 2026-02-26: 초판 발행, OpenClaw v2026.2 기반
시리즈 네비게이션:
- ← 이전: Agent 페르소나 커스터마이징
- → 다음: 다중 Agent 라우팅과 세션 격리