Skip to content

Story Mode: provider-neutral Local / Cloud / Hybrid routing with Ollama connections #2106

Description

@BryanHarrisScripts

Developer Brief

Objective

Generalize the current Cloud Story Mode settings into one provider-neutral Story Mode surface with three PlotPickle execution policies:

[L] LOCAL
[C] CLOUD
[H] HYBRID

Ollama should be represented as a provider family with distinct local and cloud connection routes behind those policies. Local / Cloud / Hybrid are PlotPickle execution modes, not Ollama product modes.

This is a focused settings/routing clarification. Reuse the existing provider/capability routing architecture and current Cloud Story Mode behavior. Do not create a second provider system, a new orchestration engine, or duplicated settings pages.


Product decision

Story Mode is the user-facing concept

The parent surface should become:

SETTINGS / STORY MODE

rather than making Ollama itself the product-level mode.

The user chooses one of three PlotPickle policies:

  • LOCAL — use enabled local-capable providers/runtimes.
  • CLOUD — use explicitly enabled/consented cloud connections.
  • HYBRID — allow both Local and Cloud routes according to capability, availability and routing preference.

Ollama remains replaceable infrastructure behind that boundary.


Target settings structure

Story Mode landing surface

Use the existing Matrix / BBS keyboard language:

[L] LOCAL   - Local-first Story compute and generation
[C] CLOUD   - Explicit cloud Story connections
[H] HYBRID  - Route across Local and Cloud capabilities

Do not build three separate application shells. Reuse the current Cloud Story Mode surface as the Cloud destination and add only the minimum Local/Hybrid equivalents needed.

LOCAL

Expose local Story capabilities and connections.

Initial connection of interest:

[O] Ollama - Local LLM/runtime for supported Writing and Agent compute

Where existing architecture supports it, Local may also surface other established local-capable runtimes such as local ComfyUI without creating a new provider registry.

Ollama Local configuration may expose only useful operational facts already available or safely detectable, such as:

  • availability / connection state;
  • local endpoint;
  • installed/available models where existing APIs permit;
  • model capability/context information where reliable;
  • relevant hardware/runtime readiness.

Do not require Ollama for Local Story Mode. Ollama is one local connection, not the definition of Local.

CLOUD

Preserve the current Cloud Story Mode capability model and consent boundary.

Existing cloud connections remain valid, including where supported:

  • OpenAI;
  • remote ComfyUI;
  • Gemini;
  • MiniMax;
  • other existing reviewed cloud providers.

Add Ollama Cloud as a cloud connection for supported Writing / Agent compute where the existing routing/capability contracts can represent it truthfully.

The connection should be described as Ollama Cloud, not as a separate “Ollama Cloud Story Mode.”

Cloud routes remain explicit and consented. Paid/remote routes must not be silently activated.

HYBRID

Hybrid is a routing policy, not another provider connection.

Do not create “Ollama Hybrid.” Hybrid consumes whatever Local and Cloud connections are already enabled.

Initial Hybrid UI should remain small. It may expose a bounded routing preference such as:

Prefer Local
Best Available
Prefer Cloud

along with existing consent/fallback behavior where already supported.

Hybrid must reuse the canonical routing/capability resolver rather than adding Hybrid-specific provider selection logic.


Status model

Support a compact derived Story Mode status such as:

LOCAL: READY
CLOUD: READY
HYBRID: READY
MODE: LOCAL

These are derived operational states, not manually configured flags.

Suggested semantics:

  • LOCAL: READY — at least one usable enabled local route satisfies the relevant Story capability contract.
  • CLOUD: READY — at least one usable, consented cloud route is available.
  • HYBRID: READY — both usable Local and Cloud routes are available to the routing policy.
  • MODE — the active PlotPickle Story Mode policy: LOCAL / CLOUD / HYBRID.

Do not imply a provider is usable merely because it is installed or listed. Readiness should follow existing capability/availability truthfulness.


Ollama architecture boundary

Recent Ollama desktop releases expose Apps / ollama launch integrations for external coding and agent clients such as Claude Code, Codex CLI, OpenCode, Pi, Cline, Qwen Code, DeepSeek Harness and others.

That is useful evidence that Ollama increasingly acts as a model/runtime socket for interchangeable external harnesses, but this issue does not turn those applications into Story Mode providers or new PlotPickle product Agents.

Keep the two lanes separate:

PlotPickle product Agent / Story task
→ PlotPickle routing + capability resolution
→ Local / Cloud provider connection
→ Ollama or other selected runtime/model

versus developer tooling:

Pi / Cline / Codex / Claude Code / other developer harness
→ Ollama or another model backend
→ PlotPickle repository work

Developer agents remain governed by the repository development contract and are not part of Story Mode simply because Ollama can launch them.


Architectural rule

Do not introduce “Multiplexer” as a new PlotPickle subsystem for this work.

The useful behavior is already Routing / Capability Resolution:

Story task requirement
→ capability resolver
→ active Story Mode policy
→ eligible Local / Cloud route
→ provider/runtime/model

The provider and model remain replaceable.

PlotPickle owns:

  • Story Mode policy;
  • capability requirements;
  • routing/selection policy;
  • consent boundaries;
  • Story/PPF authority.

Providers such as Ollama, OpenAI, Gemini, MiniMax or ComfyUI supply capabilities but do not become creative authority.


Preserve authority boundaries

This settings work must not alter canonical creative ownership.

Maintain the distinction:

Model ≠ Agent ≠ Harness ≠ Provider ≠ PPF

PPF / Human-approved PlotPickle state remains canonical creative truth.

Story Mode only decides where eligible compute executes. It must not decide what becomes canon.

This also aligns with:

Do not duplicate any of those responsibilities here.


Reuse boundary

Before adding new schemas or registries, inventory and reuse current:

  • Cloud Story Mode settings surface;
  • Local AI/runtime settings;
  • AI provider/source registry;
  • capability routing/resolution;
  • Agent compute defaults/overrides;
  • provider diagnostics/readiness;
  • local/cloud consent controls;
  • Ollama detection/configuration already present in PlotPickle;
  • existing ComfyUI local/remote distinctions.

Prefer adapting the current surfaces/contracts over creating new ones.


Initial implementation scope

In scope:

  • rename/generalize the parent concept from Cloud Story Mode to Story Mode;
  • Local / Cloud / Hybrid keyboard directory;
  • preserve current Cloud capabilities/connections;
  • add Ollama as a Local connection where supported by existing local runtime architecture;
  • add Ollama Cloud as a Cloud connection where capability truth can be represented correctly;
  • small Hybrid routing-policy surface using the existing resolver;
  • derived LOCAL / CLOUD / HYBRID readiness and active MODE status;
  • keyboard-first Matrix/BBS consistency;
  • focused regression coverage for routing-policy selection and readiness derivation.

Out of scope:

  • building a new provider registry;
  • creating an Ollama-specific Story architecture;
  • creating “Ollama Hybrid”;
  • duplicating Local/Cloud provider settings across three independent pages;
  • automatically enabling paid cloud routes;
  • auto-installing or auto-launching external Ollama Apps;
  • adding Claude Code, Codex, Pi, Cline, Hermes, OpenClaw, etc. as Story Mode Agents merely because Ollama can launch them;
  • replacing existing Agent compute/routing contracts;
  • changing PPF/canon authority;
  • redesigning unrelated Settings surfaces.

Acceptance criteria

  1. The user-facing parent concept is Story Mode, not Ollama Story Mode.
  2. Story Mode exposes LOCAL / CLOUD / HYBRID as PlotPickle execution policies.
  3. Existing Cloud Story Mode behavior and consent boundaries are preserved under CLOUD.
  4. Ollama can appear as an eligible Local connection without becoming mandatory for Local Story Mode.
  5. Ollama Cloud can appear as a Cloud connection where supported, without becoming its own Story Mode.
  6. HYBRID reuses enabled Local + Cloud connections and the canonical capability resolver; no separate Hybrid provider layer exists.
  7. No “Ollama Hybrid” connection is created.
  8. LOCAL / CLOUD / HYBRID readiness values are derived from actual usable routes/capabilities rather than manually set.
  9. Active MODE is visible and reports LOCAL / CLOUD / HYBRID.
  10. Cloud routes continue to require explicit connection/consent where current policy requires it.
  11. External Ollama Apps / coding harnesses are not silently promoted into PlotPickle product Agents or Story providers.
  12. Existing PPF, Provider-neutral Universal Creative Transaction Contract #2035 transaction, Pre-production Production Object Layer: Story → Frames progressive authoring architecture #2092 Production Object, Provider-neutral Director Spec Compiler #2064 compilation and Agent authority boundaries remain unchanged.
  13. No parallel provider registry, routing engine or duplicated Story settings architecture is introduced.
  14. Implementation remains small, provider-neutral and compatible with future Local and Cloud providers beyond Ollama.

Implementation discipline

Keep this conservative. First inventory the current Cloud Story Mode, Local AI, provider routing and Ollama boundaries. Reuse existing contracts and UI primitives. Add only the minimum missing Story Mode policy layer and Ollama connection representations needed to express the agreed architecture.

The goal is not to make Ollama the center of PlotPickle. The goal is to let PlotPickle use Ollama cleanly as one replaceable Local/Cloud provider family behind a stable Story Mode boundary.

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

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions