Google Drive RAG, Cloud-Synced agent.md Steering, Calendar & Gmail Extensions for AI Agents
Powers autonomous IDE agents (via MCP) and Krusch Companion's <holodata> Agentic Proxy (via REST on :5446).
Most AI agents are trapped either in ephemeral context windows or isolated local folders that you can't easily access when away from your workstation. G-Krusch bridges the gap between humans, coding agents, and personal assistants (krusch-companion) across your Google Workspace:
agent.mdCloud-Synced Steering: Edit your agent rules, project priorities, and personas from your phone, tablet, or web browser directly in Google Drive. When an agent boots, it dynamically pulls the latest instructions viaget_agent_steering(GET /api/steering).- Sovereign 1,024-Dim Vector & FTS5 BM25 Drive RAG: Queries your Google Docs, PDFs, notes, and specs using a 3-tier dense semantic embedding cascade (Tier 1: local GPU Ollama
bge-large:latest1,024-dim -> Tier 2: Geminimodels/gemini-embedding-001atoutputDimensionality: 1024-> Tier 3: uncached deterministic 64-dim offline fallback) fused with SQLite FTS5 Porter-stemmed BM25 keyword search. - 3-Tier Page-Faithful PDF Extraction: Validates
%PDF-magic bytes prior to disk spooling (validatePdfMagicBytes) and extracts multi-page PDFs with page citations ([contract.pdf p.1]) via Tier 1 Krusch-Nexus (pdftotext -bbox-layout), Tier 2 system Popplerpdftotext, or Tier 3 pure-JS stream extraction (extractPdfTextNative). - Two-Way Agent Filesystem + Native Google Docs, Sheets & Slides: Agents can read project briefs from
context/, check decision logs inmemory/, and usewrite_drive_fileto create or update Markdown files, styled Google Docs (.gdoc), Google Sheets (.gsheetfrom CSV or Markdown tables), and 16:9 Google Slides presentations (.slidesfrom----separated Markdown decks) directly inoutput/. - Google Calendar & Gmail Extensions: Exposes hardened REST endpoints (
/api/calendar/events,/api/gmail/messages,/api/gmail/drafts,/api/gmail/send) so Krusch Companion can check your schedule, book appointments, search your inbox, and compose RFC-2822 / RFC-2047 emails.
When G-Krusch connects to your Google Drive, it manages a dedicated workspace folder (defaults to G-Krusch):
Google Drive /
└── G-Krusch/
├── agent.md # Authoritative steering & invariants (edit anywhere)
├── context/ # Domain knowledge, architectural specs, SOPs
├── memory/ # Decisions, invariants, project logs
└── output/ # Agent-generated artifacts, reports, proposals
- AES-256-GCM Encrypted Token Vault (
src/lib/crypto.js&src/lib/db.js): OAuth 2.0 access and refresh tokens are encrypted at rest in SQLite WAL using AES-256-GCM with NIST SP 800-38D 12-byte (96-bit) IVs and 16-byte authentication tags (plus transparent legacy 16-byte IV decryption). - OAuth 2.0 CSRF State & CORS Origin Lockdown (
src/lib/oauth.js&src/lib/auth-guard.js): Generates one-time 32-byte CSRFstatetokens with constant-time validation on/auth/google/callback, and restricts browser CORS requests to trusted localhost, RFC1918 LAN, and Tailscale (100.64.0.0/10) origins. - FIFO Keyed Mutex & Atomic SQLite Transactions (
src/lib/mutex.js&src/lib/rag.js):AsyncKeyedMutexserializes concurrent OAuth token refreshes, workspace provisioning, per-path writes, and RAG indexing, whilesaveIndexedDocumentTransactionalcommits document chunks and FTS5 indices atomically with automatic FTS5 self-healing (ensureFtsSync). - Path Traversal, Drive Query Escaping & Workspace Boundary Guard (
src/lib/path-utils.js&src/lib/drive.js): Blocks.., control characters, and sensitive dotfiles (.env,.git,id_rsa,.pem), escapes backslashes and quotes in Drive API queries, and verifies workspace ancestry before trashing any file byfileId. - CRLF Header Injection Shield & RFC 2047 UTF-8 Encoder (
src/lib/extensions.js): Strips CR/LF and control characters from email headers, validates recipient addresses, and encodes non-ASCII subjects using=?UTF-8?B?...?=. - Constant-Time API Key Guard (
src/lib/auth-guard.js): Usescrypto.timingSafeEqualwhenAPI_KEYorGCRUSH_SECRETis configured to protect workspace and MCP endpoints against timing side-channel attacks, paired with HTML escaping (escapeHtml) on OAuth callback pages.
git clone https://github.com/kruschdev/G-krusch.git
cd G-krusch
npm installCopy .env.example to .env and provide your Google OAuth credentials (GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET) and optional GEMINI_API_KEY:
cp .env.example .env(All 32 unit & hardening tests run hermetically against an isolated per-PID temporary SQLite database with zero external credentials required)
# Run 12-point production diagnostic check (Node 22+, SQLite WAL + busy_timeout, FTS5 sync, 12-byte AES-256-GCM, OAuth, Embeddings, Nexus PDF, MCP, Extensions)
npm run doctor
# Run all 32 unit & hardening tests
npm test# Start directly on http://localhost:5446
npm start
# Or manage via systemd user service on port 5446
systemctl --user status g-krusch.service
systemctl --user restart g-krusch.serviceEndpoints:
- Web Dashboard:
http://localhost:5446 - Health & Telemetry:
http://localhost:5446/api/health - MCP SSE Transport:
http://localhost:5446/mcp/sse - Google OAuth Flow:
http://localhost:5446/auth/google
{
"mcpServers": {
"g-krusch": {
"url": "http://localhost:5446/mcp/sse"
}
}
}{
"mcpServers": {
"g-krusch": {
"command": "node",
"args": ["/absolute/path/to/G-krusch/src/index.js", "--stdio"]
}
}
}| Tool | Description |
|---|---|
get_agent_steering |
Retrieves active agent.md steering directives directly from Google Drive. |
search_drive_rag |
Hybrid semantic vector + FTS5 BM25 keyword search across all indexed files in Google Drive. |
read_drive_file |
Reads any document from Drive (exports Google Docs, Sheets, Slides & PDFs cleanly to Markdown/CSV). |
write_drive_file |
Creates or updates Markdown files, native Google Docs (.gdoc), Google Sheets (.gsheet), or Google Slides presentations (.slides, with Notes: speaker notes) in the workspace. |
delete_drive_file |
Soft-trashes a file in the G-Krusch Google Drive workspace. |
list_drive_workspace |
Lists all folders and files in the G-Krusch Drive hierarchy. |
sync_drive_rag |
Triggers an incremental scan and embedding sync of Google Drive files. |
get_workspace_status |
Reports OAuth connection health, indexed file count, and cached embedding statistics. |
list_calendar_events |
Lists upcoming events from the user's primary Google Calendar with optional query and time window. |
create_calendar_event |
Schedules a new event or reservation hold on the user's primary Google Calendar. |
search_gmail_messages |
Searches Gmail messages using standard Gmail operators (is:unread, from:...). |
compose_gmail_message |
Creates an RFC-2822 / RFC-2047 sanitized Gmail draft or sends an email immediately (send_immediately: true). |
In addition to its MCP server, G-Krusch exposes REST Extension APIs on port 5446 consumed by krusch-companion's <holodata> Dual-Engine Agentic Proxy:
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/health |
Reports SQLite WAL health, OAuth status, Krusch-Nexus PDF engine status, RAG counts, and active extensions. |
GET |
/api/steering |
Retrieves agent.md cloud steering directives (?refresh=true to bypass cache). |
PUT |
/api/steering |
Updates agent.md steering content in Google Drive. |
GET |
/api/workspace/tree |
Returns recursive folder & file tree for the G-Krusch Google Drive workspace. |
GET |
/api/rag/search?q=... |
Hybrid semantic + FTS5 BM25 search across indexed Google Drive documents (gkrusch_drive). |
POST |
/api/rag/sync |
Incrementally indexes workspace documents into SQLite vector + FTS5 tables. |
GET |
/api/drive/read?path=... |
Reads a Google Drive file or exports a Google Doc, Sheet, Slides deck, or PDF (gkrusch_drive). |
POST |
/api/drive/write |
Creates or updates a Markdown file, native Google Doc (.gdoc), Google Sheet (.gsheet), or Google Slides deck (.slides) inside the G-Krusch Drive workspace (gkrusch_drive). |
DELETE |
/api/drive/file |
Soft-trashes a file by path or fileId. |
GET |
/api/calendar/events |
Lists upcoming events from the user's primary Google Calendar (gkrusch_calendar). |
POST |
/api/calendar/events |
Schedules a new Google Calendar event ({ summary, startTime, endTime, description }) (gkrusch_calendar). |
GET |
/api/gmail/messages?q=... |
Searches Gmail messages and returns sender, subject, date, and snippet previews (gkrusch_gmail). |
POST |
/api/gmail/drafts |
Encodes a CRLF-sanitized RFC-2822 / RFC-2047 MIME message and creates a Gmail draft (sendImmediately: false) or sends immediately (gkrusch_gmail / concierge_reservation). |
POST |
/api/gmail/send |
Sends a CRLF-sanitized RFC-2822 / RFC-2047 MIME email immediately via Gmail (sendImmediately: true). |
MIT © kruschdev. Part of the Krusch Homelab Sovereign AI Ecosystem.