oh-my-secretary
v0.2.6
Published
Local-first secretary harness for Claude Code
Maintainers
Readme

Oh-My-Secretary
Make Claude your own Jarvis.
Oh-My-Secretary is a multi-agent harness for running Claude Code as a 24/7 personal secretary. OMS uses the secretary as the front door, then routes bounded work to specialists such as researcher, writer, librarian, and scheduler.
The goal is not to build yet another perfect coding harness. Plenty of people are already doing that well. OMS wraps the already powerful Claude Code runtime around daily requests, source organization, writing, recurring work, a personal wiki, and quiet long-running operation.
Configure it once, keep the background gateway running, and talk to your secretary from Telegram or another configured channel.
"I built this after wiring GPT into OpenClaw and Hermes Agent, then deciding I had seen enough 'if you want...' footnotes for one lifetime."
Quick Start
1. Install
npm install -g oh-my-secretary2. Run The Wizard
oms setup --wizardThe wizard configures your name, channel, dedicated OMS Claude home, wiki vault, schedules, and search mode. When a channel is configured, it also registers the launchd daemon so the first run needs fewer follow-up commands.
The wizard lets you choose between two search modes:
- Token Saver Mode (default): BM25 local wiki search with no extra LLM API key required.
- Graphify Semantic Mode (optional): Builds a relationship graph for wiki notes and improves search with semantic boost. Requires
ANTHROPIC_API_KEYorMOONSHOT_API_KEY. The Graphify README describes the Karpathy-style/rawcomparison as “71.5x fewer tokens per query vs reading the raw files.” The first build spends tokens; later queries reuse the compact graph.
3. Check Health
oms doctorChecks configuration, daemon, wiki, Graphify, and schedule status.
4. Start The Secretary
oms startThen send requests through Telegram or another configured channel.
For 24/7 secretary use, the channel daemon starts Claude Code with --dangerously-skip-permissions and OMS enables Claude Code's user-level skipDangerousModePermissionPrompt setting so Telegram/Discord replies are not blocked by dangerous-mode confirmation prompts. Use OMS channels only on trusted personal machines and with allowlisted users/channels, because this mode is intentionally unattended.
Claude Code may still require one-time interactive workspace trust approval for the folder where oms start runs. If the channel shows Accessing workspace and does not answer, SSH into the machine and run cd <trusted-workspace> && claude --dangerously-skip-permissions, choose Yes, I trust this folder, then run oms restart.
Enable schedules when you want recurring work:
oms start --schedulesDaily conversation digest and update checks run through launchd schedules.
Why Oh-My-Secretary?
Most agent harnesses focus on coding. They are great for repository analysis and build/test/fix loops, but a personal secretary needs a different feel.
- You should be able to talk from everyday channels, not only coding sessions.
- It should remember tone, preferences, names, and repeated context.
- Sources and conversations should become searchable wiki material.
- Responses should be short enough to use, not padded with explanations.
General chat UIs and ChatGPT-style model usage can become verbose. OMS tunes the secretary prompt and routing rules toward “say only what is needed, do the work in the background.”
Hermes Agent with GPT is broad and powerful, but it can still feel like operating a general autonomous agent with a verbose model attached. OMS keeps Claude Code as the runtime and focuses on short secretary replies, writer/librarian/scheduler routing, macOS launchd, Obsidian wiki, and Hindsight memory.
OpenClaw is stronger as a broad agent platform with many channels and skills. OMS is narrower: Claude Code, macOS launchd, Obsidian wiki, Hindsight memory, and personal secretary tone.
Features
| Area | Feature |
|---|---|
| Multi-agent routing | The secretary receives requests and routes to researcher, writer, librarian, or scheduler. |
| Channel gateway | Talk to a Claude Code-backed secretary from Telegram or another configured channel. |
| Local-first runtime | Secrets, logs, state, schedules, and raw data live under ~/.oms. |
| Hindsight memory | Recall preferences, names, and repeated context. |
| SOUL.md persona | Tune tone and response style in ~/.oms/SOUL.md. |
| OMS wiki | Keep source, decision, and concept notes in an Obsidian/Markdown vault. |
| Source-backed ingest | Store URL, Markdown, and PDF sources with raw pointers. |
| PDF extraction | Keep PDF binaries separate from searchable extracted text. |
| Token Saver Mode | Default BM25 wiki search - no extra API key required. |
| Graphify Semantic Mode | Optional: build a wiki relationship graph for semantic boost. Requires LLM API key. |
| Conversation reuse | Use digest and triage to find “what we discussed last time.” |
| launchd schedules | Run daily digest and update checks. |
| Doctor/update | Check health and updates with oms doctor and oms update. |
Daily Use
The normal workflow is simple: keep the daemon running and send requests through your channel.
- Summarize links/PDFs and save them to the wiki
- Find past conversations, decisions, and sources
- Write and rewrite in your own tone
- Run daily digest and update checks
- Check health with
oms doctor - Search directly with
oms wiki query "..." - Clean raw conversation files with
oms conversation prune
Common Commands
oms setup --wizard # interactive setup
oms start # start the channel gateway daemon
oms start --schedules # also register recurring schedule jobs
oms restart --daemon # refresh managed guidance, then restart the daemon
oms doctor # check installation health
oms ask "..." # local secretary request
oms wiki add <path|url> # add source material to raw/wiki storage
oms wiki query "..." # BM25-first wiki search, graph-boosted when available
oms wiki query "..." --context # Token Saver compact context
oms wiki query "..." --context --profile compact # compact profile (~5k tokens)
oms wiki query "..." --context --json # JSON output with token_saver_context
oms wiki lint # check wiki hygiene
oms wiki graph setup --install --build --yes --consent-privacy
oms wiki graph export --dry-run
oms wiki graph export --apply --consent-privacy
oms wiki graph build
oms wiki graph query "..."
oms conversation digest # digest/triage raw conversations
oms conversation prune # cleanup preview
oms conversation prune --apply # delete cleanup candidates
oms schedule list # show registered schedules
oms update --check # check for a newer release
oms update # update OMS using the safe path for this install typeFor npm installs, oms update runs the global npm update for you:
oms update
oms doctorRecommended Layout
~/.oms/
config/ # user configuration
.secrets/ # channel tokens and credentials
schedules/ # launchd schedule definitions
logs/ # daemon/runtime logs
state/ # runtime state
notes/ # local notes
raw/ # raw source material and conversation JSONL outside the vault
graphify/ # Graphify staging, graphify-out, build metadata
SOUL.md # preferred address, tone, preferences, persona
~/Documents/Sync-for-Mac/_oms-wiki/
source-cards/ # source summaries and pointers
concepts/ # concept notes
decisions/ # decisions
queries/ # reusable query outputsKeep human-readable notes in the vault. Keep heavy PDFs, web dumps, long transcripts, and conversation JSONL in ~/.oms/raw.
Requirements
- macOS for launchd-based daemon and schedules
- Node.js 20 or newer
- Claude Code installed and usable locally
- npm for the public package install
- Telegram bot credentials if you use Telegram
- Optional: Obsidian vault, obsidian-cli, Graphify, pymupdf4llm for PDF text extraction
Safety And Privacy
oms setupregenerates managed guidance and agent prompts.oms startruns the saved channel configuration.oms doctorchecks required assets and optional integrations.- Secrets live in
~/.oms/.secrets/and are referenced with@file:config values. - Runtime artifacts, logs, raw data, and local state stay separate from source code.
- Graphify may use your configured assistant/model provider for semantic extraction, so setup/build requires privacy consent.
- Sensitive notes are excluded from staging by default unless explicitly included.
License
MIT. See NOTICE for attribution.
