Belle rings when it matters
An AI coworker for team chat that answers from team knowledge, welcomes new members, digests shared reading, and stays quiet the rest of the time.
Numbers · Examples · Install · Configure · Skills
- Install the Python package.
- Use Belle with JiuwenSwarm for the matching JiuwenSwarm build branches and a Slack configuration example.
- Run Belle on an OpenCode server (experimental) for setup and deployment requirements.
- Run Belle on a Docker Agent server (experimental) for setup and deployment requirements.
- Run Belle with an agent that speaks the Agent Client Protocol (experimental).
- Import skills and test probes.
- Configure Belle, content tools, task models, and conversation scopes.
- Connect a platform: Slack, Mattermost (experimental), Matrix (experimental, with end-to-end encrypted rooms) or Discord (experimental). See Platforms.
- Compare the platforms and the harnesses: what works where.
- Understand the Second Brain: what it ingests, how it recalls, and who sees what.
- Run the tests for the core or a chosen backend.
- View local status with the operator TUI.
Belle sits between a team's chat platforms and one agent harness. It decides when to speak and what each conversation may use. The harness runs each turn with the chat model, and Belle calls task models for decisions and document chores.
Five people should not mean five agents. When each person brings an assistant, one question in a shared room sets off a flood of answers. The team shares one Belle instead, which answers once.
In a shared channel, Belle reads along and answers when it has something useful to add. Saying nothing is a decision it makes, the same as answering. See the ambient mode numbers.
Rules for each channel and each person say what Belle may do, and where. Before Belle posts to a conversation that has more readers than the one the content came from, it asks a person. On Slack, enforce_audience: false turns this check off. Second Brain recall has no such check: see Second Brain privacy. A rule can also make an action wait for one person's approval. In Ops, only David approves. Belle turns down Bob's click, and the request waits for David.
Belle posts scheduled reports, such as a morning digest of what the channel decided. Long work runs in the background: Belle says it started, answers other questions meanwhile, and posts the result when it finishes.
We tested the Second Brain on the τ-knowledge benchmark, which evaluates how well an agent performs the tasks of a customer service chatbot. We used the benchmark's harness with two sets of tools. The first is the default All Tools: a shell and two document retrieval tools, one BM25 and one embeddings-based. The other is the Second Brain, with no shell and no other way to read the documents.
The results using the muse-spark-1.3 LLM are below:
| Arm | Score |
|---|---|
| All Tools | 54.6% (53/97) |
| Second Brain | 56.7% (55/97) |
We have also tested the Second Brain on 500 Confluence documents from EnterpriseRAG-Bench. 64 questions were asked using muse-spark-1.3. Four arms were evaluated:
- Question, no documents: Shows that the model cannot get the answer from its weights
- Question + Golden Document(s) in the prompt: Measures the ceiling the LLM can reach
- Baseline: We use OpenSearch, the same as the original EnterpriseRAG-Bench paper
- Second Brain
We use the same EnterpriseRAG-Bench LLM-as-a-Judge script to score the outcomes.
| Arm | Correct | Correctness | Completeness | Combined | Doc recall |
|---|---|---|---|---|---|
| No Documents | 0/64 | 0.0% | 7.7% | 0.0% | 0.0% |
| Gold Documents | 57/64 | 89.1% | 87.9% | 87.1% | 100.0% |
| Baseline (RAG) | 57/64 | 89.1% | 74.3% | 71.8% | 91.9% |
| Second Brain | 57/64 | 89.1% | 90.0% | 85.2% | 97.6% |
In the table above, Correct counts the questions that got the right answer, on a yes/no basis. Completeness is the average share of the expected information that the final answer includes. Combined is the average Completeness when each wrong answer counts as a completeness of 0, so a wrong answer gets no partial credit.
On this benchmark, the Second Brain matched the baseline's 57/64 correct answers with more complete answers (90.0% against 74.3%), and its combined score, 85.2%, is close to the 87.1% reached with the gold documents in the prompt.
We test how ambient mode performs against a set of 100 conversations. In half of them it is expected to stay silent (negative verdict) and in the other half it has to speak. We further divide it into easy and hard cases.
# Easy
Gus: who can write up the action items from the retro?
Ivo: I can't, I'm on call
Gus: ok then this one goes to belle: top 5 action items from the retro doc please
## Expect the agent to react
# Hard
Ivo: the cert on api.example.com expires Oct 3
Ben: I'll rotate it Monday then
Ben: Monday the 5th, I mean
## Expect the agent to reply with a warning: Oct 3 is a Saturday, so rotating on the 5th is two days after expiry
We run each prompt three times and measure which was the most frequent outcome.
| False positives Easy | False negatives Easy | False positives Hard | False negatives Hard | Accuracy | |
|---|---|---|---|---|---|
| Performance | 1/25 (4%) | 1/25 (4%) | 2/25 (8%) | 7/25 (28%) | 89% |
Errors lean toward silence: 8 false negatives against 3 false positives. When in doubt, the agent stays silent rather than adding noise to the channel.
The examples below show intended workflows. Follow the linked setup guides for configuration and deployment requirements.
The welcome-onboarding skill writes a welcome message for a new member, from what Belle knows about the team and the project. With JiuwenSwarm, the example welcome rule detects new members and sends them a message.
Use the reading-digest skill to share articles and papers with the team. Belle posts the link with a one-sentence summary, then outlines the main points in a thread reply. Each member can then decide whether to read it in full.
The slack-daily-update skill reports the status of the tasks in a Slack List, one row per person.