# Stuđiô — Prototype B2 · v0.7.0

Local tasks, reviewed plans, recoverable focus timers, Gemini assistance, and optional usage-based memory. This release adds a minimal, opt-in **Website time today** card with local foreground-website estimates. Existing Gemini dropdowns, guided planning, learned memory, and review fixes are retained.

Stuđiô's core direction is understanding and managing time spent on digital devices alongside study and other work. **This build estimates foreground website time in this browser, not whole-device screen time or other app usage.** Timer and website records are separate; neither proves attention or productivity. Website data is excluded from Gemini and learned memory.

## Install or upgrade

1. For an existing installation, export a backup and close the panel.
2. Extract this ZIP and replace files in your existing unpacked extension folder.
3. Open `chrome://extensions` and click **Reload** for Stuđiô. Do not remove the extension first.
4. Reopen the panel and confirm Settings shows **v0.7.0**.

For a new installation: enable Developer mode, choose **Load unpacked**, select `Studio-Prototype-B2-Chrome-Extension`, and click its toolbar icon. Chrome 116 or newer is required. No build step or third-party runtime packages are needed.

Tasks, timers, Custom Instructions, and capture-toggle choices are preserved. App backup schema remains 7; older backups remain importable. Learned memory retains its version-1 store. Tracking has a separate version-1 local store and adds only optional tabs/idle permissions. It needs no Gemini or new required permissions. A backup without learned memory restores that store empty.

Start with [TESTING.md](TESTING.md) for a short walkthrough.

## Minimal website-time tracking

On Today or Settings, choose **Website time today → Enable website tracking** and approve optional tab/idle access. Tracking starts only after consent; denying access leaves the feature off. It works without a Gemini connection and while the panel is closed, as long as the browser runs.

The tracker samples the active HTTP(S) tab in the focused, non-minimized normal browser window, plus tab/focus/idle events and a one-minute heartbeat. Private tabs/windows and browser-internal/file pages are excluded. It pauses when the device reports idle/locked; the idle threshold is 60 seconds. Return to **Refresh totals** to see today's total and top five hostnames. The displayed card is a snapshot, not a live counter.

Only hostnames (including subdomains), daily milliseconds, and a recovery cursor are saved locally. No full URLs, paths, queries, titles, page content, screenshots, or historical visits are saved. Keep up to seven local-calendar days, pruned on the next tracker check; at most 100 hostnames per day, with excess sites contributing only to the total. No new remote hosts or content scripts are used.

**Limits:** this is an estimate, not a full screen-time monitor. Passive reading/video can be undercounted after idle detection; browser UI/side-panel use can remain attributed to the active site. Gaps over 90 seconds and new browser sessions are not backfilled. Short gaps cannot always be distinguished from ordinary inactivity. Pausing drops the unfinished interval (normally under a minute) and keeps totals. **Clear tracking data** requires confirmation, deletes all website totals, and pauses tracking; it cannot be undone. Optional permission grants remain available until revoked in Chrome's extension settings.

Website data never enters tasks, timer records, AI prompts, learning evidence, diagnostics, or app backups. Restoring a backup pauses tracking but keeps its existing local totals; **Erase local data** also clears them. AI advice, native-app tracking, detailed history, categorization, and cross-device tracking are outside this minimal release.

Implementation follows Chrome's [optional permissions](https://developer.chrome.com/docs/extensions/reference/api/permissions), [tabs](https://developer.chrome.com/docs/extensions/reference/api/tabs), [idle detection](https://developer.chrome.com/docs/extensions/reference/api/idle), and [alarm lifecycle](https://developer.chrome.com/docs/extensions/reference/api/alarms) documentation.

## Planning assistance on Today

**Guide me · I make the plan** is the default for this new feature. It provides local questions about your outcome, concrete action, estimate, and commitments. It works without Gemini.

Expand **Write my task or focus block**. Choose a task or scheduled block; write your own title and minutes, and choose a start time for a block. A block can use an existing task. Saving checks overlaps, past times, a running timer, and the existing task's deadline. Nothing starts a timer.

Optional **Gemini brainstorming** provides questions, planning steps, and ideas based on what you write. Its output never fills or submits the manual form.

The selector also offers **Suggest my next step**: up to three options using a fresh snapshot of up to 20 active tasks, short notes, upcoming blocks, and timer totals. Existing-task suggestions use verified IDs and actual titles. With no active tasks, relevant saved context may support an idea; otherwise Gemini is instructed to ask for a goal. You review focus setup or write a new task manually.

The mode choice persists and makes no API call. This is a choice-preserving workflow, not a medical intervention or a claim to prevent cognitive harm. It does not disable other manual, Capture, or Plan workflows.

## Capture and Plan

**Allow multiple focus blocks** starts on for **I'm just starting out**, off for **I have my own system**, and preserves later overrides. It appears in Smart Capture and Settings.

When on, **Interpret & review** can draft up to six tasks and twelve blocks from one note. Gemini chooses grouping, lengths, and proposed times; multiple blocks are allowed, not required. Review/edit task details and block labels, lengths, and local times; uncheck unwanted blocks. One confirmation saves the selection together.

Selected blocks must be 5–180 whole minutes, with at most 480 minutes per task. Saving rechecks deadlines, work hours, busy times, buffers, and changes since review opened. Missing times require editing or deselection. Each task's estimate becomes its selected block total. Timers start only when chosen.

When off, capture returns one task draft. Without Gemini it stays manual. **Plan → Propose schedule** remains explicit and deterministic, splitting tasks into focus-sized blocks in a reversible proposal. Gemini can explain that proposal, not apply it.

Capture creates new work; it cannot retrieve your existing plan. Use the planning-assistance card for context-aware help. The flat task/block schema from v0.5.4 remains, with all limits enforced locally.

## Custom Instructions

In Settings, save up to 10,000 characters. **Use with Gemini** defaults on for new instructions; saved off choices remain off. Saving/editing is local; unsubmitted drafts are not sent.

Enabled instructions accompany capture, planning help, explanations, reflections, and separately opted-in learning updates—not connection/model tests. **The automatic updater cannot rewrite Custom Instructions.** Longer instructions increase every request's size.

Turning use off keeps the text. Clearing asks for confirmation. Neither recalls requests already sent or removes older responses, backups, or debug exports. The ordinary scheduler and timer use structured Settings, not free-text instructions.

## Saved memory and learning

Open **Settings → Saved memory**. Entries have editable text, source, evidence, status, topic, and optional expiry.

| Control/status | Meaning |
| --- | --- |
| Add / Edit | Explicit guidance saved locally; no API call. |
| Use saved memory in assistance | On by default; includes relevant active entries in requested assistance. |
| Learn from my activity | Off by default; separately authorizes background updates. |
| Explicit / Confirmed | User-written or user-confirmed; eligible for relevant requests. |
| Supported observation | Model-classified observation with at least 3 distinct events across 2 local dates. |
| Tentative inference | Excluded from assistance until confirmed. |
| Conflict | Excluded and kept for review; cannot overwrite explicit/confirmed guidance. |

Learning collects only new eligible activity after opt-in: saved tasks, task edits, reviewed block-duration changes, task completions, recorded timer sessions, and explicitly submitted learning notes. Historic activity, old feedback, diagnostics, and planning-chat text are not imported.

An update sends at most 40 evidence events, existing saved-memory texts, and enabled Custom Instructions. Gemini proposes at most six create/revise/reinforce/conflict/ignore operations. Local validation checks IDs, targets, sizes, expiry, and protected entries. It writes only the separate memory store—not tasks, schedules, timers, settings, or Custom Instructions. It does not train model weights.

The observation threshold is **not verification that a statement is true**. Gemini can misinterpret evidence or propose contradictions. Inferred preferences remain tentative regardless of event count. Inspect **Why this is saved** and correct, confirm, or forget entries.

### Timing and recovery

- One automatic batch per local day near the configured workday end, or catch-up after reopening when evidence is overdue.
- At most three memory requests per local day, including manual refreshes, failures, and interrupted reservations. A manual refresh also uses that day's automatic slot.
- No new evidence means no API call. Automatic updates defer during a running timer or interactive Gemini request.
- **Refresh memory now** runs a pending batch when allowed. Failures retain evidence with a 15-minute backoff. No immediate automatic retry; the next automatic attempt is on a later eligible day.
- Job state/quota are saved before the request. An interrupted job has a 75-second lease and can be recovered within the budget.
- Edits, forget, pause, clear, and restore invalidate stale in-flight results.
- Chrome must be able to run the extension. It cannot run while closed or wake a sleeping device. This is local scheduling, not Google's server-side background execution.

Limits: 100 entries, 500 evidence events, 40 recent changes. Old evidence can age out. Assistance selects by topic/word matching, not semantic search: up to eight active entries and 4,000 text characters. Expired, tentative, and conflict entries are excluded. Reflection selects only explicit/confirmed preference memories, plus enabled Custom Instructions.

### Review, forgetting, and backups

Recent changes offer undo when no newer edit intervenes. **Forget** is not undoable: it purges the entry, its memory revisions, and their supporting learning evidence. Non-text fingerprints suppress exact regeneration; excluded old evidence is not replayed. A similar idea could still be inferred from genuinely new evidence.

Original tasks/timers, other entries, exports, opted-in debug copies, and provider-held data are separate. Forget does not remove those. Turn debug text off or clear diagnostics to remove local debug copies.

Pausing learning deletes pending evidence and keeps saved entries/supporting history; re-enabling starts with future activity. **Clear learned data** clears this memory store and pauses learning, retaining quota/backoff counters. Custom Instructions and app tasks remain.

Backups include saved memories and evidence, not updater jobs, quota, memory undo history, context traces, diagnostics, or credentials. Restore replaces app and memory together, pauses learning, and retains this device's quota/backoff. Do not save a v0.6.0 backup with an older release; it cannot preserve the new store.

## Gemini model options

Open **Settings → Gemini connection** (also available on Today). Setup now has a **Gemini model** dropdown. Once connected, the dropdown stays visible beside the active-model status; it is no longer hidden in a disclosure. Choose a model, then **Use & test model** to reuse the current key for one small test. Selection alone makes no request or saved change. Failure keeps the previous working model. Models are never switched automatically.

Choose **Custom model ID…** to reveal an editable ID field in either setup or the connected card. Switching the dropdown does not rebuild the key form or clear a pasted key. Draft model choices survive unrelated renders; the active-model label changes only after a successful test. A custom ID may require billing or be unavailable to the project.

| Model ID | Catalog role |
| --- | --- |
| `gemini-3.1-flash-lite` | Unchanged default |
| `gemini-3.5-flash-lite` | Newer Flash-Lite |
| `gemini-3.8-flash` | Latest listed Flash |
| `gemini-3.7-flash` | Flash alternative |
| `gemini-3.6-flash` | Earlier Flash |
| `gemini-2.5-flash` | 2.5 Flash |
| `gemini-2.5-flash-lite` | 2.5 Flash-Lite |

Checked 2026-09-10 against Google's [standard text pricing](https://ai.google.dev/gemini-api/docs/pricing) and [Interactions supported models](https://ai.google.dev/gemini-api/docs/interactions-overview). Availability/quota depend on the project. A free-tier listing does not guarantee access or free usage on a billing-enabled project. A custom model ID remains available in the connection form.

## Privacy and diagnostics

No Stuđiô server or analytics SDK. Required access remains storage, alarms, sidePanel, and the Gemini host. Optional tabs/idle access is requested only when enabling website tracking. There is no history API, website host access, OS monitoring, notifications, or calendar access.

Keys use Chrome session storage unless **Remember on this device** is enabled. They are sent in the `x-goog-api-key` header, never a URL, and excluded as credentials from backups. Every request uses `store: false`; other provider data terms still apply. Free-tier content may be used to improve Google's products. Local app data/backups are not encrypted. See [PRIVACY.md](PRIVACY.md).

**Settings → Gemini diagnostics → Export debug report** downloads the last 20 attempts without an API call. Version 4 identifies capture, planning help, memory updates, model, stage, HTTP status, formats, counts, and errors.

**Include prompt and custom instructions in debug reports** is off by default. When on, future reports may contain prompts (including learning evidence), enabled instructions, selected memories, and provider error messages. Keys are redacted and truncation is marked. Complete provider bodies, headers, and model output are excluded. Turning it off purges debug text and prevents in-flight attempts from restoring it. Old exported files are unaffected.

Reproduce a Gemini problem once on v0.7.0, export the JSON, and attach it to the development chat. Enable debug text beforehand only if you want to share that content. Older metadata-only attempts cannot gain missing text retroactively. For tracking issues, describe the tab/window/idle sequence and expected versus shown time; Gemini diagnostics deliberately contain no browsing data.

## Verification and numbering

With Node.js 20 or newer:

```bash
npm run verify
```

All 191 automated tests and the package audit pass. Tests exercise logic and app/background handlers with simulated DOM/Chrome storage and mocked Gemini responses. Tracking checks include permission denial, foreground/idle/private-tab boundaries, midnight, retention, serialization, browser/worker restarts, clearing, and AI/backup exclusion. Existing model-picker and modal regressions remain covered. No Gemini quota was used. Real Chrome permissions, event delivery, and visual behavior still require the manual walkthrough.

**B2** is the prototype milestone; **0.7.0** introduces minimal website tracking. Patch releases use `0.7.x`; substantial features increment the minor version. App, package, and manifest versions are audited together. See [CHANGELOG.md](CHANGELOG.md).

Deferred: whole-device/native-app and cross-device tracking, browsing-based AI advice, automatic focus/rest cycling, calendar sync, autonomous rescheduling, mobile apps, on-device models, paid accounts, and cloud sync.
