Skip to content

Latest commit

Β 

History

111 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

waywiser

Your data never leaves your machine. Memories, preferences, boards, and scheduled jobs live in ~/.waywiser/ β€” a SQLite database you own, files you can edit by hand, and a whole home you can nuke in one rm -rf. No telemetry, no cloud sync. Your LLM runs on your hardware or behind your own API key.

A proactive personal AI agent built on pi. Waywiser doesn't wait to be spoken to β€” it monitors your boards, goals, deadlines, and calendar, alerts you when something needs attention, adapts to your communication style, and learns from corrections in real time. Extends pi with persistent memory, a proactive cognition engine, behavioral meta-skills, task delegation, project boards, Google Calendar integration, MCP integrations, scheduled jobs, notifications, and a permission engine β€” all as in-process TypeScript extensions. Nothing patches pi's core.

Architecture

waywiser/
β”œβ”€β”€ extensions/                      ← Core agent extensions
β”‚   β”œβ”€β”€ permissions.ts               ← Permission engine (9 risk classes, extensible classifiers, approval leases)
β”‚   β”œβ”€β”€ soul.ts                      ← SOUL.md identity persistence (append-only)
β”‚   β”œβ”€β”€ memory.ts                    ← Cross-session memory (FTS5, RecallProvider, deterministic gate)
β”‚   β”œβ”€β”€ memrules.ts                  ← Memory rules (gate patterns, Jaccard, validation)
β”‚   β”œβ”€β”€ mem-dream.ts                 ← Memory consolidation (dedup, merge, conflicts)
β”‚   β”œβ”€β”€ proactive.ts                 ← Proactive cognition engine (OODA loop, signal gathering, calendar awareness)
β”‚   β”œβ”€β”€ meta-skills.ts               ← Behavioral engines (EQ, discretion, adaptability, multi-tasking)
β”‚   β”œβ”€β”€ brain/                       ← Persistent memory with procedural preferences (core β€” always loaded)
β”‚   β”‚   β”œβ”€β”€ index.ts                 ← Brain lifecycle (session, learning boundary, vault sync)
β”‚   β”‚   β”œβ”€β”€ store.ts                 ← BrainStore (SQLite, migrations, CRUD)
β”‚   β”‚   β”œβ”€β”€ recall.ts                ← Reciprocal rank fusion (lexical + scope + usage + confidence + recency + semantic)
β”‚   β”‚   β”œβ”€β”€ embeddings.ts            ← Embedding API (CPU-isolated, LRU cache, batch /api/embed)
β”‚   β”‚   β”œβ”€β”€ learner.ts               ← Two-pass learning (deterministic + LLM reflection)
β”‚   β”‚   β”œβ”€β”€ procedures.ts            ← Procedural preferences with evidence tracking
β”‚   β”‚   β”œβ”€β”€ evolve.ts                ← Auto-evolution pipeline (procedures β†’ candidates β†’ skills)
β”‚   β”‚   β”œβ”€β”€ cognition.ts             ← Cognition pool (pi RPC children for reflection)
β”‚   β”‚   β”œβ”€β”€ consolidate.ts           ← Dedup, merge, contradiction detection
β”‚   β”‚   β”œβ”€β”€ vault.ts                 ← Obsidian-native markdown sync (wikilinks, Properties, MOCs)
β”‚   β”‚   β”œβ”€β”€ trace.ts                 ← Experience trace (observations, outcomes)
β”‚   β”‚   β”œβ”€β”€ prompts.ts               ← Brain context rendering
β”‚   β”‚   β”œβ”€β”€ config.ts                ← Brain config loader
β”‚   β”‚   β”œβ”€β”€ policy.ts                ← Project-key detection, scoping
β”‚   β”‚   β”œβ”€β”€ eval.ts                  ← Competitive skill evaluation
β”‚   β”‚   β”œβ”€β”€ provenance.ts            ← Memory provenance tracking
β”‚   β”‚   β”œβ”€β”€ recovery.ts              ← Crash recovery
β”‚   β”‚   β”œβ”€β”€ skills.ts                ← Skill discovery, promotion, rollback
β”‚   β”‚   └── types.ts                 ← Brain type definitions
β”‚   β”œβ”€β”€ kanban/                      ← Project boards (4 modules)
β”‚   β”‚   β”œβ”€β”€ index.ts                 ← Extension wiring, /kanban command, kanban tool
β”‚   β”‚   β”œβ”€β”€ ops.ts                   ← 25+ board/card CRUD operations
β”‚   β”‚   β”œβ”€β”€ worker.ts                ← Subagent card workers (spawnCard, waitCard)
β”‚   β”‚   └── shared.ts               ← Types, constants, DB helpers, nextCardId (UUID)
β”‚   β”œβ”€β”€ kanban-server.ts             ← Localhost HTTP dashboard (token-authenticated, no CORS)
β”‚   β”œβ”€β”€ kanban-html.ts               ← Board HTML/CSS generation (live + static snapshot)
β”‚   β”œβ”€β”€ delegate.ts                  ← Task delegation via RPC subprocesses (warm pool, depth-2)
β”‚   β”œβ”€β”€ execute-code.ts              ← Programmatic tool calling (vm.createContext sandbox + optional gondolin)
β”‚   β”œβ”€β”€ cronjob.ts                   ← Scheduled jobs (cron parser, quiet hours, auto-pause on failure)
β”‚   β”œβ”€β”€ notify.ts                    ← Desktop/Telegram/webhook notifications (spawn, no shell)
β”‚   β”œβ”€β”€ mcp.ts                       ← MCP server loader (JSON-RPC 2.0 stdio, lazy connect, reconnect)
β”‚   β”œβ”€β”€ web.ts                       ← Web search + extract (SSRF-guarded, HTML entity decoding)
β”‚   β”œβ”€β”€ commands.ts                  ← Slash commands, goals (with budgets), /trace export, /journey
β”‚   β”œβ”€β”€ skills-manage.ts             ← Playbook catalog (tier badges, auto-onboard trigger)
β”‚   β”œβ”€β”€ todo-compat.ts               ← /todo β†’ kanban compatibility shim
β”‚   β”œβ”€β”€ clarify.ts                   ← User interaction tool
β”‚   β”œβ”€β”€ index.ts                     ← Extension loader (fault-isolated, prompt assembly handler)
β”‚   └── utils/
β”‚       β”œβ”€β”€ state.ts                 ← Shared DB (SQLite WAL), registry, config, RecallProvider interface
β”‚       β”œβ”€β”€ tool-policy.ts           ← Extensible tool risk classifiers (plugin registration)
β”‚       β”œβ”€β”€ rpc.ts                   ← Pi RPC client + warm pool (lane-versioned, TTL-evicted)
β”‚       β”œβ”€β”€ llmcall.ts               ← One-shot LLM child (queue-based semaphore, no deadlock)
β”‚       β”œβ”€β”€ prompt-budget.ts         ← Priority-based prompt injection manager (cache telemetry)
β”‚       β”œβ”€β”€ trace.ts                 ← Structured trace events (TraceEvent, logTrace, logLegacy)
β”‚       └── url-guard.ts             ← SSRF protection (RFC1918, link-local, loopback, IPv6)
β”‚
β”œβ”€β”€ plugins/
β”‚   β”œβ”€β”€ google-workspace/            ← Google Calendar integration via gog CLI
β”‚   β”‚   β”œβ”€β”€ shared/                  ← Shared infra (reusable for future Gmail, Drive, etc.)
β”‚   β”‚   β”‚   β”œβ”€β”€ gog-runner.ts        ← GogRunner interface + ProductionGogRunner (shell:false, caps, abort)
β”‚   β”‚   β”‚   β”œβ”€β”€ gog-contract.ts      ← Runtime capability probe (gog schema, contract cache)
β”‚   β”‚   β”‚   β”œβ”€β”€ gog-errors.ts        ← Exit code β†’ CalendarErrorCode semantic mapping
β”‚   β”‚   β”‚   └── accounts.ts          ← Account routing (alias, default, multi-account)
β”‚   β”‚   β”œβ”€β”€ extensions/calendar/     ← Calendar semantic capability (loaded by bin/waywiser plugin discovery)
β”‚   β”‚   β”‚   β”œβ”€β”€ index.ts             ← Plugin entry (risk classifier, projection, tool registration)
β”‚   β”‚   β”‚   β”œβ”€β”€ tool.ts              ← Semantic `calendar` tool β€” 30+ actions dispatched
β”‚   β”‚   β”‚   β”œβ”€β”€ operations.ts        ← Operation manifest β€” single source of truth (dispatch + permissions)
β”‚   β”‚   β”‚   β”œβ”€β”€ types.ts             ← CalendarAction, CalendarEvent, CalendarStatus, OperationSpec
β”‚   β”‚   β”‚   β”œβ”€β”€ invocation.ts        ← Safety flag assembly (--readonly, --exact, --wrap-untrusted)
β”‚   β”‚   β”‚   β”œβ”€β”€ normalize.ts         ← Raw gog JSON β†’ CalendarEvent normalization
β”‚   β”‚   β”‚   β”œβ”€β”€ idempotency.ts       ← Operation journal + Google-compatible event ID generation
β”‚   β”‚   β”‚   └── projection.ts        ← Materialized SQLite projection for proactive SENSE
β”‚   β”‚   β”œβ”€β”€ skills/google-workspace/
β”‚   β”‚   β”‚   └── SKILL.md             ← PA skill (safety rules, operations catalog, patterns)
β”‚   β”‚   └── config/
β”‚   β”‚       └── google-workspace.example.json  ← Default config (accounts, timeouts, safety)
β”‚   β”‚
β”‚   └── obsidian/                    ← Obsidian integration (optional add-on)
β”‚       β”œβ”€β”€ src/                     ← Plugin source (dashboard, commands, graph, watcher)
β”‚       β”œβ”€β”€ main.js                  ← Built plugin
β”‚       β”œβ”€β”€ manifest.json
β”‚       β”œβ”€β”€ styles.css
β”‚       └── sql-wasm.wasm
β”‚
β”œβ”€β”€ skills/
β”‚   β”œβ”€β”€ waywiser/SKILL.md            ← Core operating skill (always loaded)
β”‚   β”œβ”€β”€ brain/SKILL.md               ← Brain operating skill (always loaded)
β”‚   └── pa-*/SKILL.md               ← 19 PA playbooks (bootstrapped to ~/.waywiser/skills/)
β”‚       β”œβ”€β”€ pa-time-manage/          βœ… verified
β”‚       β”œβ”€β”€ pa-doc-writer/           βœ… verified
β”‚       β”œβ”€β”€ pa-stakeholder-comm/     βœ… verified
β”‚       β”œβ”€β”€ pa-research/             βœ… verified
β”‚       β”œβ”€β”€ pa-lifestyle/            βœ… verified
β”‚       β”œβ”€β”€ pa-onboard/              βœ… verified
β”‚       β”œβ”€β”€ pa-project-coord/        ⚠️ experimental
β”‚       β”œβ”€β”€ pa-event-manage/         ⚠️ experimental
β”‚       β”œβ”€β”€ pa-finance/              ⚠️ experimental
β”‚       β”œβ”€β”€ pa-travel/               ⚠️ experimental
β”‚       β”œβ”€β”€ pa-procurement/          ⚠️ experimental
β”‚       β”œβ”€β”€ pa-decision-support/     ⚠️ experimental
β”‚       β”œβ”€β”€ pa-process-improve/      ⚠️ experimental
β”‚       β”œβ”€β”€ pa-tech-ops/             ⚠️ experimental
β”‚       β”œβ”€β”€ pa-records/              ⚠️ experimental
β”‚       β”œβ”€β”€ pa-hr-support/           πŸ”¬ untested
β”‚       β”œβ”€β”€ pa-compliance/           πŸ”¬ untested
β”‚       β”œβ”€β”€ pa-governance/           πŸ”¬ untested
β”‚       └── pa-protocol/             πŸ”¬ untested
β”‚
β”œβ”€β”€ bin/
β”‚   └── waywiser                     ← Launcher (core extensions, plugin discovery for extras)
β”‚
β”œβ”€β”€ config/
β”‚   β”œβ”€β”€ SOUL.md                      ← Default identity template
β”‚   β”œβ”€β”€ mcp.example.json             ← MCP server config example
β”‚   β”œβ”€β”€ notify.example.json          ← Notification channel config example
β”‚   └── brain.example.json           ← Brain config example (recall, embeddings, vault, evolution)
β”‚
β”œβ”€β”€ test/
β”‚   β”œβ”€β”€ waywiser.test.ts             ← Core unit tests (memory, gate, recall, goals, traces, meta-skills)
β”‚   β”œβ”€β”€ smoke.test.ts                ← Extension registration smoke test
β”‚   β”œβ”€β”€ permissions.test.ts          ← Permission engine tests (classifier, policy, budget, planning, plugins)
β”‚   β”œβ”€β”€ prompt-budget.test.ts        ← Prompt budget manager tests (ordering, trimming, cache)
β”‚   β”œβ”€β”€ brain/                       ← Brain unit tests (18 files, 332 tests)
β”‚   β”œβ”€β”€ google-workspace/            ← Google Calendar plugin tests (8 files, 306 tests)
β”‚   β”‚   β”œβ”€β”€ gog-runner.test.ts            ← FakeGogRunner, shell injection safety
β”‚   β”‚   β”œβ”€β”€ gog-contract.test.ts          ← Capability probe, schema validation
β”‚   β”‚   β”œβ”€β”€ calendar-operations.test.ts   ← All 30 actions, risk mapping, manifest completeness
β”‚   β”‚   β”œβ”€β”€ calendar-safety.test.ts       ← Read path defense-in-depth (140 assertions)
β”‚   β”‚   β”œβ”€β”€ calendar-normalize.test.ts    ← Event normalization (timed, all-day, conference, recurring)
β”‚   β”‚   β”œβ”€β”€ calendar-errors.test.ts       ← Exit code β†’ error code mapping
β”‚   β”‚   β”œβ”€β”€ calendar-idempotency.test.ts  ← Event ID generation, operation journal
β”‚   β”‚   └── calendar-projection.test.ts   ← Transactional snapshot, stale handling, isolation
β”‚   β”œβ”€β”€ security/
β”‚   β”‚   β”œβ”€β”€ execute-code-sandbox.test.ts  ← vm.createContext sandbox escape prevention
β”‚   β”‚   β”œβ”€β”€ url-guard.test.ts             ← SSRF URL blocking
β”‚   β”‚   β”œβ”€β”€ kanban-auth.test.ts           ← Session token auth verification
β”‚   β”‚   └── notify-spawn.test.ts          ← Shell injection prevention
β”‚   └── e2e/                              ← End-to-end evals (require WAYWISER_E2E_MODEL)
β”‚       β”œβ”€β”€ helpers.ts                     ← Test home, model gate, paths
β”‚       β”œβ”€β”€ memory-roundtrip.test.ts       ← Remember β†’ recall preference
β”‚       β”œβ”€β”€ kanban-lifecycle.test.ts       ← Card new β†’ move β†’ done
β”‚       β”œβ”€β”€ delegation.test.ts             ← Spawn leaf β†’ collect report
β”‚       β”œβ”€β”€ cron-fire.test.ts              ← Schedule one-shot β†’ verify fire
β”‚       └── adversarial.test.ts            ← Injection, oversized write, escape
β”‚
β”œβ”€β”€ docs/
β”‚   β”œβ”€β”€ specs/                       ← Design specs (01-07)
β”‚   β”œβ”€β”€ audits/                      ← 4 audit reports + remediation plan
β”‚   └── research/                    ← Proactive capabilities, Ollama contention, memory latency
β”‚
β”œβ”€β”€ package.json                     ← 1 production dep (typebox), Node β‰₯22.5
β”œβ”€β”€ SPEC.md                          ← Original design spec
└── LICENSE                          ← MIT

Install

Node >= 22.5, pi on PATH.

git clone git@github.com:yoda-digital/waywiser.git
cd waywiser
npm install
bin/waywiser

That's it. Brain (persistent memory with procedural preferences, RRF recall, auto-evolution, and vault sync) is a core component β€” it loads automatically on every launch. On first run, Waywiser walks you through setup: timezone, working hours, daily/weekly reviews, notification channels.

What you get out of the box:

Proactive intelligence:

  • Proactive cognition engine β€” OODA loop ticks every 15 min, monitors boards/goals/deadlines/calendar, alerts without consuming GPU
  • Calendar awareness β€” meeting-soon alerts, conflict detection, overloaded-day warnings from materialized projection (SQL-only, zero network in SENSE)
  • Emotional intelligence β€” detects frustration from message patterns, adapts communication style in real time
  • Discretion β€” suppresses low-value alerts during deep focus, caps notifications, respects quiet hours
  • Adaptability β€” catches corrections instantly ("no, use X"), creates memories and adjusts same-session
  • Multi-tasking β€” spawns background subagents for queued work during idle periods

Memory & learning:

  • Cross-session memory (FTS5 + Brain's reciprocal rank fusion recall)
  • Deterministic memory extraction per turn (CPU, ~1ms β€” no GPU contention)
  • LLM-powered reflective learning at conversation boundaries
  • Procedural preferences ("when X, prefer Y over Z") with evidence tracking
  • Auto-evolution: mature procedures β†’ candidate skills β†’ competitive eval
  • Embedding on CPU (num_gpu: 0), LRU cache, batch API β€” zero GPU contention with generation
  • Memory export/import for data portability
  • SOUL.md identity with consolidation

Tools & integrations:

  • Google Calendar via gog β€” semantic calendar tool with 30+ operations (events, freebusy, conflicts, create, update, respond, focus-time, OOO, working-location), defense-in-depth read safety, write idempotency, materialized projection for proactive
  • Task delegation (3 concurrent subagents, depth-capped at 2)
  • Kanban boards (authenticated web dashboard + TUI + markdown)
  • MCP integrations (Gmail, Drive, Notion, etc.)
  • Scheduled jobs (cron + one-shot timers, auto-pause on repeated failures)
  • Desktop/Telegram/webhook notifications
  • 19 PA playbooks covering time management, writing, communication, research, finance, travel, procurement, governance, and more

Safety & observability:

  • Permission engine (9 risk classes including unclassified fail-closed, extensible plugin classifiers, configurable policy, /permissions)
  • Approval leases β€” scoped preauthorization for headless/proactive operations (tool + action + account + time window + max executions)
  • Planning mode (/plan blocks writes, /plan approve re-enables; allows read_only + network + mcp_read)
  • Session budgets (200 tool calls, 10 subagent spawns)
  • Calendar read safety β€” exact command allowlist + readonly transport guard + untrusted content wrapping on every live read
  • Sandboxed code execution (vm.createContext + optional Gondolin micro-VM)
  • SSRF protection on web tools
  • Structured trace events (/trace export)
  • Goal budgets (/goal --max-steps --deadline --done)
  • Prompt cache telemetry (/waywiser status)

Google Calendar

Requires gog (v0.37.0+, schema_version 1).

# Install gog, then authenticate
gog auth add

# Configure Waywiser
cat ~/.waywiser/google-workspace.json
# β†’ Add your account(s) to "accounts" array:
#   { "email": "you@example.com", "alias": "personal", "default": true }

The calendar tool auto-discovers via plugin loading β€” no code changes needed. Capabilities are validated at runtime via gog schema, not pinned to a version string. The proactive engine picks up calendar signals (meeting-soon, conflicts, overloaded-day) automatically from the materialized SQLite projection.

Architecture:

Pi / LLM  β†’  calendar(action=events, ...)   (semantic tool, no CLI knowledge)
    ↓
Waywiser  β†’  permissions (risk classify β†’ planning gate β†’ approval)
    ↓
Plugin    β†’  operation manifest β†’ invocation builder β†’ safety flags
    ↓
GogRunner β†’  spawn("gog", argv, { shell: false })
    ↓
gog CLI   β†’  Google Calendar API

Optional: Obsidian Plugin

The Brain vault at ~/.waywiser/brain/ is already Obsidian-compatible (wikilinks, Properties, callouts, mermaid). For a richer experience β€” dashboard sidebar, command palette, graph coloring, confidence bars:

cd plugins/obsidian
npm install && npm run build
cp main.js manifest.json styles.css sql-wasm.wasm \
   /path/to/vault/.obsidian/plugins/waywiser-brain/

Enable in Obsidian β†’ Settings β†’ Community Plugins.

Proactive Engine

Waywiser runs a continuous OODA loop (Observe-Orient-Decide-Act) between user interactions. Every 15 minutes (30 during quiet hours), it:

  1. Senses β€” SQL-only signal gathering (zero LLM cost): overdue kanban cards, goals past deadline, goals near budget, cron failures, evolution candidates, user absence, calendar meeting-soon, calendar conflicts, calendar overloaded-day (from materialized projection)
  2. Orients β€” priority scores each signal (P0 interrupt β†’ P3 background), deduplicates (1-hour window), applies discretion filter
  3. Decides + Acts β€” P0 alerts via desktop/Telegram (no GPU); P1-P2 triggers agent turn via sendUserMessage followUp; P3 runs silently

The engine pauses during active conversation and re-arms when the agent settles. /proactive controls it (on/off/tick/signals/status). Config via ~/.waywiser/config.json:

{
  "proactive": {
    "enabled": true,
    "tickActiveMs": 900000,
    "tickQuietMs": 1800000
  }
}

Meta-Skills

Six cross-cutting meta-skills implemented as runtime behavioral engines:

Meta-Skill Engine How it works
Emotional Intelligence meta-skills.ts Analyzes message patterns at turn_end (short replies, corrections, caps); injects communication guidance into system prompt
Discretion meta-skills.ts Filters proactive notifications; max 3/hour; suppresses during deep conversations (>5 turns); never sends sensitive content externally
Anticipatory Thinking proactive.ts OODA loop scans boards, goals, calendar projection every 15 min; detects upcoming meetings, conflicts, overloaded days; prepares before deadlines hit
Adaptability meta-skills.ts Detects corrections instantly; creates memories and injects one-turn adjustment notes ("no, use X" β†’ immediate memory + style shift)
Multi-tasking meta-skills.ts Spawns background subagents for kanban cards assigned to "subagent" during idle periods
Continuous Learning Brain learner.ts Two-pass learning at conversation boundaries: deterministic extraction (CPU, ~1ms) + LLM reflection (nuanced signals)

Manage via /meta-skills (status/emotional/discretion/corrections).

Playbooks (Personal Assistant)

19 domain-specific playbooks. Each embeds a professional methodology (GTD, Minto Pyramid, OODA Loop, DMAIC, etc.), few-shot examples, and tool integration. They load on-demand via skill_view (progressive disclosure).

Badge Tier Meaning
βœ… verified Tested with β‰₯60% accuracy. Few-shot examples tuned.
⚠️ experimental Methodology-based but not yet empirically validated.
πŸ”¬ untested Domain-expert playbook awaiting evaluation.
Tier Playbooks
βœ… Verified (6) pa-time-manage pa-doc-writer pa-stakeholder-comm pa-research pa-lifestyle pa-onboard
⚠️ Experimental (9) pa-project-coord pa-event-manage pa-finance pa-travel pa-procurement pa-decision-support pa-process-improve pa-tech-ops pa-records
πŸ”¬ Untested (4) pa-hr-support pa-compliance pa-governance pa-protocol

On first run, the pa-onboard setup wizard triggers automatically β€” captures working hours, timezone, quiet hours, creates daily/weekly review crons, initializes the PA kanban board.

Security

  • Permission engine β€” 9 risk classes (read_only, write_local, process_exec, communication, network, scheduling, mcp_read, mcp_write, unclassified). Policy per class: allow, block, ask_user, log_only. Unknown tools β†’ unclassified β†’ block (fail-closed). /permissions
  • Extensible classifiers β€” plugins register per-tool risk classifiers via registerToolRiskClassifier(). Calendar plugin classifies each action (events β†’ read_only, create β†’ scheduling, respond β†’ communication)
  • Approval leases β€” scoped preauthorization for headless/proactive operations. Constrained by tool, action, account, calendar, time window, and max executions. No global allow calendar
  • Planning mode β€” /plan blocks writes; /plan approve re-enables. Allows read_only + network + mcp_read. Allowlist never bypasses planning
  • Session budgets β€” 200 tool calls, 10 spawns (configurable)
  • Calendar read safety β€” every live read uses --readonly + --enable-commands-exact + --no-input + --wrap-untrusted + --json. Model cannot construct arbitrary gog argv
  • Write idempotency β€” deterministic Google-compatible event IDs + operation journal prevents duplicate creation on retry
  • Sandbox β€” vm.createContext(Object.create(null)) + 5s timeout; optional gondolin micro-VM
  • SSRF guard β€” blocks RFC1918, link-local, loopback, IPv6 ULA in web_extract
  • Kanban auth β€” per-session Bearer token, no CORS
  • Notifications β€” spawn() with argument arrays (no shell)

Configuration

All config lives in ~/.waywiser/:

File Purpose
waywiser.db SQLite database (memory, boards, cron, goals, brain, calendar projection, approval leases)
brain.json Brain config (recall, embeddings, vault, evolution)
google-workspace.json Google Calendar config (accounts, timeouts, projection, safety flags)
config.json Global config (prompt budget, execute_code backend, proactive engine)
permissions.json Permission policy (risk class defaults, per-tool overrides, allowlist)
SOUL.md Agent identity and preferences (append-only)
MEMORY.md Append-only memory log (human-readable mirror)
USER.md User profile
mcp.json MCP server configuration
notify.json Notification channel setup (desktop, Telegram, webhook)
mem.json Memory subsystem tuning (auto, recall mode, gate timeout)
quiet.json Quiet hours window (HH:MM-HH:MM)
brain/ Brain vault (Obsidian-compatible markdown)
boards/ Kanban board markdown exports
skills/ PA playbooks + evolved skills (active/candidates/retired)

Tests

# Everything β€” core + security + proactive + meta-skills + Brain + Calendar
npm test                                            # 760+ tests

# Google Calendar plugin only (8 suites, 306 tests)
node --test test/google-workspace/*.test.ts

# Brain only (76 suites)
npm run test:brain                                  # 332 tests

# End-to-end evals (requires a running LLM)
WAYWISER_E2E_MODEL=qwen3:latest npm run test:e2e    # 6 tests

License

MIT


Built on pi. MIT.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages