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 prose
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)
| 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
