
<em>a small, self-hosted AI companion
who sits at the edge of your screen and quietly tends
the things you almost forgot</em>
<img src="https://img.shields.io/badge/version-0.2.0-blue" alt="Version">
<img src="https://img.shields.io/badge/status-alpha-orange" alt="Status: alpha">
<img src="https://img.shields.io/badge/python-≥3.11-blue" alt="Python">
<img src="https://img.shields.io/badge/license-MIT-green" alt="License">
<strong>Syll is a self-hosted companion runtime with a web UI, chat channels, proactive rituals, editable markdown skills, recorded workflows, and a desktop ghost.</strong>
<a href="https://thu-sage.github.io/syll/"><strong>Project page →</strong></a>
·
<a href="#quick-start">Quick start</a>
·
<a href="#demo-workbench">Demos</a>
·
<a href="https://github.com/THU-SAGE/syll/raw/v0.2.0/docs/lore.md">The Full Story · 故事</a>
·
<a href="https://thu-sage.github.io/syll/research.html">Research</a>
·
<a href="https://github.com/THU-SAGE/syll/raw/v0.2.0/docs/report/syll-report-v1.pdf">Paper</a>
mcp__server__tool tools before the first message./api/v1/config.uvx blender-mcp, and Godot pins GoPeak MCP for reproducible local game-scene automation.app.js surprises after the next restart.Syll works with any Python 3.11+ environment. Pick either main path, then run the shared install steps.
conda create -n syll python=3.11 -y
conda activate syll
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
python -m pip install -U pip
python -m pip install syll
syll onboard
syll wake
Open http://localhost:18790, click the Pet tab, give your ghost a name (or keep Syll), and start a conversation.
[!NOTE] The package, CLI, and import path are all
syll. Syll is the default persona inside the companion you just installed; rename her to anything via the Pet tab at any time without touching code.
uv fast path
uv venv
source .venv/bin/activate
uv pip install syll
syll onboard
syll wake
Set your LLM credentials in ~/.syll/config.json, or finish setup from the web UI after syll wake:
{
"models": {
"chat": {
"model": "openrouter/openai/gpt-4o-mini",
"api_key": "YOUR_API_KEY"
}
}
}
Get keys: OpenRouter · OpenAI · Anthropic. Local models via vLLM / Ollama are also supported — see docs/references/local-models.md.
syll onboard says "Config already exists" — answer N unless you intentionally want to replace your current ~/.syll/config.json and workspace.syll runs from the wrong environment — prefer python -m pip install syll, then check which python, python -m pip -V, and which syll point at the same environment.SYLL__* env vars are not picked up — use the SYLL__SECTION__FIELD=value shape, export the variable in your shell, and restart Syll.Click any card to watch the short MP4.
She finds files you can't find. Ask her from your phone to grab the weekly report from your desktop. She walks your filesystem, renders thumbnails, shows you the candidates, and hands you the one you pick.
She keeps soft watch over unfinished things. The draft you open and close without writing anything. The photo folder from three years ago. She notices. She doesn't nag.
She reaches out sometimes. Morning light, evening winding down, a Tuesday afternoon when a memory drifts back. Not every time. Only when it would feel real. You control the cadence.
She can live on your phone instead of your desk. Pair her with Feishu, Telegram, Discord, or WhatsApp and she'll come with you.
She teaches herself new tricks.
Give her a markdown skill (SKILL.md) and she loads it when the moment calls for it. Capture a GUI workflow once in the Demo tab, clean it up, and she can replay or schedule it later.
She comes with a visual workbench, not just a terminal. Models, channels, schedule rules, identity, skills, and recorded workflows all have a browser surface now — so ordinary users can configure her without living in a CLI.
She remembers in layers. The Memory tab surfaces long-term notes, today's journal, daily fragments, and an activity heatmap so her recollection feels like a notebook instead of a raw log dump.
She can stay at the edge of your desktop. The optional desktop ghost mirrors her state, reacts to wake/sleep transitions, and gives the companion a physical place to live between chats.
| If you want… | Go here |
|---|---|
| For a softer intro | The project page → |
| To read the code or contribute | This repo (syll/ directory) |
| To cite the design or understand the architecture | The research page → |
| Channel | Status | Setup difficulty |
|---|---|---|
| Web UI | ✓ | none — just syll wake |
| CLI | ✓ | none — syll agent -m "hi" |
| Telegram | ✓ | easy — one bot token |
| Feishu | ✓ | medium — app_id + app_secret, supports file send |
| Discord | ✓ | easy — bot token + intents |
| ✓ | medium — QR scan (text only) |
Telegram setup
@BotFather, send /newbot, follow prompts, copy the token.~/.syll/config.json:{
"channels": {
"telegram": {
"enabled": true,
"token": "YOUR_BOT_TOKEN",
"allow_from": ["YOUR_USER_ID"]
}
}
}
syll wake.Feishu setup
im:message, im:message.p2p_msg, and im:resource permissions.~/.syll/config.json:{
"channels": {
"feishu": {
"enabled": true,
"app_id": "cli_xxx",
"app_secret": "xxx"
}
}
}
syll wake. No public IP needed — WebSocket long-connection handles inbound events.Discord / WhatsApp setup
See docs/references/channels.md for full setup steps.
Let Syll reach out to you on her own schedule. Pet tab → set a Chat ID for your primary channel → Save → click Install default rituals. Four jobs land in the scheduler:
ritual:morning-light — 9am daily, one soft greetingritual:evening-wind-down — 10pm daily, a small closing thoughtritual:surfacing-memory — Tue/Fri 3pm, maybe a drifting memoryritual:week-close — Sunday 9pm, a week markerSilence is always a valid response. She only speaks when it would feel real.
Full details: syll/templates/workspace/lore/rituals.md.
The same scheduler can also run GUI skills and recorded workflows from the web UI — useful for recurring check-ins, daily collection jobs, or replaying a polished browser routine on a timer.
Skills are markdown files that teach Syll how to do a specific thing. Built-in skills live in syll/skills/; custom skills go in ~/.syll/workspace/skills/{name}/SKILL.md.
A skill can be:
always: true in metadata, inlined into every system promptBundled skills: file-retrieval (find → preview → attach), github, weather, tmux, cron, summarize, skill-creator, gui-agent.
Write your own: syll/skills/skill-creator/SKILL.md.
Recorded workflows are the sister surface to markdown skills: capture a task once, inspect the video + trajectory, edit coordinates / timestamps / notes in the Demo tab, then publish it into the reusable library for replay or scheduling.
Open the Demo tab to move from one-off capture to reusable automation:
This is the layer that turns a personal "watch me do it once" demo into something Syll can execute again on demand.
Append ?cinema to the project page URL for recording-friendly playback.
The public demo set lives under docs/media/demo/, so the same web-ready files back both GitHub Pages and the README.