Files
waggle-os/docs/addictiveness-audit-2026-05-28/FEATURE-REQUESTS.md
Oleg Maslov 0c3e2ead3b
Some checks failed
Installer Smoke / installer-smoke (push) Has been cancelled
moving
2026-09-02 10:10:29 +02:00

109 lines
10 KiB
Markdown

# Feature Requests — From 10-Persona Addictiveness Audit
**Date:** 2026-05-28
**Source:** baselines in `BASELINE.md`, benchmark intel in `BENCHMARK-*.md`, persona JTBDs in `PERSONAS.md`.
**Gate:** per saved feedback rule `feedback_workflow_reality_check`, every request below has a CONCRETE USER TRIGGER (specific persona, specific workflow location). Generic segment-expansion arguments do NOT clear the epistemic gate and are not listed here.
Prioritised by: cells_closed_across_rubric ÷ implementation_cost.
---
## TIER 2 — Net-new product surfaces (1-3 sprints each)
### FR-1 · External trigger: Browser companion (extension OR bookmarklet) [HIGHEST]
- **Concrete triggers:** P3 (Sarah, marketing) lives in Notion+browser; P5 (Lucas, journalist) lives in browser tabs + Drive; P7 (Anya, writer) lives in Substack + browser; P1 (Greta) has no app-install muscle so a browser-only entry point is the only viable hook
- **Surface:** "Save this page / selection to Waggle memory" + "Ask Waggle about this page" + a side-panel chat
- **Cells closed:** dim 1 (external trigger) for P1, P3, P5, P7 (+4). dim 3 (first-session hook) for P1, P3 (+2). dim 10 (one tool) for P3, P5, P7 (+3). **~9 cells.**
- **Benchmark gap closed:** OpenClaw's messaging-channel ubiquity (browser tab is the actual "messaging channel" for non-coders); Claude Cowork has nothing here.
- **Effort estimate:** 1.5 sprints — Chrome MV3 extension + Waggle sidecar endpoint for "ingest page" + side-panel chat reusing existing ChatApp components.
### FR-2 · Outbound scheduled digests (Telegram first, then Email, Slack) [HIGH]
- **Concrete triggers:** P10 (Tomás) explicitly named Telegram outbound in his JTBD — that's his Hermes Agent workflow; P8 (Marko) would use email digest as a daily strategic-recap hook; P6 (Daniel) needs Monday-morning variance summary in Teams/Email.
- **Surface:** ScheduledJobsApp grows a "Push to: [Telegram bot / Email / Slack / Webhook]" output channel.
- **Cells closed:** dim 1 for P6, P8, P10 (+3). dim 10 for P10 (+1). **~4 cells**, plus pulls P10 from 5 → 7.
- **Benchmark gap closed:** Hermes' cron-push-to-Telegram is the SINGLE addictive feature that makes Hermes a "daily driver" for the agent-builder segment.
- **Effort estimate:** 1 sprint for Telegram bot integration (single connector) + ScheduledJobs UI for output channel selection.
### FR-3 · Publicly host the EXISTING Marketplace [HIGH] — REFRAMED 2026-05-28
> ⚠️ **Reframed after redundancy audit.** The original framing ("build a public skill registry reading from MCP_CATALOG") was implemented in iter-8, then **reverted** (commit d47c7f5 reverted) — it duplicated the existing in-app `MarketplaceApp`, and worse, read the inferior *static* 148-entry catalog instead of the live-synced marketplace DB. See `REDUNDANCY-AUDIT.md`.
- **Concrete triggers:** P10 (Tomás) picks Hermes for the OSS skill economy; P9 (Priya) is Claude Code marketplace-savvy; P4/P8 would import frameworks from peers.
- **Correct surface:** Take the EXISTING marketplace (live-synced DB, install/scan-capable, `/api/marketplace/search`) and expose a **public, hosted, link-shareable web view** at e.g. `registry.waggle-os.ai`. The addictive part (dim 5 tribe) is *peers linking to a skill across the internet*, which a local `127.0.0.1` page can never deliver.
- **This is an OPS/DEPLOY decision, not new code:** pick a host (Vercel / Cloudflare Pages / waggle-os.ai subdomain), point a thin read-only frontend at the marketplace search API, add a deep-link/protocol handler (`waggle://`) so a peer's link launches their desktop.
- **Cells closed (when hosted):** dim 5 for P4, P8, P9, P10 (+4); dim 10 for P9, P10 (+2). **~6 cells.**
- **Do NOT:** build another static-catalog page. That's what got reverted.
### FR-4 · "Memory growth trophy" in StatusBar — visible compounding signal [MEDIUM]
- **Concrete triggers:** P1, P2 (novices) need a SEEN reason to come back tomorrow; P3, P5, P7 (mid-tech) need the dopamine of growth; the rubric's dim 8 says investment surfaces must be VISIBLE, not just stored.
- **Surface:** Add `🧠 N frames · +K this week` to StatusBar.tsx, with hover tooltip showing the breakdown.
- **Cells closed:** dim 8 reframing for P1, P2, P3, P5, P10 (+5). **~5 cells.**
- **Effort estimate:** 0.5 sprint — StatusBar.tsx + adapter call + Desktop.tsx prop threading.
### FR-5 · New-user demo workspace import [MEDIUM] — PARTIALLY REDUNDANT (flagged 2026-05-28)
> ⚠️ **Redundancy found.** Shipped in iter-6 as a parallel `sample-workspaces.ts` route, but `workspace-templates.ts` ALREADY seeds `starterMemory[]` on workspace creation (M2-5 in `POST /api/workspaces`), and `OnboardingWizard` already drives it. 4 of my 5 bundles duplicate existing templates by persona. See `REDUNDANCY-AUDIT.md`.
- **Original concrete triggers** (still valid): P1/P2/P3 land empty → no hook.
- **What was genuinely new:** the day-0 *LoginBriefing* trigger (load a starter when empty, on every launch — not just the first-run wizard).
- **Correct consolidation:** (a) enrich existing `BUILT_IN_TEMPLATES.starterMemory` (currently ~3 thin entries each; my bundles had 8 richer frames) and add a `writer` template; (b) rewire the day-0 LoginBriefing hook to `POST /api/workspaces` with the chosen `templateId`; (c) drop `sample-workspaces.ts`.
- **Cells (value is real, mechanism should consolidate):** dim 3 for P1/P2/P3/P5/P7 (+5); dim 7 for P1/P2 (+2).
- **Status (2026-05-28): REVERTED.** `sample-workspaces.ts` deleted + de-registered; LoginBriefing day-0 hook restored to the iter-1 F1 demo cards. The non-redundant rebuild = enrich `BUILT_IN_TEMPLATES.starterMemory` + add a `writer` template + wire the F1 day-0 cards to call `POST /api/workspaces` with the chosen `templateId` (so a click creates a real seeded workspace via the EXISTING mechanism). Open as a future task — no parallel route.
### FR-6 · Native xlsx editor (or deep Excel integration) [MEDIUM]
- **Concrete trigger:** P6 (Daniel) lives in Excel daily. No real "BI / finance ops" persona will pick Waggle without it.
- **Surface:** Embed an OSS spreadsheet (e.g., univer, fortune-sheet) into FilesApp for .xlsx editing in-place; chat can manipulate the sheet via skill-bridge.
- **Cells closed:** dim 10 (one tool) for P6 (+1). dim 4 (friction) for P6 (+0, already passes). **~1 cell** but the persona moves from 6 → 7-8.
- **Effort estimate:** 2-3 sprints — non-trivial integration work.
---
## TIER 3 — Strategic bets (out of this audit's scope, listed for prioritisation)
### FR-7 · Self-hosted enterprise build [STRATEGIC]
- **Concrete trigger:** P5 (Lucas, journalist source protection), P6 (Daniel, finance data sensitivity), P10 (Tomás, sovereign self-host) — three distinct personas with sovereign-AI requirements.
- **Benchmark gap closed:** matches OpenClaw + Hermes (their #1 enterprise pull).
- **Effort:** large; involves licensing, ops, certification.
### FR-8 · "Coverage compass" tile [LOW]
- **Concrete trigger:** P3 (Sarah) needs to JUSTIFY to herself "I'm replacing 3 subscriptions" — that's a retention surface, not a sales pitch.
- **Surface:** Settings or Cockpit tile listing "Waggle replaces: ChatGPT Plus, Notion AI, Gamma…" with checkmarks for what's wired today + downloadable savings receipt.
- **Cells closed:** dim 10 (one-tool framing) for P3, P4, P7 (+3).
- **Effort estimate:** 0.5 sprint — new tile component reading from feature-flags + tier.
### FR-9 · Voice-first daily journaling (P1 Greta hook) [LOW]
- **Concrete trigger:** P1 Greta uses iPad daily, talks more than she types, has voice habit from Siri. VoiceApp exists; daily-journal prompt is the missing flow.
- **Surface:** Morning push (via FR-1 browser ext or FR-2 outbound digest) → "Tap to record your day". Waggle adds to memory.
- **Cells closed:** dim 1 + dim 2 + dim 6 for P1 (+3, lifts P1 from 1 → 4+).
- **Effort estimate:** 1 sprint — depends on FR-1 or FR-2.
### FR-10 · Public referral / "X is also using Waggle" social loop [LOW]
- **Concrete trigger:** P3 (Sarah, marketing — social-graph native), P9 (Priya, dev — peer adoption), P10 (Tomás, agent-builder community) — three personas with social-proof addiction wired in already from competitors.
- **Surface:** Lightweight "share workspace template" + "X teammates also use this skill" surfaces — opt-in.
- **Cells closed:** dim 5 (tribe) for P3, P9, P10 (+3).
- **Effort estimate:** 1.5 sprints — opt-in privacy framing essential.
---
## Anti-patterns rejected (per workflow-reality-check)
These were considered and REJECTED because they don't clear the epistemic gate (no concrete persona-trigger):
- "Add Outlook integration" — no persona named Outlook as their actual work surface. P6 mentioned Teams/Excel, not Outlook specifically. If a real Microsoft-shop customer trigger appears, revisit.
- "iOS native app" — no persona currently needs the iOS surface to clear their JTBD (P1 uses iPad browser — solved by FR-1 browser ext). When a persona's primary workflow is iOS-app-only, promote.
- "Discord bot" — no current persona named Discord as their work channel. Adjacent to FR-2's Telegram but Discord-specific isn't justified.
- "Voice-everywhere" beyond VoiceApp — no persona needs voice as a primary modality across all surfaces.
- "Native Linear/Jira integration" — P9 uses Linear, but the value-prop hook is the persona switcher producing PR-ready ADR drafts that paste-into-Linear; native integration is a downstream enhancement after the synthesis flow proves out.
## Summary — path to honest 10/10
| Step | Cells closed | Avg score after |
|---|---|---|
| Baseline | — | 5.0 |
| **Iter-1 F1 (shipped)** — new-user empty-state hook | dim 3 for P1, P2, P3, P5, P7 (+5) | ~5.5 |
| FR-4 (memory trophy in StatusBar — 0.5 sprint) | +5 | ~6.0 |
| FR-5 (sample workspace import — 1 sprint) | +7 | ~6.7 |
| FR-1 (browser companion — 1.5 sprints) | +9 | ~7.6 |
| FR-2 (Telegram digest — 1 sprint) | +4 | ~8.0 |
| FR-3 (public skill registry — 2 sprints) | +6 | ~8.6 |
| FR-6 (xlsx — 2.5 sprints) | +1 for P6, persona movement | ~8.8 |
| FR-9 + FR-10 — polish loops | +6 | ~9.4 |
| FR-7 self-hosted — closes enterprise gaps | sovereign cells | ~9.7 |
Honest 10/10 across all 10 personas requires shipping at least FR-1, FR-2, FR-3, FR-4, FR-5. That's ~7 sprints of net-new product work — not surgical-UI patches. Iter-1 alone (F1) ships a measurable but small lift.