Skip to content

Define nanodot product design and MVP scope #1

Description

@hsliuustc0106

Goal

Review the nanodot product design and agree on a small, testable MVP before implementation expands.

The README describes nanodot as a minimal, open-source AI assistant with persistent memory and proactive task execution. This issue turns that direction into a reviewable product scope.

The workflow and UX below are proposals for discussion. Creating this issue does not settle the MVP choice or approve every proposed feature.

Confirmed direction

  • Build a minimal, open-source personal agent from scratch in Python to understand its architecture.
  • Keep memory, task state, and execution local-first and inspectable.
  • Start with a native runner. Consider an adapter later; DSH and openJiuwen are candidates, with neither selected.
  • Support ongoing work while the host is awake and the runner is available. A sleeping or powered-off host cannot continue execution.
  • Keep the inference decision open: API-backed, local, or a supported combination.

Proposed MVP: a task inbox with one bounded workflow

The suggested first workflow is a read-only watch on one explicitly selected GitHub pull request.

Example user intent: “Watch this PR and tell me when the required checks pass, or when something needs my attention.”

  1. Capture the task and show its exact target, purpose, check cadence, allowed actions, notification conditions, and stopping conditions.
  2. Take an initial snapshot and persist the task locally.
  3. Check again while the runner is available.
  4. Report meaningful changes with links and evidence. Distinguish pending checks, failures, unavailable data, and a confirmed terminal outcome.
  5. Stop on the agreed success condition, PR merge/closure, user cancellation, or an explicitly configured end condition. Surface lost access as a blocker.

This proposal is read-only: commenting, code changes, reruns, merging, and other external writes would need separate scope and approval.

A bounded paper-research task is an alternative first workflow. Choose one for the first end-to-end build. Slack integration can follow after the local task loop is proven.

Proposed user experience

Keep the interface small. It should let the user answer four questions:

  • Tasks: What is nanodot doing, what is it waiting for, and when will it stop? Show status, latest result, next check, blockers, and pause/resume/cancel controls.
  • Memory: What has it retained and why? Make retained facts visible, show their source where available, and allow correction or deletion. Avoid treating tentative model inferences as confirmed facts.
  • Activity: What actually ran? Show concise, timestamped checks, relevant evidence, failures, retries, and notifications without exposing secrets.
  • Approvals: What action needs permission? Show the proposed action, target, data being shared, and expected effect. Approval must apply to that action and scope; silence is not approval.

Decide whether the first interface is CLI/TUI or a small local web UI. A full chat interface is not a prerequisite for validating the task loop.

Reliability and safety requirements to review

  • Persist task configuration and progress so a restart does not lose the task.
  • Define recovery after sleep, restart, and interrupted checks. On waking, reconcile current state instead of replaying every missed notification.
  • Prevent overlapping runs of the same task and duplicate notifications for an unchanged event.
  • Tie PR check results to the current commit; passing checks on an older commit must not count as success for a newer one.
  • Define bounded retries/backoff for network failures, rate limits, and temporary errors. Make prolonged failures visible.
  • Preserve explicit pause/cancel state across restarts and stop scheduling completed tasks.
  • Keep external content as data, not authority to expand a task or grant permissions.
  • Separate local-first storage/execution from inference privacy. If an API model is used, clearly identify what context leaves the host.
  • Keep credentials out of task text, memory, activity logs, and generated summaries.

These are review requirements, not claims about existing implementation.

Open decisions

Status as of 2026-09-30 — resolutions recorded in the decision-record comment.

  1. First workflow: PR watch or paper research? What concrete user outcome defines success? — Decided 2026-09-30: read-only GitHub PR watch.
  2. First interface: CLI/TUI or local web UI? — Decided 2026-09-30: CLI/TUI first; local web UI deferred, core stays interface-agnostic.
  3. Inference: API, local, or both? What is the minimum provider/model contract? — Decided 2026-09-30: API model first, behind a thin provider interface; the context-leaves-host boundary must be explicit.
  4. Memory: what deserves durable retention, what needs explicit confirmation, and what is the retention/deletion policy? — Under dedicated design; confirmation-gated write path and provenance agreed, sub-decisions still open.
  5. Task behavior: default cadence, retry policy, notification rules, and required stopping conditions? — Defaults proposed (poll ~5 min, backoff to 60 min), pending confirmation; notification channel still open.
  6. Permissions: what is allowed by default, what needs approval, and how is approval recorded and invalidated when scope changes? — Decided 2026-09-30: ZCode-style — named modes with readonly default, scoped per-action approval grants, silence is never approval.
  7. Adapter timing: what real limitation would justify adding DSH or openJiuwen after the native runner? — Decided 2026-09-30: native runner first, architecture reserves an adapter seam; trigger is execution beyond an awake host or multi-machine dispatch.

Review acceptance checklist

  • Agree on the primary user need and choose exactly one MVP workflow
  • Document the happy path, blocked path, and stopping conditions
  • Agree on the minimal task, memory, activity, and approval controls
  • Resolve the first interface and inference approach
  • Define local storage, privacy boundaries, credential handling, and memory correction/deletion
  • Define sleep/restart recovery, retry/backoff, concurrency, and notification deduplication
  • Record deferred features and the trigger for considering an adapter
  • Turn the approved scope into small implementation issues with testable acceptance criteria (Scaffold: Python package with core/ports layout, tests, and CI #2–End-to-end PR-watch validation suite (all fakes) #14; index in the implementation breakdown comment)

Suggested end-to-end validation if PR watch is selected

  • Create a watch, inspect its saved scope, and observe an initial result.
  • Simulate pending → failing → passing checks on the current commit.
  • Push a new commit and verify old results cannot satisfy the new check state.
  • Restart or suspend/resume the host and verify recovery without duplicate notifications.
  • Exercise temporary network failure, rate limiting, and lost authorization.
  • Verify pause/resume/cancel and terminal stop behavior.
  • Verify no external write occurs and no secret appears in retained data or logs.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions