Reusable control-surface workflow assets for ASK projects.
Operating model: adversarial collaboration — ASK as authorization apex and relay, a non-writing advisor surface, and a repo-attached execution surface. Currently a GPT advisor and Claude Code as executor.
This repo contains both the live operating files for control-surface itself and reusable workflow artifacts for downstream ASK projects, including the upstream instantiation phase before a target repo exists.
To start a new ASK project from this protocol repo, beginning from zero:
-
Create a new GitHub repo for the target ASK project.
Repo pattern:
apexSolarKiss/<project-name>Example:
apexSolarKiss/new-working-example-ASK -
Clone the new repo to the local ASK workspace.
-
Create the repo-external project folder beside the repo:
<project-name>-EXTERNAL/ <project-name>_grounding-note.md # canonical durable context (root) scratch/ # _vN snapshots + iteration intent-carriers/ # standing + invocable carrier canonicals (unversioned) ZZZ/ # frozen _vN snapshots + retired / historical carrier lineage intent-INbox/ # inbound routed handoffs, under the filename lifecycle _STATE.md # structural inbox state — not routed intentRoot is the default durable-context layer of an
*-EXTERNALsurface; named semantic or structural layers (scratch/,intent-carriers/,intent-INbox/) override it only where explicitly defined.The two intent planes are not interchangeable.
intent-carriers/holds carriers the project invokes or deploys — adapted prompts, deployed instruction canonicals — under canonical lineage: the unversioned current canonical mirrors the latest accepted_vN, andZZZ/holds the frozen_vNsnapshots plus retired or historical carrier variants. A prior_vNis historical, not superseded — ordinary version succession is revision, and carrier families are revised, retired, or replaced. Existing legacy filenames containingSUPERSEDEDare preserved unchanged and acquire no prospective routed-instance meaning.intent-INbox/holds addressed routed instances arriving from another operating surface, each under the filename lifecycle (-TBI→-ingested→ a terminal disposition suffix, or-supersededAbefore ingestion). That specialization is the fresh routed handoff's; terminal-TBIis an orthogonal feed-obligation overlay that may sit above any artifact, and for anything not awaiting first ingestion it is simply removed. Prospective supersession belongs to that plane only. A standing carrier never takes a handoff lifecycle suffix — though it may carry the overlay; a routed instance never becomes a carrier by being ingested.intent-INbox/_STATE.mdis structural, not routed intent: no lifecycle suffix, excluded from queue counts, updated in place, and read immediately before ingestion. A structural artifact is exempt only where the surface's structural contract names it — a leading_alone confers no exemption.This tree is the target convention. A surface that has not yet recorded its cutover keeps its current mapped intake path, and its
_INDEXremains the operative locator until then; the absence ofintent-INbox/_STATE.mdbefore cutover is not nonconformance. -
Instantiate the grounding note from
templates/grounding-note.template.md. The canonical durable-context note lives at the*-EXTERNALroot; its versioned snapshots live inscratch/:<project-name>-EXTERNAL/<project-name>_grounding-note.md # canonical (root) <project-name>-EXTERNAL/scratch/<project-name>_grounding-note_v1.mdThe canonical unversioned mirror should equal v1, and both carry their version in the first H1 as
// v1. -
Copy and adapt the repo-local starter files into the new repo:
templates/AGENTS.template.md → AGENTS.md templates/architecture.template.md → docs/architecture.md templates/CLAUDE.template.md → CLAUDE.mdFor a new worked example, treat
docs/architecture.mdas default rather than optional. -
Create a minimal
README.mdfor the new repo if one does not already exist. -
Use
prompts/claude-code-initial-prompt.mdto attach Claude Code to the new repo and begin bootstrap. -
(Optional) When an external advisor surface is used:
- Create the source index from
templates/_INDEX-project.template.mdas<project-name>-EXTERNAL/_INDEX-<project-name>.md(or_INDEX-<project-name>-<role>.mdper advisor role). It is fetched live, not mounted. - Generate the surface bootstrap from
templates/advisor-project-bootstrap.template.mdand mount it as the advisor Project's single standing Source; adapttemplates/advisor-project-instructions.template.md— the thin pre-bootstrap floor — and install it once into the Project Instructions. Placement contract:docs/advisor-project-surface-architecture.md.
- Create the source index from
-
(Optional) When the project will use the advisor / nudge / critique surfaces, adapt the protocol repo's reusable nudge and critique prompts into project-flavored operator-side copies in
<project-name>-EXTERNAL/intent-carriers/— an adapted prompt is an invocable carrier, not a routed handoff, so it never lands inintent-INbox/and never takes a lifecycle suffix:prompts/repo-nudge-prompt.md → <project-name>_repo-nudge-prompt.md prompts/repo-critique-initial-prompt.md → <project-name>_repo-critique-initial-prompt.md prompts/repo-critique-synthesis-prompt.md → <project-name>_repo-critique-synthesis-prompt.md prompts/repo-critique-execution-prompt.md → <project-name>_repo-critique-execution-prompt.mdThe protocol repo's prompts remain canonical reusable sources; the operator-side copies are project-flavored adaptations so the advisor and control surfaces can operate without re-deriving prompt language each time. Adapt only the prompts the project will actually use.
Distinct from this copy-and-adapt flow: a new repo also resolves the shared protocol carrier (
protocol/AGENTS.shared.md) locally into its ownAGENTS.mdbetween theBEGIN/ENDshared markers. The shared core is resolved in place, not copied-and-adapted like a prompt or template starter.System-wide ecology critique prompts are the ecology-level flavor of the reusable critique family. The repo files below remain the canonical reusable sources; ASK invokes one deployed ecology-level operator-carrier family from the ecology surface's
intent-carriers/. They are not adapted into downstream-project operator-side copies:prompts/ecology-critique-initial-prompt.md prompts/ecology-critique-synthesis-prompt.md prompts/ecology-critique-execution-prompt.mdThese are for system-wide critique across
control-surface,method-ASK,design-system-ASK, and relevant downstream repos / grounding notes — not ordinary downstream-project critique. -
Once bootstrap begins, the new repo's
AGENTS.mdgoverns execution.
New projects run the adversarial-collaboration operating model described below.
For deeper context on the three phases (Instantiation → Bootstrap → Operational), see docs/project-instantiation-workflow.md.
ASK projects run an adversarial-collaboration operating model — an ASK-apexed advisor–executor topology:
- ASK is the source-of-intent and authorization apex, the relay across surfaces, and the final adjudicator.
- The advisor surface supplies external challenge, reconstruction, and verification. It holds no repo-write authority and sits outside the execution thread.
- The execution surface plans and performs authorized work in the repo under
AGENTS.md, under single-writer-per-branch discipline.
In the current stack a GPT advisor fills the advisor role and Claude Code fills the execution role. Model identity is operational, not architectural.
The friction at the advisor/executor boundary is deliberate: differently situated adversarial challenge mitigates the risk that hallucination, confabulation, or drift will persist into landed work. The surfaces are correlated, not independent; named canonicals and exact repo state arbitrate factual disagreement, while ASK adjudicates source-of-intent and authorization questions. Much of what this protocol requires — the plan, the structured change summary, the exact scoped diff, the pushed PR — exists so that boundary has something precise to work on.
Direct execution is the bounded variant: ASK drives the executor without an advisor pass where a separate pass would not materially reduce uncertainty. It is a proportional path within the same model, not a separate model.
In short: multi-surface in reasoning, single-writer in mutation, single-apex in authority.
The workflow rules live in a shared protocol core (protocol/AGENTS.shared.md) resolved locally into each repo's own AGENTS.md, plus repo-local AGENTS.md rules — all written agent-agnostically, so they apply to whoever is executing.
Two current working examples anchor the family:
apexSolarKiss/asset-pipeline-ASK— primary pressure surface from which the protocol repo's rules are discovered, and source of upstream workflow-rule evolution. Operated end-to-end under this model; has produced the most advanced liveAGENTS.mdin the family. Template changes absorb only the portions that generalize beyond that repo's domain.apexSolarKiss/urban-observatory— second active working example. Pressures the protocol repo at the source-of-intent recovery, post-bootstrap grounding-note freshness, and architecture-uncertain instantiation surfaces.
ASK project work uses three durable sources of truth, plus two non-durable surfaces that are not interchangeable:
- Repo = project state (artifacts, decisions, current navigation)
AGENTS.md(in-repo) = workflow rules, agent-agnostic, applies to whoever executes- Grounding note (external) = repo-external context: intent, audience, philosophy, foundational premises, durable loose threads
- Per-conversation / task state (current chat, ChatGPT thread history, task lists, in-flight session context) = ephemeral; does not flow into the durable sources
- Private agent memory (Claude Code's auto memory —
MEMORY.mdand its topic files) = persistent, not ephemeral: a non-authoritative, read-mostly operator cache. Never a durable owner, never the home for in-flight tracking. Every mutation is governed byAGENTS.md§Learning Disposition and §Private-Memory Write Gate — classify to a visible owner first, and each write is a separate ASK approval unit.
The split is not just separation of concerns. It is separation by aging rate:
- A doc that tracks state ages fast and must be refreshed often.
- A doc that points to state ages slowly and stays useful across many sessions.
- A rules doc that contains rules only ages slowly.
- A context doc that contains context only ages slowly.
- A doc that mixes rules, context, and state ages at the rate of its fastest-aging contents.
This is the load-bearing rationale for the source-of-truth split. Each source is sized to a single aging rate.
AGENTS.md— repo-local workflow rules that govern execution inside this repoCLAUDE.md— the Claude Code adapter: Claude Code readsCLAUDE.md, notAGENTS.md, so its@AGENTS.mdimport is what delivers the resolved carrier into context. Required for a Claude-operated repo, not a convenience pointerdocs/architecture.md— execution-protocol architecture of this repo and the role model behind it
Live, authoritative carriers of the distributable execution protocol. Consumers resolve the shared block locally — it lands inside their own AGENTS.md (already a required read) — rather than each holding an independent copy.
protocol/AGENTS.shared.md— the distributable shared execution-protocol body, resolved verbatim into each repo's ownAGENTS.mdbetween theBEGIN/ENDshared markersprotocol/manifest.json— normative registry for the protocol carriersprotocol/profiles/— per-profile overlays on the shared bodyprotocol/fragments/standing-upstream-conformance-grant.md— opt-in consumer fragment for a standing upstream-conformance grantprotocol/check.sh— deterministic local validator for the resolved shared block (run locally; not CI)protocol/adapters/— typed, executor-specific adapters providing runtime enforcement for a supported write path of an agent-agnostic shared rule on a given runtime. They do not claim OS-level enforcement over arbitrary Bash, Python, Node, or other subprocess writes; the shared protocol prohibits that circumvention semantically, and sandbox hardening remains a separate out-of-scope capability question. Not shared-protocol text and never inherited into a consumer'sAGENTS.md.protocol/adapters/claude-code/carries the native permission fragment for the private-persistent write gate, a static owner-repo check, a machine-local verifier, and their fixtures — run separately fromcheck.sh, which stays agent-agnostic
docs/method.md— compact bridge pointing toapexSolarKiss/method-ASKas the upstream methodology layer; substantive method articulation now lives inmethod-ASK/docs/method.md
docs/project-instantiation-workflow.md— agent-agnostic workflow doc for the pre-repo instantiation phase before a target ASK repo existsdocs/advisor-project-surface-architecture.md— how an advisor surface is deployed into a hosted Project: the pre-retrieval floor, the mounted bootstrap, the live-fetched index, and the requirement registry they are generated fromdocs/advisor-surface-compression-loss.md— the audited failure that produced it: what a size-capped, always-applied contract field silently dropsdocs/critique-protocol.md— how a fresh-context critique is instantiated (two mechanics by executor type), how the advisor surface is bootstrapped (a mounted bootstrap carrying the contract plus a thin Project Instructions floor, neither pasted per thread), the coverage-band requirement, and the non-repo package-availability ruledocs/domain-authority-review-protocol.md— the reviewer-neutral protocol for a review by a domain authority in a role distinct from the architect/operator: the three independent axes (review mode ≠ return mode ≠ authority), the stage contract, claim-level classification, the handoff-necessity gate, and how it stays distinct from SMGI (delivery) and critique-protocol (fresh-context critique)
templates/AGENTS.template.md— agent-agnostic starter for repo-local execution rules; the shared workflow core now lives inprotocol/AGENTS.shared.md(originally derived from asset-pipeline-ASK's live AGENTS.md), and this template is a copyable starter for the repo-local remainder alongside the resolved shared core (project-specific architecture rules in that repo are not absorbed by default)templates/grounding-note.template.md— starter for the external grounding note that travels with each ASK projecttemplates/architecture.template.md— starter for a downstream repo's architecture doctemplates/CLAUDE.template.md— the Claude Code adapter for a downstream repo; required for any Claude-operated repo, carrying exactly one@AGENTS.mdimport above its repo-specific prosetemplates/advisor-project-bootstrap.template.md— the full advisor contract, generated from the requirement registry; the one standing Source an advisor Project mountstemplates/advisor-project-instructions.template.md— the thin pre-bootstrap floor for the Project Instructions field: what must bind before any fetch, and still hold when every fetch failstemplates/_INDEX-project.template.md— the source index / path map an advisor surface fetches live at the locator its bootstrap declares; instantiated per project (and per advisor role)templates/overlays/architecture-uncertain-rules.template.md— optional opt-in overlay for downstream projects with active architecture or ontology uncertainty; adds rules calibrated for projects whose work is to discover structural categories (architecture-before-prototype, prototype-as-pressure-surface, attempt-model-before-plan, self-evident-premise stop, ceremony budget, proof-chain gravity well guard, bootstrap doc-alignment check) on top of the base template; not used by projects whose task surface is knowntemplates/domain-authority-review-profile.template.md— conditional profile a downstream project instantiates only if it has a domain authority in a role distinct from the architect/operator; a minimum, extensible standing-fields + per-review stage-contract profile, governed bydocs/domain-authority-review-protocol.md
Templates in templates/ are copyable starters. They are not live for this repo unless explicitly adopted somewhere else. The protocol/ carriers are different: they are live and authoritative, resolved locally by consumers into their own AGENTS.md, not copy-only starters.
prompts/project-instantiation-initial-prompt.md— agent-agnostic startup prompt for the pre-repo instantiation phaseprompts/claude-code-initial-prompt.md— session-start prompt for attaching Claude Code to an existing ASK project repo as the execution surfaceprompts/repo-nudge-prompt.md— lightweight boundary nudge at local plateaus / absorptions / unclear next moves; single open-ended question anchored against the grounding noteprompts/repo-critique-initial-prompt.md— open-ended structural critique against repo + grounding note (initial pass of the fresh-context critique cycle)prompts/repo-critique-synthesis-prompt.md— advisor-role synthesis of two independent critiques into an advisory plan (synthesis pass)prompts/repo-critique-execution-prompt.md— hand the advisory plan back to the execution surface for scoped implementation (execution pass)prompts/ecology-critique-initial-prompt.md— open-ended fresh-context critique across the ASK system-building ecology (control-surface,method-ASK,design-system-ASK, downstream repos / grounding notes)prompts/ecology-critique-synthesis-prompt.md— fold another independent ecology critique into the one just produced and make an advisory planprompts/ecology-critique-execution-prompt.md— hand the ecology advisory synthesis back to the execution surface for per-repo scoped implementation, stopping at exact scoped diff (execution pass)prompts/cross-repo-propagation-wave.md— coordinator runbook for a multi-consumer propagation wave: phase contract, subagent evidence-packet schema, and the two typed profiles (design-system vendor propagation · execution-protocol carrier propagation)prompts/convention-aware-version-preflight.md— read-only, fail-closed check routine run before an operator-canonical version bump, freeze, or diagram source/render bump: the nine steps, the convention-registry schema, and the evidence boundaries; convention-aware by design, and it never authors corrective proseprompts/inter-session-coordination.md— coordinator runbook for coordination between independent sessions inside one operating surface — notifying a live session that state it depends on changed, or that an explicitly checked dependency remains blocked; cross-surface coordination stays with ASK's relay: durable-owner-first ordering for transition events (a checked-but-still-blocked gate creates no durable write and no artifact), the event vocabulary and notice envelope, the receiver rule, and a dated non-normative runtime binding kept separate from the portable contract
examples/asset-pipeline-ASK/notes.md— primary pressure surface (mature working example)examples/urban-observatory/notes.md— second working example (instantiation / source-of-intent recovery pressure surface)
tools/read/— the site build: when the site is built it renders the site's home page, and reading pages for the workflow docs, protocol notes, templates, prompts and examples and the diagram sources, from their Markdown and source files; the generated pages are build output and are not committed
| If you need to... | Use |
|---|---|
| define execution rules inside the current repo | AGENTS.md |
| understand this protocol repo's own architecture | docs/architecture.md |
| set up the workflow before the target repo exists | docs/project-instantiation-workflow.md and prompts/project-instantiation-initial-prompt.md |
| attach Claude Code to an existing ASK repo as the execution surface | prompts/claude-code-initial-prompt.md |
| attach an external advisor surface (GPT or Claude in chat form) to an existing repo | templates/advisor-project-bootstrap.template.md + templates/advisor-project-instructions.template.md + templates/_INDEX-project.template.md |
| run a review by a domain authority in a role distinct from the architect/operator | docs/domain-authority-review-protocol.md + templates/domain-authority-review-profile.template.md |
| create repo-local starter docs for a downstream repo | templates/AGENTS.template.md, templates/grounding-note.template.md, templates/architecture.template.md, templates/CLAUDE.template.md |
| see how the structure mapped onto a real ASK project | examples/ |
For a new ASK project:
- Identify the project purpose, repo name, and initial structure.
- Use the adversarial-collaboration operating model: ASK apex + advisor surface + execution surface.
- Copy
templates/AGENTS.template.mdinto the new repo asAGENTS.mdand adapt project-specific defaults. - Copy
templates/grounding-note.template.mdinto the external grounding-note location and fill in intent, audience, philosophy, foundational premises, and durable loose threads. - Optionally copy
templates/architecture.template.mdinto the new repo asdocs/architecture.md. - For a Claude-operated repo, copy
templates/CLAUDE.template.mdinto the new repo asCLAUDE.md— required, not optional; keep exactly one@AGENTS.mdimport. - Optionally adopt
templates/overlays/architecture-uncertain-rules.template.mdwhen the project profile is architecture-uncertain (ontology-first work, prototypes as pressure surfaces, deferred schema commitment, modeling-before-planning). Append after the baseAGENTS.mdrules; skip when the task surface is known and the work is execution against it. - Identify protected paths, constraints, and required verification steps in the new repo's
AGENTS.md. - Use
prompts/claude-code-initial-prompt.mdto attach Claude Code after the repo exists. - Optionally generate a surface bootstrap from
templates/advisor-project-bootstrap.template.md, install the thin floor fromtemplates/advisor-project-instructions.template.mdinto the advisor Project Instructions, and create the live-fetched source index fromtemplates/_INDEX-project.template.md. - Optionally adapt the protocol repo's nudge prompt (
prompts/repo-nudge-prompt.md) and critique-cycle prompts (prompts/repo-critique-initial-prompt.md,prompts/repo-critique-synthesis-prompt.md,prompts/repo-critique-execution-prompt.md) into project-flavored operator-side copies in<project-name>-EXTERNAL/intent-carriers/when those surfaces will be used.
The control-surface design is anchored to a short execution-protocol subset of the broader ASK workflow / method article line. The full chronological article index lives upstream in method-ASK/docs/articles.md.
- Beyond Vibe Coding: Constraining LLMs — the case for constrained LLMs and explicit rules; substrate for the discipline this repo operationalizes.
- Lessons from the First Prototype Phase — the structural retrospective that sharpened the protocol's constraints, review surfaces, and evidence discipline.
- Adversarial Collaboration — the within-session multi-mind layer; the pattern behind this repo's two review windows and per-PR cadence.
- From Conversation to Control Surface — project inception from messy AI-mediated exploration; the recovered intent → validated constraint → repo sequence.
- Three Agents Got Into an Argument // The Repo Won — the repo-as-arbiter operating rule: artifact-owning surface gets the final read on current file contents.
Copyright 2026 Andrew S Klug // ASK
Licensed under the Apache License 2.0 // see LICENSE
