Repository navigation
Compatibility
This page defines the TrueNorth-MCP v1 compatibility contract. It applies to the
runtime, the npm wrapper, the .agent/ workspace, MCP tools, and MCP resources.
Within v1, a patch or minor release preserves existing supported workspace inputs, advertised MCP tool names, resource URIs, required request fields, and documented success and error semantics. A minor release can add an optional field, tool, or resource. Clients must use MCP discovery and ignore additive fields they do not need.
A tool or resource can be conditional on a feature flag. It is supported only when
it appears in tools/list or resources/list for that workspace. The ontology
tools and truenorth://ontology depend on features.ontology. The Jev guardrail
tool depends on features.jev.
Jev remains disabled by default. To expose truenorth_guard_change, set features.jev: true
and provide TRUENORTH_JEV_ENDPOINT plus TRUENORTH_JEV_API_KEY through the operator
environment. The runtime rejects missing or unsafe activation before it advertises the tool.
The endpoint must be an absolute HTTPS URL with no embedded credentials, query, or fragment.
The API key remains outside repository configuration and is read for each request. Set
features.jev: false and reconnect to disable Jev.
Jev evaluates changes as an advisory layer. A network, authentication, parsing, timeout, or overload failure returns an annotation and never bypasses deterministic protected-path or secret blocks.
Jev release validation uses versioned fixtures and an explicit acceptance policy.
The checked-in policy remains pending and cannot pass production acceptance.
Provider credentials belong in the protected jev-provider-validation GitHub Environment.
See the validation operator guide for secret loading, spending controls, and manual execution.
Build support on main does not establish compatibility for an older published artifact.
A rename, removal, incompatible field-type change, altered required field, changed success or error semantics, or removed resource URI is a breaking change. Breaking changes require a new major version, release notes, a replacement when one exists, and command-first migration steps.
TrueNorth-MCP supports local development by individuals and small teams. The supported
deployment is one local stdio runtime governing one Git worktree, with one server holding
mutation rights. Additional servers may read, but their mutations return
writer_lease_conflict. Parallel mutating agents require separate Git worktrees, and Git
is the durable collaboration and history boundary.
Shared network-filesystem mutation, multi-user hosting, centralized policy enforcement, authentication or authorization, and compliance-record guarantees are outside the v1 compatibility contract. Operation receipts are bounded call results, not retained audit records. See the canonical operating model.
The npm wrapper supports macOS ARM64/x64 and Linux ARM64/x64. Native Windows is unsupported in v1; Windows users must run the wrapper and native binary in WSL.
The wrapper requires Node.js 18 or newer. CI exercises Node.js 18, 20, 22, 24, and 26. Compatibility with an end-of-life Node.js release does not extend that release's upstream security support. Production installations should use a Node.js release that still receives upstream security fixes.
A current .agent/ workspace has this layout contract:
version: "1"
areas:
config: [rules.yml]
spec: [requirements.md]
tasks: [state.json] # truenorth-lint: allow-relative-layout-path
memories: [lessons.md, glossary.md]The runtime accepts layout version "1". It requires these paths:
.agent/config/rules.yml.agent/spec/requirements.md.agent/tasks/state.json.agent/memories/lessons.md.agent/memories/glossary.md.agent/layout.yml.agent/profile.yml
The runtime logs an invalid layout as a warning and preserves its last valid layout cache. A missing layout remains valid for an unscaffolded workspace.
.agent/telemetry/runs.yml is no longer required or scaffolded. Existing telemetry
directories and files remain accepted as extra v1 content, but the runtime does not
write them. Before downgrading to a runtime that requires the placeholder, recreate it
if absent:
mkdir -p .agent/telemetry
test -e .agent/telemetry/runs.yml || printf 'runs: []\n' >.agent/telemetry/runs.ymlprofile.yml has no independent version field. Its v1 contract is one of these fixed
profile names:
| Profile | Grouping requirement |
|---|---|
issue-per-task |
Optional ticket grouping |
epic-based |
Required epic grouping |
milestone-based |
Required milestone grouping |
kanban |
No grouping requirement |
generic |
No grouping requirement |
An absent profile.yml resolves to issue-per-task. An unknown or malformed
profile is rejected without partial state.
Backlog ownership is independent from the methodology profile. The optional
.agent/tasks/backlog.yml can hold an authoritative local list or point to an
external provider.
An explicit local backlog uses contract version "1" and a backlog list:
version: "1"
ownership:
mode: local
backlog: []The list can contain project-defined issue or work-item records. A backlog file
without ownership retains the legacy local behavior.
An external backlog contains provider metadata only:
version: "1"
ownership:
mode: external
provider: github
url: https://github.com/example/project/issuesExternal ownership requires nonempty provider and url values and must not
contain a backlog field, including an empty list. Consumers obtain current work
from the declared provider. The runtime validates the ownership metadata but makes
no external tracker request.
ADR-0021 defines the runtime-owned cockpit documents:
| Document | Path | Resource MIME type |
|---|---|---|
| State | .agent/tasks/state.json |
application/json at truenorth://state
|
| Release plan | .agent/tasks/release-plan.json |
application/json at truenorth://cockpit
|
| Bug references | .agent/tasks/bugs.json |
not served as an MCP resource |
Each document root is a JSON object. Runtime mutations preserve unknown fields,
explicit null, arrays, and key insertion order. A malformed or non-object
document is rejected without a partial mutation.
The resource URIs remain stable. There is no YAML fallback for these three
documents. A workspace that still has legacy cockpit YAML must use
truenorth-mcp migrate-cockpit-json --check to identify its source and migration
constraints. That command is read-only; the runtime does not silently read or
convert legacy files.
The lifecycle tool continues to accept legacy phase names where the runtime maps
them to a current lifecycle phase. truenorth_record_task continues to accept
epic_id; it maps to group_id with group_kind: epic.
The following resource URIs are stable throughout v1:
truenorth://statetruenorth://cockpittruenorth://conventionstruenorth://adr-
truenorth://ontology, when the ontology feature is enabled
These active tool names are stable throughout v1:
truenorth_advance_phasetruenorth_record_tasktruenorth_verify_gatetruenorth_tdd_cycletruenorth_scaffold_projecttruenorth_record_bug-
truenorth_generate_ontologyandtruenorth_verify_ontology, when the ontology feature is enabled -
truenorth_guard_change, when the Jev feature is enabled
The catalog tools index_skills, get_skill, read_skill, search_skills,
build_skill_graph, read_graph, search_nodes, open_nodes,
get_dependencies, get_git_context, and validate_skill remain available for
the skill library. Use tools/list as the authoritative surface for a running
workspace, especially when feature flags are set.
Successful repository mutations retain their existing result fields and add a
receipt object:
{
"receipt": {
"schema_version": 1,
"operation": "truenorth_record_task",
"runtime_version": "1.0.3",
"correlation_id": "mcp-sha256:<digest>",
"changes": [
{
"path": ".agent/tasks/release-plan.json",
"sha256": "<digest of the exact resulting bytes>"
}
]
}
}changes is sorted by repository-relative path and contains only files written by
that call. It never contains absolute paths, commands, environment values, or file
content. correlation_id is a one-way digest of the MCP request identifier, not the
identifier itself. Consumers must ignore unknown receipt fields so minor releases can
extend the schema.
Gate operations add receipt.gate with status (pass, failure, or timeout),
expectation (zero or nonzero), duration_ms, and nullable exit_code.
Gate failures carry the same receipt in MCP error data beside remediation_hints.
The configured command is never returned. Mutation failures remain MCP errors and do
not return a success receipt.
A deprecation must identify its replacement, removal version, and migration action. A release that contains a breaking change must include the migration notes in its release material and pull request.
Certification covers only the exact client and extension versions recorded
below. Each pass requires lifecycle negotiation, tool and resource discovery, one
read, one truenorth_record_task mutation confined to a disposable workspace, and
clean shutdown against the packaged TrueNorth-MCP version in its evidence file.
| Client | Pinned version | Date | Result | Evidence |
|---|---|---|---|---|
| MCP Inspector CLI | 2.8.0 | 2026-09-27 | Certified | mcp-inspector.json |
| Oh My Pi | 18.2.11 | 2026-09-25 | Certified | oh-my-pi.json |
| OpenCode | 2.0.16 | 2026-09-25 | Certified | opencode.json |
| VS Code with GitHub Copilot Chat | 1.139.1 with 0.67.0 | 2026-09-25 | Certified | vscode-copilot.json |
| Kiro | 1.1.70 | 2026-09-26 | Certified | kiro.json |
| Zed | 1.21.0 | 2026-09-26 | Unsupported | zed.json |
| Croft IDE | 0.1.700 | 2026-09-25 | Unsupported | croft.json |
The machine-readable client matrix is the authoritative status index. The repository README contains the repeatable VS Code disposable-profile procedure. The VS Code certificate records one non-blocking Copilot JSON Schema warning tracked in issue #412.
Zed 1.21.0 initializes the released TrueNorth-MCP 1.0.2 stdio
artifact, discovers all 19 tools, completes get_skill and
truenorth_record_task, and shuts the server down cleanly. Its native MCP
integration does not request resources/list or expose resources/read, so it
does not satisfy the full certification contract. The
Zed assessment records the project-local
configuration, protocol trace, disposable mutation, and isolation evidence.
Issue #427 tracks the
assessment.
Croft 0.1.700 can initialize a local stdio server, discover tools, and invoke a
predeclared zero-argument read tool. It cannot complete this certification
contract because its client exposes no MCP resources and its deterministic
command model can supply at most one string argument, while
truenorth_record_task requires both task_name and verify_command. The
Croft assessment records the partial
interoperability. Issue #406
tracks the assessment, and
croft#685 tracks forced sidecar
shutdown.
- Commit or back up the existing workspace.
- Check
.agent/layout.ymlhasversion: "1"and requirestasks/state.json. - Run
truenorth-mcp migrate-cockpit-json --checkfor a workspace that has legacy cockpit YAML. It reports the selected source, unsupported YAML constructs, and potential comment loss without writing. - Do not expect the runtime to read, rename, or convert legacy cockpit YAML during normal operations. Preserve the original workspace until the explicit migration workflow is complete and reviewed.
- Start the runtime and inspect
resources/list, then readtruenorth://stateandtruenorth://cockpitbefore mutation. They serve JSON with their stable URIs.
Use the compatibility issue form for a dropped field, failed JSON migration analysis, invalid phase mapping, or unexpected resource result.
The runtime tests enforce this policy:
-
engine::agent_ws::layout::testsvalidates layout version and required paths. -
engine::profile::testsvalidates the default and five supported profiles. -
engine::backlog::testsvalidates missing, legacy, local, external, and invalid backlog ownership declarations. -
cli_diagnostics::external_backlog_rejects_cached_issue_entriesvalidates that--check-configrejects cached entries under external ownership. -
tools::scaffold::tests::scaffold_emits_the_agent_tree_and_root_docsvalidates that a fresh project receives explicit local backlog ownership. -
engine::cockpit::testsvalidates JSON cockpit mutations, source preservation, and state and release-plan field preservation. -
resources::testsandresources::prop_testsvalidate resource URI stability, JSON MIME types,.agent/backing paths, and arbitrary unknown state fields. -
integration_testsexercises the MCP client surface end to end.