Context Projects
A Context Project is Workstation-owned authoring state: an application artifact, not a SEIF Protocol contract. It is a folder:
Customer Support Agent/
context-project.json the design (human-readable, stable key order, version it)
.gitignore ignores .workstation/ and exports/
builds/build-0001/ immutable Context Builds (read-only files)
sources/… optional: sources kept inside the project are stored with relative paths
.workstation/runtime/ local runtime data and traces (not versioned)
context-project.json (seif-context-workstation.project.v1)
| Field | Meaning | |
|---|---|---|
projectId | Stable identity (cp-…). Survives moves and renames; a duplicate gets a new one. | |
name, description | Human labels. | |
buildName | Builds are named {buildName}@{version}; defaults to {first consumer}-context. | |
defaultEnvironment, environments[] | id, name, traceRetention (content keeps bounded rendered content in traces; metadata keeps digests only), maxTraces. A Build targets one environment. | |
sources[] | id, name, type (folder · git · file · inline), path (locator; relative when inside the project), include/exclude glob patterns, resolution (pinned — embedded in Builds — or live — read by the runtime from a configured location), inline {title, content}. | |
layers[] | id, name, kind, description, bindings[] (source with optional include/exclude within it, or provider for request-time data), appliesTo (objectives, consumers, requiresInput), itemFilter (field in item metadata = input key in the request). | |
providers[] | Runtime Context Provider requirements (0.4.0): id, name, description, contract (context-provider.v1), capability (lookup), required (default true), lookup {input, pattern?}, maxItems. Endpoints, secrets and databases are refused here — they belong in Deployment Bindings. Omitted when empty, so existing Projects keep their Build digests. See Runtime Context Providers. | |
objectives[] | id, name, description, instructions (rendered for the agent). | |
profiles[] | id, name, budget.maxTokens, rules[] — see Context Profiles. | |
consumers[] | id, name, description, defaultObjective, defaultProfile, profiles (objective → profile), budget.maxTokens ceiling, render (style sections/xml, includeProvenance (default false: file, section and revision stay in traces and Interações, not in the text the model reads; turn on only for debug/governance), preamble, modelFamily hint, includeCurrentness: show each item's date under its currentness rule, for example verificado 2026-10-12, beside its source). | |
tests[] | See Context Tests. Tests may add providers `{<id>: {items:[{id, title?, content, metadata?, updatedAt?}]} | {status: EMPTY/NOT_FOUND/TIMEOUT/UNAVAILABLE}}` — synthetic fixtures that make provider layers deterministic; never production records. |
gapDispositions[] | An explicit, versioned scope boundary for a redacted question: {id, status: DELIBERATELY_UNCOVERED, question, reason, sourceInteractionId?}. It is not an erased gap and does not claim an agent understood a refusal. A disposition removes the question from the open Gaps board and silences its notifyGaps alerts (the decision is "out of scope", not "unanswered"); the gap itself is kept and a "decisions" view still lists it (gapBoard → outOfScope, or includeDispositioned). Reversible by removing the disposition in advanced settings (seif.yaml → gapDispositions). After tests pass, cite the decision as Build <buildRef> + digest + gapDispositions/<id>. |
Ids are lowercase ([a-z0-9-]). The engine validates the whole file and reports precise paths (layers[2].bindings[0].source: unknown source …).
Secrets are refused. Saving a project that contains credential-like text (API keys, tokens, private keys, password=…) fails. Keep secrets in the systems your sources come from.
Item metadata. Markdown and text items may start with front matter (--- … ---) of key: value lines (title, updated, date, customer, lists as [a, b]). Item filters, recency ordering and currentness rules read it.
Operations
New (templates are conveniences that pre-fill ordinary configuration), Open, Save (⌘S), Recent (Hub), Duplicate (palette; new identity, no Builds), Project settings (name, description, Build name, Build environment).
0.3.0 compatibility and connectivity
Project schema remains seif-context-workstation.project.v1. Optional source connector.secretRef and rule retrieval fields extend v1 without reinterpreting existing file/git/inline definitions or default lexical behavior. Existing Projects load unchanged; unknown schema versions fail. HTTP/MCP endpoint credentials are refused before desktop persistence. Portable configuration contains references, not values. Connector configuration.
0.4.0 compatibility
Still seif-context-workstation.project.v1. providers, provider layer bindings and test provider fixtures are optional additions; Projects without them compile to the same definition digests as 0.3.0. The Workstation editor preserves fields it does not model when saving.
HTTP turn observation. A hosted named client may opt into HTTP turn observation, which binds its HTTP context deliveries to a server-issued, short-lived turn receipt. This is deployment/runtime configuration, not part of context-project.json or a claim that the model consumed the delivery.
Versioned tools
Context and tool delivery documents tool declarations and profile rules, v2 tool Builds, executor bindings, synthetic tests, operator approval, SDK integration and effect-free replay. Tool-free Builds preserve the v1 contract.