Skip to content

Proposal: stateless, instruction-only host mode for hosted/multi-tenant runtimes #3061

Open

Description

@m-check1B

Summary

Proposal: a stateless, instruction-only host mode for agent runtimes that serve gstack skills to many users. In those runtimes there is no gstack install, no ~/.gstack state root, and no local helper binaries. Each user's data has to stay in the runtime's own tenant-scoped storage.

Today a host config can suppress resolvers (PREAMBLE, learnings, aside, brain cache). But many skill bodies still instruct the agent to read and write $GSTACK_STATE_ROOT/projects/..., call bin/gstack-* helpers, log telemetry, or use the Aside agent. On a hosted runtime with file tools, that would put user documents into untracked home-directory state.

Measurements (v1.91.31.0, rendered with a custom render-only host that suppresses those resolvers)

Fenced steps that still use gstack state, helpers or telemetry, plus prose references:

skill coupled steps prose refs
office-hours 24 14
plan-ceo-review 7 9
plan-eng-review 5 6
retro 6 7
spec 7 3

Only investigate stays complete once those steps are removed. To ship office-hours, we maintain a downstream overlay: a reviewed replacement for each affected section, pinned to the upstream section's SHA-256 so drift fails the build. That works, but every overlay is a fork of your text.

Proposal

  1. A host capability, e.g. capabilities.state: 'none'. Under it, resolvers that touch state or helpers render a host-provided hook instead of shell steps.

  2. A few named hooks, so hosts map one concept instead of rewriting prose:

    • {{ARTIFACT_SAVE:<kind>}} / {{ARTIFACT_FIND:<kind>}} (design docs, plans, reviews, retros)
    • {{WEB_RESEARCH}}
    • {{SECRET_SCAN}} before anything leaves the user's space
    • {{USER_PREF:<key>}} (e.g. founder-resources opt-out)

    The claude host keeps today's exact output.

  3. A generator check: a state: 'none' render fails if it still contains ~/.gstack, $GSTACK_, bin/gstack-* or --event-type.

The gbrain resolvers already work this way (GBRAIN_CONTEXT_LOAD / GBRAIN_SAVE_RESULTS are concepts a host can map), so this generalizes an existing pattern.

We're happy to send a PR, starting with office-hours plus the generator check, if this direction works for you.

Activity

  1. capy-ai commented on Oct 11, 2026

    @capy-ai
    Contributor

    Thanks @m-check1B for the idea. In the Oct 11 triage we grouped the open feature requests by theme so related asks get built together instead of one at a time. This one is part of the New hosts theme in TODOS.md (https://github.com/garrytan/gstack/blob/50d020ad9/TODOS.md#L54-L69), tracked as a whole in #3137. Closing it here so the open list stays actionable; it isn't rejected, and the theme credits every linked reporter when it's picked up.

  2. added
    parkedNot fixed yet, not rejected: stays open; a comment says where it is tracked and what fixes it
    on Oct 25, 2026
  3. capy-ai commented on Oct 25, 2026

    @capy-ai
    Contributor

    Reopened under the parked label: this is tracked in the New hosts theme in TODOS.md and tracking issue #3137 (https://github.com/garrytan/gstack/blob/main/TODOS.md#p3-feature-themes-from-the-wave-9-triage-filed-2026-10-11), and what fixes it is the stateless, instruction-only host mode (requirements recorded under "parked in Wave 9" in TODOS.md). Closed-but-tracked read as closed, so parked issues now stay open until they ship, are duplicates, or are declined (https://github.com/garrytan/gstack/blob/main/docs/triage.md).

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

    parkedNot fixed yet, not rejected: stays open; a comment says where it is tracked and what fixes it

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions