Skip to main content

Bobo — a personal AI agent for your terminal, Obsidian, and email

Project description

Bobo Agent

截屏2026-06-05 22 58 35

A personal AI agent that lives across your knowledge
Obsidian · Notion · Email · GitHub · Any API

MIT License Python 3.10+ Status: Active


Quick Start

Requirements

  • Python 3.10+
  • Node.js v18+ (runs the TUI)
node --version   # should show v18+
# Install: https://nodejs.org or brew install node

1. Clone

git clone https://github.com/Newton-666/BOBO_Project_Backup.git
cd BOBO_Project_Backup

2. Install Python backend

python3 -m venv .venv          # optional but recommended
source .venv/bin/activate
python3 -m pip install -e .    # -m pip ensures correct Python

3. Run

Option A — from the project folder (most reliable):

./bobo

Option B — from anywhere (after pip install):

bobo

If bobo gives ModuleNotFoundError: No module named 'bobo_tui_gateway', reinstall:

cd /path/to/BOBO_Project_Backup
python3 -m pip install -e . --force-reinstall

4. Configure API key

On first run, the TUI shows a setup screen. Select your provider and paste your API key.

Or configure manually:

mkdir -p ~/.bobo
echo "DEEPSEEK_API_KEY=sk-your-key-here" > ~/.bobo/.env

Get a DeepSeek key: https://platform.deepseek.com/api-keys Set BOBO_PROVIDER=openai to use OpenAI instead

Optional: Connect services

# Obsidian vault
echo "OBSIDIAN_VAULT=/path/to/vault" >> ~/.bobo/.env

# Notion — just say "connect Notion" in chat
# GitHub — just say "connect GitHub" in chat

# Email
cat > ~/.bobo/mail.json << 'EOF'
{"server": "imap.gmail.com", "port": 993,
 "username": "you@gmail.com", "password": "app-password"}
EOF

Uninstall

pip uninstall bobo-agent
rm -rf ~/.bobo ~/.bobo_v2

What Makes Bobo Unique

1. Cross-Platform Knowledge

Bobo is the only agent that searches, reads, writes, and links across multiple platforms simultaneously:

You: "find everything about API redesign"
Bobo: cross_search("API redesign")
  → [Obsidian] Projects/API-redesign.md
  → [Notion] Q1 Planning
  → [Email] "Re: API redesign feedback"
  → "Found 5 items across 3 platforms"
Tool What it does
cross_search(query) Search Obsidian + Notion + email at once
copy_to_obsidian(page_id) Copy a Notion page to Obsidian as markdown
copy_to_notion(filepath) Copy an Obsidian note to Notion
wiki_rebuild() Auto-generate a Knowledge Hub with cross-links

2. Connect Any Service Without Code

Register any REST API in one command — no Python required:

You: "connect my Jira"
Bobo: api_register(
        name="jira", base_url="https://company.atlassian.net/rest/api/3",
        auth_type="bearer", auth_key="xxx",
        endpoints='[{"name":"search","method":"GET","path":"/search?jql={query}"}]'
      )

You: "find my open tickets"
Bobo: api_call(api="jira", endpoint="search", params='{"query":"status=Open"}')

All registered APIs are automatically advertised to the LLM on every call.

3. Autonomous Coding

  • Auto-run: After writing a .py file, Bobo runs it and reports output/errors immediately
  • Error enrichment: Tracebacks become [TypeError] main.py:42 — the LLM sees the problem instantly
  • Auto-diff: Git diff is captured after every file write and injected into the next LLM call
  • Parallel execution: Independent tools run simultaneously, not sequentially
  • GitHub integration: Create repos, push code, open PRs, review diffs

4. Privacy & Security

  • Secret redaction: API keys, tokens, passwords are replaced with [REDACTED] before reaching the LLM
  • Tool gating: Tools with unmet prerequisites are invisible — no Obsidian tools if no vault configured
  • Blocked folders: Private/, Archive/ folders are never read, written, or searched
  • Atomic session writes: tmp → rename → bak — session files never corrupt on crash
  • No telemetry: Zero data leaves your machine except the LLM API calls you configure

5. Memory That Works

Save facts once, Bobo remembers them automatically:

You: "my favorite color is blue"
Bobo: save_memory("my favorite color is blue")

(next session)
You: "what color do I like?"
Bobo: [Memory injected automatically] → "You told me your favorite color is blue!"

No need to ask Bobo to "remember" — relevant memories are injected before every LLM call at ~0ms overhead.

6. Scheduled Tasks

Set recurring tasks with natural language:

You: "rebuild the knowledge hub every morning at 7"
Bobo: bobo_schedule(action="create", name="wiki-daily", 
        task="运行 wiki_rebuild 更新知识图谱",
        time="07:00", repeat="daily")

You: "cancel the morning task"
Bobo: bobo_schedule(action="delete", name="wiki-daily")

Uses cron under the hood. List, create, delete from the chat.


Configuration

Providers

Bobo supports 7 providers out of the box. Set BOBO_PROVIDER in ~/.bobo/.env:

# DeepSeek (default)
BOBO_PROVIDER=deepseek
DEEPSEEK_API_KEY=sk-...

# OpenAI
BOBO_PROVIDER=openai
OPENAI_API_KEY=sk-...

# Local (Ollama)
BOBO_PROVIDER=ollama

Or run /settings in the TUI to see current config, or just tell Bobo "switch to OpenAI."

Obsidian Vault

echo "OBSIDIAN_VAULT=/path/to/your/vault" >> ~/.bobo/.env

17 tools for reading, writing, searching, classifying, and organizing notes.

Notion

You: "connect my Notion"
Bobo: "请提供 Notion API Key"
You: paste the key
Bobo: "Notion 已连接"

Email (IMAP)

Create ~/.bobo/mail.json:

{
  "server": "imap.gmail.com",
  "port": 993,
  "username": "you@gmail.com",
  "password": "your-app-password"
}

GitHub

You: "connect GitHub"
Bobo: "请提供 GitHub Personal Access Token"
You: paste the token
Bobo: "GitHub 已配置"

All Commands

/help      — Show available commands
/settings  — Show current provider, model, and API key status
/tools     — List all available tools
/clear     — Clear the current conversation

Settings can also be changed naturally: "use gpt-4o," "switch to OpenAI."


Tools (68 total)

Category Tools
General cross_search, bobo_config, bobo_schedule, wiki_rebuild, api_register, api_call, get_current_time, save_memory, search_memory, save_skill, project_info, render, notion_setup
Knowledge search_obsidian, read_obsidian, write_obsidian, append_obsidian, notion_search, notion_read_page, notion_create_page, notion_append, search_emails, read_email_content, analyze_emails
Code code_execution, file_writer, execute_terminal, search_code, refactor, git_status, github_create_repo, github_create_pr, github_pr_diff, github_pr_comment, github_check_auth, github_setup
Files read_local_file, list_directory, file_operation, restore_checkpoint
Web web_search, web_fetch, web_extract, browser_open, browser_get_title, open_url
macOS send_notification, read_clipboard, write_clipboard, set_reminder, list_reminders, create_calendar_event, list_calendar_events
Obsidian read_obsidian, write_obsidian, search_obsidian, append_obsidian, classify_note, batch_copy_notes, batch_delete_notes, batch_move_notes, create_folder, delete_folder, delete_note, list_folder, move_note, move_to_folder, rename_note, read_recent
Skills skill_coding_master, skill_Python__ (auto-registered from YAML files)

Example Workflows

# Research → Note → Link
"Research transformer architectures and save to Obsidian"
  → web_search("transformer architectures 2026")
  → write_obsidian("transformers.md", "...")
  → wiki_rebuild()

# Code → Test → Ship
"Create a Python script to sort my Downloads folder, push to GitHub"
  → file_writer("sort_downloads.py", "...")
  → [auto-run] python3 sort_downloads.py
  → github_create_repo("file-sorter")
  → github_create_pr(title="Add file sorter")

# Multi-platform search → Copy
"Find the Q4 planning doc, copy it to Obsidian"
  → cross_search("Q4 planning")
  → notion_read_page("page-id-123")
  → copy_to_obsidian("page-id-123")

# Daily automation
"Rebuild my knowledge hub every morning"
  → wiki_rebuild()
  → bobo_schedule(action="create", name="daily-hub",
      task="运行 wiki_rebuild", time="07:00", repeat="daily")

Troubleshooting

Problem Solution
TUI shows no response Check API key in ~/.bobo/.env. Run /settings.
"Tool name must be unique" Skills with Chinese names get sanitized. Rename skill files.
Obsidian tools missing Set OBSIDIAN_VAULT in .env.
Notion tools missing Run notion_setup with your API key.
GitHub push fails Run gh auth login or github_setup.
Chinese input crashes TUI Compact mode enabled. Use single-line input.
Session can't be deleted Fixed in latest version. Ensure session.delete handler exists.

Architecture

bobo (CLI)
  └── ui-tui/              Hermes TUI frontend (React/Ink/TypeScript)
        └── spawns python -m bobo_tui_gateway.entry
              └── bobo_tui_gateway/    JSON-RPC gateway (stdin/stdout)
                    ├── entry.py       Main loop + signal handling + setup wizard + cron scheduler
                    ├── server.py      30+ RPC method handlers
                    └── transport.py   Thread-safe stdout writer
              └── core/               Agent engine (~340 LOC each)
                    ├── engine.py      Conversation loop, state machine
                    ├── context.py     History compression, query classification
                    ├── tool_runner.py Tool execution, error enrichment, rollback
                    ├── llm_caller.py  API caller with streaming + retry (3 attempts)
                    ├── provider.py    7 built-in providers
                    └── session_manager.py  Atomic session persistence
              └── tools/              68 tools, auto-discovered with gating
                    └── __init__.py    Auto-discovery + skill-as-tool registration
              └── ~/.bobo/             User config directory
                    ├── .env          Provider keys, vault paths
                    ├── apis/         Registered custom APIs
                    └── schedules.json Scheduled tasks

Development

# Set up
git clone <repo>
cd bobo-agent && pip install -e .

# Run tests (no API key needed)
python3 tests/test_mock_engine.py

# Add a tool
# Create tools/my_tool.py with register(reg) function:
def register(reg):
    reg("my_tool", execute_func, schema, check_fn=optional_check)

To gate a tool behind a prerequisite:

_check = lambda: bool(os.environ.get("MY_CONFIG", ""))

def register(reg):
    reg("my_tool", execute_func, schema, check_fn=_check)

Acknowledgements

The TUI frontend (ui-tui/) is based on Hermes Agent by Nous Research (MIT). Hermes Ink is a fork of Ink by Vadim Demedes.

See NOTICE.md for full details.


License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bobo_agent-0.2.0.tar.gz (88.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bobo_agent-0.2.0-py3-none-any.whl (131.6 kB view details)

Uploaded Python 3

File details

Details for the file bobo_agent-0.2.0.tar.gz.

File metadata

  • Download URL: bobo_agent-0.2.0.tar.gz
  • Upload date:
  • Size: 88.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for bobo_agent-0.2.0.tar.gz
Algorithm Hash digest
SHA256 befd5c484028d7bbcf143cb18ac75a3a54fc4a890d98e25a717125c3fabbda41
MD5 351d450f68d0433486130d2d853a3fa2
BLAKE2b-256 3405aa639cc9076f18ed41db019abbaebfb13caee1cdaae5fa3433e0a09248bd

See more details on using hashes here.

File details

Details for the file bobo_agent-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: bobo_agent-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 131.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for bobo_agent-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6143431495c9af87db11dc6edec8429b5ff1570df1fca5c84871a726101ee47a
MD5 7c1190e256d2bffcf350b2ed084b1465
BLAKE2b-256 ebd64023e63fe9e4ba521d9bf578d3fb50f17f22a94e1e4208b6ec9d6fdc2002

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page