Skip to content

Releases: JosephOIbrahim/OTTO

v5.2.0 — Opus 4.7 + Polish

Choose a tag to compare

@JosephOIbrahim JosephOIbrahim released this 15 May 15:19

What's new

LLM upgrade — Claude Opus 4.7 + prompt caching everywhere

  • New src/otto/model_config.py — single source of truth for model IDs, every one env-overridable
  • Detector → Claude Opus 4.7 (better pragmatic inference: "I'll try" vs "I will" → confidence → nudge timing)
  • Agent loop → Claude Sonnet 4.6
  • Optional response_gen → Claude Haiku 4.5 (downgrade — 1–3 sentence rephrase doesn't need Sonnet)
  • Prompt caching on all three surfaces: detector system prompt, agent system + tool definitions (single breakpoint covers ~2 KB of stable prefix from turn 2 onward), response_gen system prompt
  • TEMPERATURE = 0.0 preserved everywhere — Patent P1 determinism guard

Docs

  • README rewrite with three two-tone Mermaid architecture diagrams (slate #1e293b + warm amber #fde68a):
    • Core message → detect → store → schedule → nudge → constitutional gate loop
    • PRISM signals → NEXUS 5-phase router → 4 modes → constitutional gate → UCB1 learner feedback
    • model_config.py fan-out to detector / agent / response_gen
  • ADHD-friendly install walkthrough — mile markers, explicit permission to stop, expected output per step, no "just" or "simply"
  • Constitutional principles section

Tests

  • +7 new tests in tests/test_model_config.py (defaults, env overrides, TEMPERATURE == 0.0 regression guard for P1)
  • 645 total tests passing (589 core + 56 agent)

Rollback

Each model surface is one env var away from the previous Sonnet 4.5:

$env:OTTO_DETECTOR_MODEL = "claude-sonnet-4-5-20250929"
$env:OTTO_AGENT_MODEL = "claude-sonnet-4-5-20250929"
$env:OTTO_RESPONSE_GEN_MODEL = "claude-sonnet-4-5-20250929"

Deferred to a future release (Tier 2)

Three optional Opus 4.7 augments are designed but not shipped. All three would be default OFF, env-gated, advisory-only, with deterministic fallback paths:

  • OTTO_SMART_DECOMPOSE — personalized task breakdowns using Opus 4.7's 1M context over prior commitment history
  • OTTO_ENHANCED_SIGNALS — semantic signal layer that augments (never replaces) the regex pattern banks
  • OTTO_LEARNER_ADVISOR — falsifiable observations on UCB1 outcome trends, surfaced via a new otto insights command

Constitutional core — unchanged

constitutional.py, nudge.py, router.py NEXUS phases, modes/, signals.py regex layer, and learner.py UCB1 math are all untouched. The deterministic state-evolution thesis (Patent P1) is intact.

Upgrade

git pull origin master
cd otto_v4
pip install -e ".[dev]"
python -m pytest tests/ -m "not integration"

Set ANTHROPIC_API_KEY in your shell or .env and you're on Opus 4.7.

OTTO v5.1.0-beta: Score Push — Transport, Simulation, TUI

Choose a tag to compare

@JosephOIbrahim JosephOIbrahim released this 12 Feb 03:47

What's New in v5.1.0-beta

WhatsApp Outbound Transport

  • WhatsAppTransport class using httpx + Meta Graph API v21.0
  • Auto-detected from env vars in otto watch --schedule
  • sender_phone field on Commitment model for round-trip tracking

Deterministic Simulation Engine

  • otto simulate command exercises the full UCB1 -> trail -> routing pipeline
  • SHA-256 based PRNG (no random module) — PYTHONHASHSEED-independent
  • 10 scenarios covering all 7 modes, configurable cycles and seed

TUI Dashboard

  • otto tui command (optional: pip install otto[tui])
  • Textual-based terminal UI showing commitments, cognitive state
  • Keybindings: d (done), p (park), r (refresh), q (quit)

Production Hardening

  • /health endpoint for load balancers and monitoring
  • Dockerfile with healthcheck
  • SQLite-backed rate limiter (survives process restarts)
  • HMAC validation warning on startup when WHATSAPP_APP_SECRET not set
  • UCB1 exploration constant tuned to 0.5 (safety-conservative)

Design Gap Fixes (from v5.0 code review)

  • PlasticityWindow persisted in SQLite (no longer ephemeral)
  • mode_outcomes table auto-prunes entries older than 30 days
  • otto nuke clears learning data (trails + outcomes + plasticity)
  • Redirector mode included in UCB learning via BURST_DETECTED signal

Stats

  • 636 tests passing (580 core + 56 agent)
  • 22 files changed, 2,211 insertions in score push commit

Full Changelog: v5.0.0-beta...v5.1.0-beta

OTTO v5.0.0-beta: From Heuristics to Real Learning

Choose a tag to compare

@JosephOIbrahim JosephOIbrahim released this 12 Feb 01:31

What's New in v5.0.0-beta

OTTO's cognitive routing pipeline now genuinely learns from outcomes. The trail->routing feedback loop that existed as dead code has been activated, outcome tracking added for all 7 modes, and heuristic weights replaced with UCB1 (a deterministic bandit algorithm with provable regret bounds).

Highlights

Feedback Loop Activated (Phase A)

  • compute_trail_adjustments() was defined but never called in production — now wired into both CLI nudge and the background scheduler
  • Plasticity amplification (2x during RED burnout) wired into trail deposits for done and park commands
  • 200+ lines of existing dead code activated with ~20 lines of new wiring

Honest Naming (Phase B)

  • _kahan_decay -> _exponential_decay (no Kahan summation was involved)
  • "pheromone trail" -> "outcome trail" everywhere
  • "stigmergic learning" -> "trail-based preference learning"
  • Zero behavior change, pure credibility improvement

Outcome Tracking (Phase C)

  • New mode_outcomes SQLite table records empirical mode effectiveness
  • record_outcome(), get_mode_stats(), get_success_rate(), get_total_outcomes() API
  • CLI done -> success, park -> mixed, nudge -> activated outcomes

UCB1 Mode Weighting (Phase D)

  • New learner.py: Upper Confidence Bound algorithm (Auer et al. 2002)
  • Deterministic: same outcome data -> same scores (He2025 compatible)
  • Exploration bonus rewards under-tested modes
  • Safety floors NEVER overridden — adjustments clamped to +/-0.2

Metrics Visibility (Phase E)

  • New otto metrics command shows outcome counts, success rates, UCB adjustments, trail stats

Test Results

  • 600 tests passing (up from 519 baseline)
  • 0 regressions
  • Python 3.11+ (developed on 3.14)

Breaking Changes

  • _kahan_decay() renamed to _exponential_decay() (internal API, unlikely to affect consumers)
  • Trail docstrings changed from "pheromone" to "outcome" terminology

Architecture

MESSAGE IN -> DETECT -> STORE -> SCHEDULE -> NUDGE
                                    |
                              [UCB1 Learning]
                              outcome_data -> compute_ucb_adjustments()
                                    |
                              trail_adjustments -> route_and_execute()
                                    |
                              [Constitutional Gate] <- safety floors NEVER modified
                                    |
                              OUTPUT (or suppress)

What's Next (v5.1)

  • WhatsApp outbound transport
  • Optional LLM-powered response generation
  • User study: does self-suppression improve outcomes?

Full Changelog: v4.0.0...v5.0.0-beta