Workspace Intelligence / JSON Schema
Workspai Project Agent Entry
Portable host-discovery and canonical-first entry contract for an adopted or managed project.
- Schema version
workspai.agent-entry.v1- Contract path
contracts/workspace-intelligence/project-agent-entry.v1.json- Publication
- json-schema
- Defined fields
- 53
- Artifact bindings
- 1
Why this contract exists
Architecture role
Projects workspace intelligence into stable grounding surfaces for agents and integrations.
Consumption boundary
- • Workspai CLI
- • AI agents
- • IDEs and MCP clients
Related commands
Commands are linked only when the runtime contract identifies a direct production relationship. Supporting contracts may be consumed without having a single producer command.
Produced artifacts
These durable files are emitted by registered commands and validated against this contract.
| Artifact path | Schema | Producer |
|---|---|---|
| .workspai/agent-entry.v1.json | workspai.agent-entry.v1 | workspai adopt workspai import workspai workspace sync workspai workspace agent-sync --write |
Field reference
Every declared schema property or published capability path is listed here. Required means the contract declares or publishes that field at the shown boundary.
| Field path | Type | Required | Meaning | Constraints |
|---|---|---|---|---|
| $defs.host.discovery | enum | Yes | Defines the discovery value at this contract boundary. | enum: native, adapter, portable-fallback |
| $defs.host.entryFiles | array | Yes | Defines the entryfiles value at this contract boundary. | minItems: 1 · maxItems: 3 |
| $defs.host.id | enum | Yes | Defines the id value at this contract boundary. | enum: generic, codex, claude, gemini, qwen, kimi, grok, copilot, cursor, windsurf, amazon-q |
| $defs.host.managed | boolean | Yes | Defines the managed value at this contract boundary. | — |
| $defs.host.reason | string | No | Defines the reason value at this contract boundary. | minLength: 1 |
| $defs.host.status | enum | Yes | Defines the status value at this contract boundary. | enum: ready, degraded, blocked |
| canonical | object | Yes | Defines the canonical value at this contract boundary. | additionalProperties: false |
| canonical.boundedGraphSearch | string | No | Defines the boundedgraphsearch value at this contract boundary. | const: "command:workspai workspace graph search <task-query> --scope project:<project> --limit 12 --json" |
| canonical.goalIndex | string | Yes | Defines the goalindex value at this contract boundary. | const: "workspace:.workspai/goals/index.json" |
| canonical.knowledgeGraph | string | No | Defines the knowledgegraph value at this contract boundary. | const: "workspace:.workspai/reports/workspace-knowledge-graph.json" |
| canonical.projectContext | string | Yes | Defines the projectcontext value at this contract boundary. | const: ".workspai/reports/project-context-agent.json" |
| canonical.projectGrounding | string | Yes | Defines the projectgrounding value at this contract boundary. | const: ".workspai/PROJECT-GROUNDING.md" |
| canonical.workspaceContext | string | Yes | Defines the workspacecontext value at this contract boundary. | const: "workspace:.workspai/reports/workspace-context-agent.json" |
| canonical.workspaceIndex | string | Yes | Defines the workspaceindex value at this contract boundary. | const: "workspace:.workspai/reports/INDEX.json" |
| canonical.workspaceModel | string | No | Defines the workspacemodel value at this contract boundary. | const: "workspace:.workspai/reports/workspace-model.json" |
| canonical.workspaceSkillsIndex | string | No | Defines the workspaceskillsindex value at this contract boundary. | const: "workspace:.workspai/reports/workspace-skills-index.json" |
| generatedAt | string | Yes | Defines the generatedat value at this contract boundary. | format: date-time |
| hosts | array | Yes | Defines the hosts value at this contract boundary. | minItems: 11 · maxItems: 11 |
| integrity | object | Yes | Defines the integrity value at this contract boundary. | additionalProperties: false |
| integrity.absolutePathsEmitted | boolean | Yes | Defines the absolutepathsemitted value at this contract boundary. | const: false |
| integrity.algorithm | string | Yes | Defines the algorithm value at this contract boundary. | const: "sha256" |
| integrity.payloadHash | reference | Yes | Defines the payloadhash value at this contract boundary. | ref: #/$defs/hash |
| integrity.portable | boolean | Yes | Defines the portable value at this contract boundary. | const: true |
| integrity.projectContextHash | reference | Yes | Defines the projectcontexthash value at this contract boundary. | ref: #/$defs/hash |
| project | object | Yes | Defines the project value at this contract boundary. | additionalProperties: false |
| project.framework | string | No | Defines the framework value at this contract boundary. | minLength: 1 |
| project.name | string | Yes | Defines the name value at this contract boundary. | minLength: 1 |
| project.relativePath | reference | Yes | Defines the relativepath value at this contract boundary. | ref: #/$defs/portablePath |
| project.runtime | string | No | Defines the runtime value at this contract boundary. | minLength: 1 |
| protocol | object | Yes | Defines the protocol value at this contract boundary. | additionalProperties: false |
| protocol.bootstrapCommand | string | Yes | Defines the bootstrapcommand value at this contract boundary. | minLength: 1 |
| protocol.degradedMode | object | Yes | Defines the degradedmode value at this contract boundary. | additionalProperties: false |
| protocol.degradedMode.allowCompleteArchitectureClaims | boolean | Yes | Defines the allowcompletearchitectureclaims value at this contract boundary. | const: false |
| protocol.degradedMode.allowReadOnlySourceInspection | boolean | Yes | Defines the allowreadonlysourceinspection value at this contract boundary. | const: true |
| protocol.degradedMode.discloseMissingEvidence | boolean | Yes | Defines the disclosemissingevidence value at this contract boundary. | const: true |
| protocol.mode | string | Yes | Defines the mode value at this contract boundary. | const: "canonical-first" |
| protocol.requiredReadOrder | array | Yes | Defines the requiredreadorder value at this contract boundary. | minItems: 6 · maxItems: 16 |
| protocol.sourcePolicy | object | Yes | Defines the sourcepolicy value at this contract boundary. | additionalProperties: false |
| protocol.sourcePolicy.broadScanBeforeBootstrap | boolean | Yes | Defines the broadscanbeforebootstrap value at this contract boundary. | const: false |
| protocol.sourcePolicy.liveSourceAuthority | string | Yes | Defines the livesourceauthority value at this contract boundary. | const: "exact-implementation" |
| protocol.sourcePolicy.sourceMutation | string | Yes | Defines the sourcemutation value at this contract boundary. | const: "governed-only" |
| protocol.sourcePolicy.verificationClaims | string | Yes | Defines the verificationclaims value at this contract boundary. | const: "cli-evidence-only" |
| protocol.sourcePolicy.workspaceEvidenceAuthority | string | Yes | Defines the workspaceevidenceauthority value at this contract boundary. | const: "identity-topology-readiness-goals" |
| protocol.verifyCommand | string | Yes | Defines the verifycommand value at this contract boundary. | minLength: 1 |
| schemaVersion | string | Yes | Defines the schemaversion value at this contract boundary. | const: "workspai.agent-entry.v1" |
| workspace | object | Yes | Defines the workspace value at this contract boundary. | additionalProperties: false |
| workspace.identityIsFilesystemPath | boolean | Yes | Defines the identityisfilesystempath value at this contract boundary. | const: false |
| workspace.localBinding | string | Yes | Defines the localbinding value at this contract boundary. | const: ".workspai/workspace-link.local.json" |
| workspace.name | string | Yes | Defines the name value at this contract boundary. | minLength: 1 |
| workspace.portableUriScheme | string | Yes | Defines the portableurischeme value at this contract boundary. | const: "workspace:" |
| workspace.relationship | enum | Yes | Defines the relationship value at this contract boundary. | enum: managed, adopted, imported, linked, restored |
| workspace.resolvedPathPolicy | string | Yes | Defines the resolvedpathpolicy value at this contract boundary. | const: "runtime-private-never-persist" |
| workspace.resolverCommand | string | Yes | Defines the resolvercommand value at this contract boundary. | const: "workspai project workspace status --json" |
Canonical machine-readable definition
The raw synchronized contract remains authoritative. The educational sections above are projections of this definition.
Show raw JSON
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://workspai.dev/schemas/workspace-intelligence/project-agent-entry.v1.json",
"title": "Workspai Project Agent Entry",
"description": "Portable host-discovery and canonical-first entry contract for an adopted or managed project.",
"type": "object",
"additionalProperties": false,
"required": [
"schemaVersion",
"generatedAt",
"project",
"workspace",
"canonical",
"protocol",
"hosts",
"integrity"
],
"properties": {
"schemaVersion": {
"const": "workspai.agent-entry.v1"
},
"generatedAt": {
"type": "string",
"format": "date-time"
},
"project": {
"type": "object",
"additionalProperties": false,
"required": [
"name",
"relativePath"
],
"properties": {
"name": {
"type": "string",
"minLength": 1
},
"relativePath": {
"$ref": "#/$defs/portablePath"
},
"runtime": {
"type": "string",
"minLength": 1
},
"framework": {
"type": "string",
"minLength": 1
}
}
},
"workspace": {
"type": "object",
"additionalProperties": false,
"required": [
"name",
"relationship",
"localBinding",
"identityIsFilesystemPath",
"resolverCommand",
"portableUriScheme",
"resolvedPathPolicy"
],
"properties": {
"name": {
"type": "string",
"minLength": 1
},
"relationship": {
"enum": [
"managed",
"adopted",
"imported",
"linked",
"restored"
]
},
"localBinding": {
"const": ".workspai/workspace-link.local.json"
},
"identityIsFilesystemPath": {
"const": false
},
"resolverCommand": {
"const": "workspai project workspace status --json"
},
"portableUriScheme": {
"const": "workspace:"
},
"resolvedPathPolicy": {
"const": "runtime-private-never-persist"
}
}
},
"canonical": {
"type": "object",
"additionalProperties": false,
"required": [
"projectContext",
"projectGrounding",
"goalIndex",
"workspaceIndex",
"workspaceContext"
],
"properties": {
"projectContext": {
"const": ".workspai/reports/project-context-agent.json"
},
"projectGrounding": {
"const": ".workspai/PROJECT-GROUNDING.md"
},
"goalIndex": {
"const": "workspace:.workspai/goals/index.json"
},
"workspaceIndex": {
"const": "workspace:.workspai/reports/INDEX.json"
},
"workspaceContext": {
"const": "workspace:.workspai/reports/workspace-context-agent.json"
},
"workspaceModel": {
"const": "workspace:.workspai/reports/workspace-model.json"
},
"knowledgeGraph": {
"const": "workspace:.workspai/reports/workspace-knowledge-graph.json"
},
"workspaceSkillsIndex": {
"const": "workspace:.workspai/reports/workspace-skills-index.json"
},
"boundedGraphSearch": {
"const": "command:workspai workspace graph search <task-query> --scope project:<project> --limit 12 --json"
}
},
"anyOf": [
{
"properties": {
"workspaceModel": {
"const": "workspace:.workspai/reports/workspace-model.json"
},
"knowledgeGraph": {
"const": "workspace:.workspai/reports/workspace-knowledge-graph.json"
}
},
"required": [
"workspaceModel",
"knowledgeGraph"
]
},
{
"properties": {
"workspaceSkillsIndex": {
"const": "workspace:.workspai/reports/workspace-skills-index.json"
},
"boundedGraphSearch": {
"const": "command:workspai workspace graph search <task-query> --scope project:<project> --limit 12 --json"
}
},
"required": [
"workspaceSkillsIndex",
"boundedGraphSearch"
]
}
]
},
"protocol": {
"type": "object",
"additionalProperties": false,
"required": [
"mode",
"bootstrapCommand",
"verifyCommand",
"requiredReadOrder",
"sourcePolicy",
"degradedMode"
],
"properties": {
"mode": {
"const": "canonical-first"
},
"bootstrapCommand": {
"type": "string",
"minLength": 1
},
"verifyCommand": {
"type": "string",
"minLength": 1
},
"requiredReadOrder": {
"type": "array",
"minItems": 6,
"maxItems": 16,
"uniqueItems": true,
"items": {
"type": "string",
"minLength": 1
}
},
"sourcePolicy": {
"type": "object",
"additionalProperties": false,
"required": [
"liveSourceAuthority",
"workspaceEvidenceAuthority",
"broadScanBeforeBootstrap",
"sourceMutation",
"verificationClaims"
],
"properties": {
"liveSourceAuthority": {
"const": "exact-implementation"
},
"workspaceEvidenceAuthority": {
"const": "identity-topology-readiness-goals"
},
"broadScanBeforeBootstrap": {
"const": false
},
"sourceMutation": {
"const": "governed-only"
},
"verificationClaims": {
"const": "cli-evidence-only"
}
}
},
"degradedMode": {
"type": "object",
"additionalProperties": false,
"required": [
"discloseMissingEvidence",
"allowCompleteArchitectureClaims",
"allowReadOnlySourceInspection"
],
"properties": {
"discloseMissingEvidence": {
"const": true
},
"allowCompleteArchitectureClaims": {
"const": false
},
"allowReadOnlySourceInspection": {
"const": true
}
}
}
}
},
"hosts": {
"type": "array",
"minItems": 11,
"maxItems": 11,
"items": {
"$ref": "#/$defs/host"
}
},
"integrity": {
"type": "object",
"additionalProperties": false,
"required": [
"algorithm",
"projectContextHash",
"payloadHash",
"portable",
"absolutePathsEmitted"
],
"properties": {
"algorithm": {
"const": "sha256"
},
"projectContextHash": {
"$ref": "#/$defs/hash"
},
"payloadHash": {
"$ref": "#/$defs/hash"
},
"portable": {
"const": true
},
"absolutePathsEmitted": {
"const": false
}
}
}
},
"$defs": {
"hash": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"portablePath": {
"type": "string",
"minLength": 1,
"not": {
"pattern": "^(?:/|[A-Za-z]:[\\\\/])"
}
},
"host": {
"type": "object",
"additionalProperties": false,
"required": [
"id",
"discovery",
"entryFiles",
"status",
"managed"
],
"properties": {
"id": {
"enum": [
"generic",
"codex",
"claude",
"gemini",
"qwen",
"kimi",
"grok",
"copilot",
"cursor",
"windsurf",
"amazon-q"
]
},
"discovery": {
"enum": [
"native",
"adapter",
"portable-fallback"
]
},
"entryFiles": {
"type": "array",
"minItems": 1,
"maxItems": 3,
"uniqueItems": true,
"items": {
"$ref": "#/$defs/portablePath"
}
},
"status": {
"enum": [
"ready",
"degraded",
"blocked"
]
},
"managed": {
"type": "boolean"
},
"reason": {
"type": "string",
"minLength": 1
}
}
}
}
}