Skip to content

Epic: constrained marketplace job execution architecture #1557

Description

@signerless

Decision

We will not launch marketplace execution as a freeform general-agent system.

V1 will be a constrained compiled-job system:

  • the user selects a supported job type and fills bounded fields
  • the backend compiles that request into a canonical job contract
  • deterministic policy resolves the exact tools, network reach, memory scope, write scope, and runtime limits
  • agenc-core executes only the approved plan inside an isolated job sandbox
  • any external side effect goes through an explicit human review path
  • verification and trust internals remain private to internal operator/runtime flows

Prompt injection is treated as a containment problem, not a prevention claim. The goal is not "make injection impossible." The goal is "make injection low-impact."

Why

All of the following must be treated as untrusted data:

  • job bodies and user-entered fields
  • remote webpages and public APIs
  • PDFs, docs, and transcripts
  • tool output and shell output
  • any memory that crosses jobs, agents, or tenants

Untrusted text must never directly determine capability.

If an agent is injected, it must still be unable to:

  • read broad secrets
  • reach internal services or cloud metadata endpoints
  • write outside its approved scope
  • take autonomous external actions
  • poison future jobs through shared memory

Scope Of This Epic

This issue tracks the umbrella architecture for:

  • a canonical compiled job contract
  • a catalog-driven job compiler
  • a deterministic policy engine
  • a private runtime execution boundary in agenc-core
  • per-job sandbox, filesystem, and network isolation
  • side-effect brokering and review gates
  • secrets and memory isolation
  • abuse telemetry, red-teaming, and release gates
  • repo boundaries and rollout sequencing

Not In Scope

For now, this epic does not include:

  • freeform "describe the job and do whatever seems useful" execution
  • public UX that explains attestation, trust keys, issuer metadata, or signature flow details
  • autonomous send, post, buy, sign, submit, merge, deploy, or grant access
  • broad cross-job or cross-tenant memory
  • arbitrary internet access for launched jobs
  • pushing this architecture into protocol unless the chain boundary clearly requires it
  • marketplace frontend/storefront ownership in this issue for now

Non-Negotiable Rules

  1. Compilation before execution
    Raw job text is input, never authority.

  2. Policy outside the model
    The model does not decide what tools or permissions it gets.

  3. Least privilege by default
    A job receives only the tools and network reach it strictly needs.

  4. Fail closed
    Unknown job types, tools, policy states, oversized inputs, or unsupported outputs are rejected.

  5. Containment over prevention
    We assume prompt injection can still occur and design so it cannot do much.

  6. Read-only first
    V1 launches only low-risk jobs.

  7. Private verification boundary
    Verification and trust logic stay internal and server-side.

Canonical Job Contract

Every executable marketplace job must compile to one normalized object.

{
  "schema_version": "v1",
  "job_type": "string",
  "risk_tier": "L0 | L1 | L2",
  "goal": "short structured objective",
  "inputs": {
    "files": [],
    "constraints": {}
  },
  "allowed_tools": [],
  "allowed_domains": [],
  "allowed_data_sources": [],
  "output_format": "markdown | json | csv | docx",
  "limits": {
    "max_runtime_minutes": 10,
    "max_tool_calls": 40,
    "max_fetches": 20,
    "max_download_mb": 25
  },
  "execution": {
    "memory_scope": "job_only",
    "write_scope": "none | workspace_only | approved_destination_only",
    "network_policy": "off | allowlist_only",
    "secrets_policy": "none | scoped_ephemeral",
    "sandbox_profile": "l0_readonly | l1_scoped_write | l2_manual_only"
  },
  "review": {
    "human_review_gate": "none | before_side_effect | before_publish"
  },
  "audit": {
    "compiler_version": "string",
    "policy_version": "string",
    "compiled_plan_hash": "string"
  },
  "success_criteria": []
}

Executor input must be derived from this contract plus policy output. Raw freeform job text must never be the source of permissions.

Risk Tiers

L0

Low-risk, mostly read-only jobs.

  • allowlist-only network
  • no secrets
  • no external side effects
  • no writes outside approved output artifact generation
  • default memory scope: job_only

This is the only launch tier.

L1

Scoped internal write or draft jobs.

  • approved internal destinations only
  • scoped ephemeral secrets only
  • explicit human review before any publish/send/submit step
  • stronger audit and red-team requirements

Not launch scope.

L2

High-risk jobs.

  • manual review only
  • no autonomous execution path
  • no broad authenticated third-party actions

Not launch scope.

V1 Launch Catalog

V1 should launch with a deliberately small set of useful, legible, low-risk jobs.

web_research_brief

  • inputs: topic, region, timeframe, max_sources, output_length
  • tools: fetch_url, extract_text, summarize, cite_sources
  • network: allowlist only
  • output: markdown

lead_list_building

  • inputs: industry, geography, company_size, role_titles, max_rows
  • tools: fetch_url, extract_company_data, dedupe, csv_export
  • network: allowlist only
  • output: csv
  • sources: public websites and approved directories only

spreadsheet_cleanup_classification

  • inputs: file, columns, rules, output_format
  • tools: parse_sheet, normalize_rows, classify, dedupe, export
  • network: off by default
  • output: csv | xlsx

transcript_to_deliverables

  • inputs: transcript_or_audio, requested_outputs
  • tools: transcribe (if needed), summarize, extract_action_items, draft
  • network: off by default unless explicitly required by job type
  • output: markdown | json | docx

product_comparison_report

  • inputs: category, budget, required_features, region, max_products
  • tools: fetch_url, extract_specs, normalize_table, rank_items
  • network: allowlist only
  • output: markdown

Any additional launch job type should require explicit policy definition, red-team coverage, and architecture signoff.

Product Surface Rule

The primary product path must not be a blank "describe the job" box for executable jobs.

The bounded submission model should collect structured fields such as:

  • job type
  • goal
  • allowed sources
  • allowed tools
  • budget or time cap
  • output format
  • whether review is required before any action

The UX can feel flexible, but the runtime must behave like a locked workflow engine, not a general-purpose agent.

Workstreams

1. Canonical Contract, Job Catalog, and Compiler

Deliverables:

  • per-job schemas with bounded fields, enums, length limits, row limits, and source-count limits
  • compiler that transforms product input into the canonical job contract
  • compiler_version and compiled_plan_hash persisted with every run
  • compile-time rejection for unsupported or oversized inputs

Definition of done:

  • no executable job exists without a compiled plan
  • compile failures fail closed
  • permissions are never inferred from raw prose

2. Deterministic Policy Engine

Deliverables:

  • mapping from job_type + risk_tier + policy_version to effective permissions
  • exact resolution of allowed tools, allowed domains, budgets, memory scope, write scope, secrets policy, and review gates
  • fail-closed handling for unknown job types, tools, or policy states

Definition of done:

  • tool reach and network reach are deterministic and auditable
  • model output cannot broaden permissions
  • every run stores its effective policy version

3. Private Runtime Execution Boundary (agenc-core)

Deliverables:

  • executor input contract based on compiled plan + policy output + ephemeral job credentials
  • runtime enforcement of time, fetch, and tool-call budgets
  • job-scoped tool credentials only
  • explicit separation between private runtime capabilities and public CLI/TUI/package UX

Definition of done:

  • runtime cannot broaden scope from freeform text
  • public surfaces do not require users to understand verification internals
  • all execution happens against a scoped, versioned plan

4. Sandbox, Filesystem, and Network Isolation

Deliverables:

  • per-job isolated execution context
  • workspace-only file access when writes are allowed
  • no host access and no ambient filesystem visibility outside job scope
  • allowlisted network broker with GET / HEAD only for L0
  • blocking for localhost, RFC1918 ranges, metadata endpoints, internal hostnames, and cloud control planes
  • download caps, fetch caps, and passive-content normalization before model consumption

Definition of done:

  • one job cannot read another job’s working set
  • launched jobs cannot browse arbitrary internet targets
  • internal services are unreachable from job execution
  • oversized or unsupported responses fail closed

5. Secrets, Memory, and Side-Effect Mediation

Deliverables:

  • secrets_policy = none by default
  • memory default = job_only
  • TTL, size caps, and namespacing for any persisted memory
  • structured side-effect intents instead of freeform action calls
  • explicit human review gate before any external effect

Autonomous execution remains blocked for:

  • send
  • post
  • buy
  • sign
  • submit
  • merge
  • deploy
  • grant access

Definition of done:

  • injected jobs cannot exfiltrate broad ambient secrets
  • one job cannot poison future jobs through shared memory
  • no autonomous external action path exists outside brokered review

6. Private Verification Boundary

Deliverables:

  • internal operator flow for approval and verification
  • private runtime validation of approved payloads server-side
  • no public exposure of attestation schemas, trust keys, issuer metadata, or signing mechanics
  • public CLI/TUI remains simple and capability-safe

Definition of done:

  • verification is not part of the public mental model
  • users do not need to know how approval is implemented to run supported jobs
  • trust internals remain enforceable without leaking into public UX

7. Observability, Abuse Telemetry, and Release Gates

Deliverables:

  • audit trail for compiled plans, policy versions, tool calls, blocked actions, domain accesses, review decisions, sandbox lifecycle, and failure reasons
  • hostile-content test cases for job input, webpages, docs, transcripts, and tool output
  • red-team suites for every launch job type
  • explicit release gates for L0 and later L1/L2 expansion

Definition of done:

  • the team can explain why a run was allowed or blocked
  • hostile-content regressions are testable before release
  • no tier expands without evidence

8. Umbrella Documentation and Repo Boundaries

Deliverables:

  • ADR or umbrella design doc for constrained execution architecture
  • documented ownership boundaries across repos
  • implementation sequencing and release checklist
  • explicit documentation for what is intentionally private and what is intentionally not in public packages

Definition of done:

  • cross-repo ownership is clear
  • public/private runtime boundaries are documented
  • contributors do not have to guess where policy lives

Repo Breakdown

AgenC (umbrella)

Own:

  • architecture decision record
  • roadmap and workstream tracking
  • repo-boundary documentation
  • implementation sequencing
  • release criteria and cross-repo acceptance checklist
  • temporary coordination point while marketplace frontend ownership remains out of scope

agenc-core

Own:

  • private runtime execution boundary
  • policy-aware executor input contract
  • tool gating enforcement
  • budget enforcement
  • sandbox adapter or orchestration contracts
  • secrets and memory isolation primitives
  • side-effect broker hooks
  • internal verification consumption and validation path

agenc-core must not become the place where public users are asked to understand verification internals.

agenc-protocol

Default posture:

  • keep protocol off the critical path unless canonical on-chain metadata or trust artifacts truly require protocol ownership

agenc-sdk / agenc-plugin-kit

Default posture:

  • do not expose internal execution mechanics publicly until the internal model is stable
  • keep public surfaces simpler than internal operator flows

Implementation Sequence

Phase 0. Decision Lock and Boundary Cleanup

  • lock the product decision: no freeform autonomous marketplace jobs for launch
  • define the canonical job contract and versioning model
  • document private/public boundaries
  • freeze any public UX that leaks verification mechanics
  • approve the initial L0 job catalog

Phase 1. L0 Execution Foundation

  • ship compiler, policy engine, executor contract, sandbox/network broker, and observability for L0
  • enable only the five launch job types listed above
  • keep network allowlisted, memory job-scoped, secrets off, and side effects blocked

Phase 2. Review-Gated Internal Writes

  • add approved internal write destinations
  • add draft creation in approved systems
  • keep publish/send/submit behind human review

Phase 3. Consider L1 Expansion

  • allow scoped ephemeral secrets only if needed
  • add stronger audit and red-team requirements
  • require explicit follow-up decision before enabling any L1 flow

Phase 4. L2 Manual-Only Jobs

  • define high-risk job classes
  • require manual review by default
  • do not offer a fully autonomous path

Release Gates

Before launch, all of the following must be true:

  • every launched job type executes from a normalized compiled plan
  • raw job text never directly determines tool access, network reach, or write scope
  • every run stores compiler_version, policy_version, and compiled_plan_hash
  • all launch jobs are L0 and remain read-only or drafting-only
  • no cross-job or cross-tenant long-term memory exists by default
  • verification and trust internals remain hidden from public UX
  • blocked action telemetry exists and is reviewable
  • red-team coverage exists for hostile user input and hostile remote content

L1 and L2 remain out of launch scope until explicitly approved in a follow-up decision.

Open Decisions

  • Do we want one shared policy engine package, or repo-local policy definitions with umbrella-level acceptance checks?
  • What is the minimum sandbox/runtime stack that provides acceptable blast-radius reduction without unacceptable latency or cost?
  • Does any verified-task metadata ever need protocol ownership, or should it remain purely runtime infrastructure?
  • Which repo should eventually own marketplace frontend or job-submission UX once that scope returns?

Final Note

This is an umbrella design program for a constrained internal execution model. It should not be implemented piecemeal as a few runtime flags or a partial safety layer around a freeform agent. The main failure mode is partial adoption: keeping unconstrained execution while only partially implementing compiler, policy, sandbox, and review boundaries.

Production Readiness Requirements

The initial production launch target stops at the end of Phase 1.

That means production readiness for V1 requires:

  • all Phase 0 boundary and decision-lock work completed
  • all Phase 1 L0 execution foundation work completed
  • all Release Gates in this issue passing

It does not require:

  • Phase 2 review-gated internal writes
  • any L1 job class
  • any L2 job class
  • authenticated third-party API execution
  • scoped ephemeral secrets in launch flows
  • autonomous external side effects of any kind

Production Scope For V1

V1 production means a constrained L0 launch only:

  • compiled jobs only
  • deterministic policy only
  • read-only or drafting-only jobs only
  • allowlist-only network reach
  • no ambient secrets
  • job_only memory by default
  • no autonomous send/post/buy/sign/submit/merge/deploy/grant-access path
  • private verification boundary preserved
  • hostile-content telemetry and red-team coverage in place

If those conditions are not met, the system is not production-ready.

Additional Operational Requirements Before Launch

In addition to the architecture work above, production launch should require:

  • per-job-type kill switch
  • global marketplace execution pause switch
  • tenant-level quotas, rate limits, and budget caps
  • policy/compiler rollback mechanism
  • incident response and abuse-response runbook
  • audit-log retention policy
  • alerting for blocked-action spikes, sandbox failures, policy failures, and abnormal domain access
  • clear fallback behavior when sandbox or broker services fail

These items are not optional production polish. They are part of operating this safely in production.

Explicit Launch Boundary

The launch decision should be:

  • Go to production after Phase 1 if L0-only constraints hold and release gates pass
  • Do not block launch on Phase 2, 3, or 4
  • Do not expand beyond L0 without a separate follow-up decision and evidence

Phase 1 Critical Path

The roadmap is intentionally broad, but execution should follow a strict order for L0 launch.

Step 1. Freeze the marketplace-to-runtime handoff contract

Primary outcome:

  • stable request/response boundary between marketplace submission flow and runtime task creation

This step must define and freeze:

  • canonical compiled job contract shape
  • task creation input contract
  • task creation result contract
  • status transitions marketplace depends on
  • required audit/version fields

Why first:

  • prevents marketplace work and runtime work from drifting independently
  • allows product work and runtime rewrite work to run in parallel without breaking each other

Blocks:

  • all downstream implementation work

Unblocks:

  • Step 2, Step 3, Step 4, Step 5

Step 2. Replace contradictory product surfaces

Primary outcome:

  • no executable launch path depends on a freeform "describe the job" surface

Why second:

  • the current surface directly contradicts the launch model in this epic
  • leaving it in place undermines every runtime safety improvement made later

Depends on:

  • Step 1 interface freeze

Unblocks:

  • launch-safe marketplace UX
  • typed job submission wiring

Step 3. Introduce canonical compiled-job execution in runtime

Primary outcome:

  • runtime executes a scoped, versioned compiled plan rather than raw freeform execution intent

Why third:

  • this is the core runtime boundary change the rest of the roadmap depends on

Depends on:

  • Step 1 interface freeze

Unblocks:

  • deterministic enforcement
  • per-job budgets
  • policy-bound runtime execution

Step 4. Bind enforcement to compiled per-job policy

Primary outcome:

  • tools, domains, budgets, memory scope, and write scope are derived from the compiled plan for each run

Why fourth:

  • compiled-job execution without compiled-job enforcement is partial adoption

Depends on:

  • Step 3 compiled-job runtime boundary

Unblocks:

  • real L0 execution behavior
  • auditable per-job policy enforcement

Step 5. Gate all side effects

Primary outcome:

  • signing, submission, spending, and equivalent external actions cannot execute autonomously in launch scope

Why fifth:

  • this is the highest-severity execution risk once runtime can act on jobs

Depends on:

  • Step 3 compiled runtime path
  • Step 4 policy binding

Unblocks:

  • launch-safe L0 posture
  • review-before-side-effect model

Step 6. Clean public/private surface boundaries

Primary outcome:

  • public SDK and UX do not leak verification/trust internals

Why sixth:

  • surface cleanup matters before launch freeze, but should not block core execution boundary work

Depends on:

  • Step 1 interface freeze

Unblocks:

  • cleaner public messaging
  • safer launch surface

Step 7. Production readiness validation

Primary outcome:

  • release gates, telemetry, red-team coverage, kill switches, rollback, and operating controls are in place

Why last:

  • this validates the system that the previous steps created

Depends on:

  • Steps 2 through 6 materially complete for launch scope

Unblocks:

  • production launch decision at end of Phase 1

Workstream Dependency Map

  • Workstream 1 is prerequisite to Workstreams 2 and 3
  • Workstream 3 is prerequisite to Workstreams 4 and 5
  • Workstream 5 must be complete before launch
  • Workstream 6 can run in parallel after the interface freeze
  • Workstream 7 validates the outputs of Workstreams 1 through 6
  • Workstream 8 should run continuously, but architecture/ownership docs must be updated before launch freeze

Execution Rule

The roadmap should be executed as a critical path, not as eight independent parallel themes.

Allowed parallelism:

  • marketplace UX/product work can proceed after the interface freeze
  • runtime rewrite work can proceed after the interface freeze
  • public/private boundary cleanup can proceed in parallel with runtime implementation
  • observability and red-team preparation can begin early, but final signoff happens last

Disallowed pattern:

  • implementing sandbox, policy, or side-effect controls piecemeal while keeping contradictory product surfaces and unfrozen runtime contracts in place

Definition Of Roadmap Progress

The roadmap is considered on-track only if progress is measured against the critical path above.

Progress should not be reported as "several workstreams started" unless the following are also clear:

  • which critical-path step is complete
  • which next step is unblocked
  • which repo owns the active step
  • which release gate moved as a result

Metadata

Metadata

Assignees

No one assigned

    Labels

    epicTracking / epic issue

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions