Open source · Apache-2.0 Battle-tested in production
Knowledge agent · Lark / Feishu

Your company's knowledge, answering back.

Noto Lark is a self-hosted AI agent that lives in your Lark/Feishu chat. It answers from your own wiki, docs, Drive and chats with citations, retrieves any document on request, reads important details out of emails, sets reminders, and updates your data on its own by the rules you set — and it gets smarter every day from your team's feedback.

View on GitHub → What it does
Learns
from every correction
Cited
answers, every time
Acts
docs · reminders · data
1
self-hosted box
No external services beyond Lark and your LLM · a Mac mini runs it comfortably
N
Noto
knowledge agent · #eng-team
● online
@Noto what's our refund policy for annual plans?
N
Annual plans are refundable pro-rata within 30 days; after that, credit only. Approvals go through Finance.
📄 Billing Policy · §4.2📄 Finance Wiki · Refunds
make a doc summarizing this for the support team
N
Created "Refund Policy — Support Summary" in the Support wiki.
📝 Refund Policy — Support Summary open ↗
Noto is retrieving···
Message Noto…member
DM or @mention in any group — grounded answers with links to the exact source
What it does

One agent, the whole knowledge loop — that teaches itself.

★ Self-learning

It gets better every single day.

Noto learns from your team in the background. Every correction becomes a reviewed lesson, a 👍 saves a good answer as a retrieval hint, and repeated personal fixes become private per-user preferences — with /forget to undo. The agent you deploy this month is sharper next month, on your knowledge, without retraining.

Answer
Feedback
Lesson
Better answer

Grounded Q&A in chat

Plans search queries, retrieves from lexical + vector indexes over your synced corpus, and answers with links to the exact source docs. Injection-hardened: retrieved content is fenced as data.

Retrieves any document

Ask for a policy, a spec, a contract or a Base record and Noto finds and pulls it from your wiki, Drive and docs — no hunting through folders.

Reads your email

Detects the important details in emails and threads — dates, amounts, action items — and turns them into calendar entries, reminders or data updates.

Autonomous data updates

Give it rules once and Noto keeps your Bases current on its own — updating records as things change, so nobody maintains a spreadsheet by hand.

Reminders

Set, list and manage reminders straight from chat. Noto nudges you and the team at the right moment, no separate app.

Doc creation & editing by link

"Make a doc summarizing X", or paste any Lark/wiki doc link and ask for a change. Block-level edits preserve native history — and it can never delete a doc, file or record.

Screenshot → calendar

Send a screenshot of an email or thread with "add to my calendar". It reads the image, asks for anything missing, checks conflicts, and sets the entry with reminders.

¥

Expense logging

DM a receipt or type /expense 42 SGD taxi and it lands a row in your reimbursement Base, pending approval.

An admin panel

Magic-link login from chat, feedback and lesson review queues, usage analytics, system health, and ops buttons — resync, restart, tunnel.

How it's built

A single always-on box. No moving parts to babysit.

Python, SQLite, local vector + full-text indexes — nothing external beyond Lark and your LLM. Every model call goes through one chokepoint, so swapping the engine is a one-function change.

Lark webhookTailscale Funnel · 3s-ack callbacks
lark_botone worker queue · supervisor
noto_agentplanner → answer · create_doc · edit_doc · calendar · clarify
noto_researchquery plan → hybrid retrieval → cited synthesis
Nightly resync: wiki + docs + chats → FTS index + vector embeddings
Safety rails you get for free

Built to be trusted with the whole company's data.

No-delete guarantee

The agent can't delete a doc, file, folder, message or Base record — a startup scan aborts if delete-capable code is ever introduced.

Trust tiers on every message

Admin, member and external tiers gate what each inbound message can do. Non-admins can never trigger writes.

Injection fencing

Retrieved content is fenced as data and inbound messages pass a trust/sanitizer layer before the model ever sees them.

Operator-confirmed edits

Block edits are confirmed by an operator; per-user memory is DM-only and isolated, with tombstones so deleted facts stay deleted.

Won't die silently

A worker supervisor, rate-limit backoff, and push alerts to a chat when background jobs fail keep the bot honest.

Read the source

It's Apache-2.0 and documented down to the Lark Console click-path.

github.com/FluidMind-AI/noto-lark →
Status & lineage

The generalized chassis of an agent that runs a real company, daily.

The private deployment and this open repo share a core — fixes flow here as they're battle-tested there. Issues and PRs welcome.

Star it on GitHub Talk to the lab