@dandaka/docs
BGive your AI agent memory across all your communications.
Install
agr install @dandaka/docs --target claudeWrites 11 files into .claude/skills/, pinned to git-1b5f2b36.
- .claude/skills/docs/architecture.md
- .claude/skills/docs/cli-messages-command.md
- .claude/skills/docs/embedding-models-comparison.md
- .claude/skills/docs/getting-started.md
- .claude/skills/docs/landscape.md
- .claude/skills/docs/research-openclaw-ecosystem.md
- .claude/skills/docs/research-snowflake-arctic-embed2-perf.md
- .claude/skills/docs/research.md
- .claude/skills/docs/skill.md
- .claude/skills/docs/strategy.md
- .claude/skills/docs/vector-embedding-use-cases.md
Document
../skill.md
Repository README
Describes dandaka/traul as a whole, which may contain artifacts other than this one. Where this artifact had no useful description of its own, its summary was taken from here.
traul
Give your AI agent memory across all your communications.
Why
I was constantly asking my agent to pull context from various sources. Slack, Telegram, Gmail, Discord, Linear — the usual mess. But every time it had to request items one by one, from different APIs, building up context piece by piece. It could never see the full picture.
So I built Traul. A searchable, local-only database that indexes all my communications. Full-text search, vector embeddings, semantic search — the whole thing runs locally. No data leaves your machine. I expose it as a tool to my agent, and instead of me copy-pasting context into chat, the agent searches for it on its own.
What you can actually do with this
Track a project across scattered conversations. Say you have an integration and a marketing program being discussed in Slack, Telegram, and five different group chats. Agent sees through all of them. Who's blocking, whose court the ball is in, what the next steps are.
Monitor your community. I asked my agent to look at our Discord community and summarize what users are writing. Got a solid analysis in minutes — main topics this week, overall sentiment, what people are unhappy about. Then separately asked for a list of feature requests. Then separately — how attitude toward the product is changing over time. All of this took a few minutes.
Monitor competitors too. Hook up competitor Discord servers and track what their users are asking for, what they're discussing, what's broken.
Find that one message you vaguely remember. Recently in a discussion about Claude Code pricing, I remembered a friend sent me a link about it. Asked the agent to search my chat history — found the exact Telegram message. Vector search works way better than keyword search for this kind of thing.
Prep for a call in seconds. Before a recruiter call, I asked the agent to find info about this person. Found them in my email. I don't need to remember where exactly I communicated with someone — agent finds it.
Stop being the search engine yourself. The whole problem of "was it in Slack, Telegram, or the task tracker?" goes away. Agent tries different keywords, reads intermediate chunks, follows the chain, arrives at the result.
Privacy
All data stays on your machine. No APIs, no external services, no cloud sync. Traul indexes and stores everything in a local SQLite database. Nothing is sent to third parties.
Connectors
Slack · Discord · Telegram · Gmail · Linear · WhatsApp · Claude Code sessions · Markdown files
How it works
Sources → sync → local SQLite (FTS5 + vector embeddings via Ollama) → search → your agent or CLI.
Quick start
git clone <repo-url> && cd traul
bun install
bun link
Requirements: Bun v1.0+, SQLite with development headers, optionally Ollama for vector search.
SQLite setup by platform:
- macOS:
brew install sqlite - Ubuntu/Debian:
sudo apt-get install libsqlite3-dev - Fedora/RHEL:
sudo dnf install sqlite-devel
The sqlite-vec extension is bundled and works on macOS (x64/arm64) and Linux (x64/arm64). No extra steps needed.
Full walkthrough → Getting Started
Usage
traul sync # sync all sources
traul sync slack # sync specific source
traul search "deployment issue"
traul search "marketing launch" --source slack --after 2025-01-01
# Keyword-only search (FTS5/BM25, no Ollama needed)
traul search "error" --fts
# OR mode — match ANY term instead of ALL
traul search "deposit withdraw broken" --fts --or
# Substring search — bypasses FTS tokenization, useful for exact phrases
traul search "how do I" --like -s discord -l 20
# Get a full thread/conversation (search results show thread IDs)
traul get <thread-id>
traul get --date 2026-03-10
traul get <thread-id> --json
# JSON output (available on search, messages, channels, stats)
traul search "error" --fts --json
# Generate embeddings for vector search
traul embed
traul embed --rechunk # re-chunk long messages embedded before chunking
traul reset-embed # drop all embeddings and recreate
# Browse channels and messages
traul channels
traul channels --search general --json
traul messages general --limit 50
traul stats # database statistics
traul daemon start --detach # background sync
Configuration
Config at ~/.config/traul/config.json. Tokens via environment variables:
| Variable | What |
|---|---|
SLACK_TOKEN | Slack token (xoxb/xoxc) |
DISCORD_TOKEN | Discord bot token |
TELEGRAM_API_ID / TELEGRAM_API_HASH | Telegram API |
GMAIL_CLIENT_ID / GMAIL_CLIENT_SECRET | Gmail OAuth2 |
LINEAR_API_KEY | Linear API key |
Per-workspace tokens: SLACK_TOKEN_<WORKSPACE>, LINEAR_API_KEY_<WORKSPACE>.
Details → Getting Started
Development
bun test
bun run dev
Contributing
See CONTRIBUTING.md. All contributions require a DCO sign-off.
License
GNU Affero General Public License v3.0 — use, modify, distribute freely. Network service deployments must release source code.
Trustgrade B
- passBody integrity
Whether the stored document is plausibly the kind of file the artifact declares, rather than something fetched by mistake.
- passType matchnot applicable to this artifact type
Whether the artifact is really the kind of thing its metadata claims it is.
- passFreshness
How long since the source repository was last pushed to.
- passPrompt injection
Scans the artifact's own text for instructions aimed at your agent rather than at you.
- warnLicensecopyleft/unknown — index-and-link only
Whether the source repository declares an SPDX license permissive enough to redistribute.
How the grade is calculated
Each check contributes 0 points when it passes, 1 when it warns, and 2 when it fails. The total maps to a letter:
- Aevery check passed
- Bone warning
- Ctwo warnings
- Dprompt injection or body integrity failed, or three warnings
- Fone of those failed, and something else is wrong
These are automated hygiene checks, not a security audit, and not a dependency or vulnerability scan. A grade of A means nothing was flagged — not that the artifact is safe.
Versions
git-1b5f2b3618392026-07-30