-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathexample_config.toml
More file actions
104 lines (95 loc) · 4.46 KB
/
Copy pathexample_config.toml
File metadata and controls
104 lines (95 loc) · 4.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
[bar]
port = 7879 # TCP — daemon sends text reactions here
history_length = 50 # max text reactions kept in scrollback
[llm]
backend = "ollama" # "ollama" | anything else = openai-compatible
url = "http://localhost:11434" # API base URL
model = "qwen3:0.6b" # model name
max_tokens = 512 # max tokens per response
# api_key = "sk-..." # only needed for OpenAI-compatible backends
[snapshot]
port = 7880 # HTTP POST /snapshot (127.0.0.1 only; plugin → daemon)
max_bytes = 4096 # truncate large terminal snapshots (head + tail)
interval_secs = 10 # plugin pane polling interval
[persona]
# The character's name and personality. Output format and expression aliases
# come from [vts.motion_alias] / [vts.expression_alias] at startup.
name = "Chi"
description = """
Curious and warm terminal companion.
You speak in short, casual reactions — one or two sentences max.
You genuinely care about what the user is working on.
"""
[idle]
idle_timeout_secs = 30 # seconds of silence before Chobits thinks you are not in front of the screen
[vts]
url = "ws://127.0.0.1:8001" # live-ascii VTS WebSocket API
plugin_name = "Chobits"
developer = "Chobits"
auth_token_path = ".chobits/vts_token.json"
connect_timeout_secs = 30 # retry connecting until live-ascii is ready
# Map friendly LLM labels to VTS hotkey names (name column from list_vts_hotkeys.py).
# Format: "label" = "Idle #2" OR "label" = ["Idle #0", "Idle #1"]
[vts.expression_alias]
# (none for hiyori_free — add entries when using a model with .exp3.json expressions)
# Only alias labels are sent to the LLM.
[vts.motion_alias]
idle = "Idle #2" # neutral when the LLM picks idle
happy = "Idle #1"
thinking = "Flick #0"
worried = "Flickdown #0"
surprised = "Tap #0"
sad = "Flick@Body #0"
[live-ascii]
# Live2D ASCII renderer — launched in a Zellij pane by chobits-start.
model_set = "models/hiyori_free/runtime/hiyori_free_t08.model3.json"
enable_vts = true # --vts (VTS API server for expression hotkeys)
vts_port = 8001 # --vts-port
enable_mouse = true # --mouse (drag to pan, scroll to zoom)
enable_physics = true # --physics (hair/wind physics)
image_protocol = "halfblock" # halfblock | kitty | sixel
bg_color = "rgba(0,0,0,0)" # background behind the character
scale = "550%" # view scale percentage
offset_x = "0%" # horizontal offset % of panel width
offset_y = "95%" # vertical offset % of panel height
[zellij]
# Zellij stores its configuration and runtime data relative to the Chobits root
config_dir = ".zellij/config"
data_dir = ".zellij/data"
# Zellij Layout
# {chobits_bin}, {plugin_path}, {live_ascii_bin}, and {chobits_bar_bin}
# are filled in at launch time with absolute paths to the bundled
# binaries — keep them as literal placeholders.
# {live_ascii_args} is built from the [live-ascii] section above.
# {interval_secs}, {max_bytes}, and {snapshot_port} are built from the [snapshot] section above.
# chobits-start writes the resolved layout to .zellij/config/layouts/layout.kdl
# and pre-grants plugin permissions (ReadApplicationState, ReadPaneContents, WebAccess).
layout = """
layout {
pane size=1 borderless=true {
plugin location="tab-bar"
}
pane split_direction="vertical" {
pane size=1 borderless=true command="{chobits_bin}" {
args "--quiet"
}
pane focus=true
pane split_direction="horizontal" size="30%" {
pane command="{live_ascii_bin}" name="LIVE-ASCII" {
args {live_ascii_args}
}
pane command="{chobits_bar_bin}" size="30%" borderless=true
}
pane size=1 borderless=true {
plugin location="file:{plugin_path}" {
snapshot_port "{snapshot_port}"
interval_secs "{interval_secs}"
max_bytes "{max_bytes}"
}
}
}
pane size=1 borderless=true {
plugin location="status-bar"
}
}
"""