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
-
Compilation before execution
Raw job text is input, never authority.
-
Policy outside the model
The model does not decide what tools or permissions it gets.
-
Least privilege by default
A job receives only the tools and network reach it strictly needs.
-
Fail closed
Unknown job types, tools, policy states, oversized inputs, or unsupported outputs are rejected.
-
Containment over prevention
We assume prompt injection can still occur and design so it cannot do much.
-
Read-only first
V1 launches only low-risk jobs.
-
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:
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:
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:
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
Decision
We will not launch marketplace execution as a freeform general-agent system.
V1 will be a constrained compiled-job system:
agenc-coreexecutes only the approved plan inside an isolated job sandboxPrompt 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:
Untrusted text must never directly determine capability.
If an agent is injected, it must still be unable to:
Scope Of This Epic
This issue tracks the umbrella architecture for:
agenc-coreNot In Scope
For now, this epic does not include:
send,post,buy,sign,submit,merge,deploy, orgrant accessNon-Negotiable Rules
Compilation before execution
Raw job text is input, never authority.
Policy outside the model
The model does not decide what tools or permissions it gets.
Least privilege by default
A job receives only the tools and network reach it strictly needs.
Fail closed
Unknown job types, tools, policy states, oversized inputs, or unsupported outputs are rejected.
Containment over prevention
We assume prompt injection can still occur and design so it cannot do much.
Read-only first
V1 launches only low-risk jobs.
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
L0Low-risk, mostly read-only jobs.
job_onlyThis is the only launch tier.
L1Scoped internal write or draft jobs.
Not launch scope.
L2High-risk jobs.
Not launch scope.
V1 Launch Catalog
V1 should launch with a deliberately small set of useful, legible, low-risk jobs.
web_research_brieftopic,region,timeframe,max_sources,output_lengthfetch_url,extract_text,summarize,cite_sourcesmarkdownlead_list_buildingindustry,geography,company_size,role_titles,max_rowsfetch_url,extract_company_data,dedupe,csv_exportcsvspreadsheet_cleanup_classificationfile,columns,rules,output_formatparse_sheet,normalize_rows,classify,dedupe,exportcsv | xlsxtranscript_to_deliverablestranscript_or_audio,requested_outputstranscribe(if needed),summarize,extract_action_items,draftmarkdown | json | docxproduct_comparison_reportcategory,budget,required_features,region,max_productsfetch_url,extract_specs,normalize_table,rank_itemsmarkdownAny 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:
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:
compiler_versionandcompiled_plan_hashpersisted with every runDefinition of done:
2. Deterministic Policy Engine
Deliverables:
job_type+risk_tier+policy_versionto effective permissionsDefinition of done:
3. Private Runtime Execution Boundary (
agenc-core)Deliverables:
Definition of done:
4. Sandbox, Filesystem, and Network Isolation
Deliverables:
GET/HEADonly for L0Definition of done:
5. Secrets, Memory, and Side-Effect Mediation
Deliverables:
secrets_policy = noneby defaultjob_onlyAutonomous execution remains blocked for:
sendpostbuysignsubmitmergedeploygrant accessDefinition of done:
6. Private Verification Boundary
Deliverables:
Definition of done:
7. Observability, Abuse Telemetry, and Release Gates
Deliverables:
Definition of done:
8. Umbrella Documentation and Repo Boundaries
Deliverables:
Definition of done:
Repo Breakdown
AgenC(umbrella)Own:
agenc-coreOwn:
agenc-coremust not become the place where public users are asked to understand verification internals.agenc-protocolDefault posture:
agenc-sdk/agenc-plugin-kitDefault posture:
Implementation Sequence
Phase 0. Decision Lock and Boundary Cleanup
Phase 1. L0 Execution Foundation
Phase 2. Review-Gated Internal Writes
Phase 3. Consider L1 Expansion
Phase 4. L2 Manual-Only Jobs
Release Gates
Before launch, all of the following must be true:
compiler_version,policy_version, andcompiled_plan_hashL1 and L2 remain out of launch scope until explicitly approved in a follow-up decision.
Open Decisions
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:
It does not require:
Production Scope For V1
V1 production means a constrained L0 launch only:
job_onlymemory by defaultIf 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:
These items are not optional production polish. They are part of operating this safely in production.
Explicit Launch Boundary
The launch decision should be:
Phase 1 Critical Path
The roadmap is intentionally broad, but execution should follow a strict order for
L0launch.Step 1. Freeze the marketplace-to-runtime handoff contract
Primary outcome:
This step must define and freeze:
Why first:
Blocks:
Unblocks:
Step 2. Replace contradictory product surfaces
Primary outcome:
Why second:
Depends on:
Unblocks:
Step 3. Introduce canonical compiled-job execution in runtime
Primary outcome:
Why third:
Depends on:
Unblocks:
Step 4. Bind enforcement to compiled per-job policy
Primary outcome:
Why fourth:
Depends on:
Unblocks:
L0execution behaviorStep 5. Gate all side effects
Primary outcome:
Why fifth:
Depends on:
Unblocks:
L0postureStep 6. Clean public/private surface boundaries
Primary outcome:
Why sixth:
Depends on:
Unblocks:
Step 7. Production readiness validation
Primary outcome:
Why last:
Depends on:
Unblocks:
Workstream Dependency Map
Execution Rule
The roadmap should be executed as a critical path, not as eight independent parallel themes.
Allowed parallelism:
Disallowed pattern:
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: