Quality contracted in,
not audited after.
A DevContract defines what good looks like before an AI agent writes a line. Standards set. Scope bounded. Evidence required. The agent works inside the contract — not around it.
AI development moves faster than review can follow.
Agentic development generates code, configuration, and infrastructure changes at a rate no traditional review process can match. The answer isn't to slow the agent — it's to define the contract the agent must satisfy before it starts.
Speed without structure fails
An agent that writes fast but commits secrets, skips tests, or misconfigures MCP servers doesn't accelerate delivery — it accelerates risk.
Post-audit is too late
Security review after the PR is too late. A DevContract is a pre-condition, not a post-check. The agent doesn't start without it.
Evidence, not assertions
A contract without evidence is a wish list. ticketyboo produces signed scan evidence that proves each clause was met — or flags which weren't.
Scan → Gap → Contract → Evidence → Report
Five stages from raw repo to governed, evidence-backed development brief. Each stage builds on the last. Nothing moves forward without the previous stage passing.
Deep scan
7 analysis layers: dependency, secret, SAST, IaC, license, quality, and agent security. Full file tree analysis via GitHub Trees API.
Gap analysis
Findings mapped to DevContract clauses. Each finding either satisfies, violates, or is excepted against a named clause.
Contract definition
devcontract.json committed to repo. Named clauses. Quality gates. Agent policy. Explicit exceptions with expiry dates and approvers.
Evidence generation
Scan results linked to contract clauses. Report JSON stored in S3 with scan ID. Traceable, reproducible, shareable.
Public report
Human-readable report at ticketyboo.dev/r/{scan-id}. Pass/fail per clause. Share with your team, your client, or your board.
What a DevContract enforces
DevContract v1 ships with a standard clause library. Every clause maps to a scanner layer finding, has a severity threshold, and references the standard it satisfies.
| Clause | Title | Category | Blocks at | Standard ref |
|---|---|---|---|---|
| DC-S01 | No committed secrets | security | critical | CWE-798 |
| DC-S02 | No .env files committed | security | high | CWE-312 |
| DC-A01 | No enableAllProjectMcpServers | agent_security | critical | CVE-2026-21852 / MCP03 |
| DC-A02 | alwaysAllow restricted to approved tools | agent_security | high | OWASP MCP03 |
| DC-A03 | Sensitive agent configs in .gitignore | agent_security | medium | OWASP MCP07 |
| DC-G01 | README present | governance | medium | — |
| DC-G02 | CI pipeline present | governance | medium | — |
| DC-G03 | Tests present | governance | medium | — |
| DC-Q01 | Linting configuration present | quality | low | — |
| DC-D01 | Dependency manifest present | dependency | medium | — |
Full clause library and JSON Schema: devcontract-v1.schema.json ↗
MCP security baked into the contract.
DevContract v1 includes an agent_policy block.
Explicit. Version-controlled. Auditable. No more security decisions implicit in someone's
local IDE config.
Implicit permissions
enableAllProjectMcpServers: true silently committed. alwaysAllow lists growing with every sprint. No record of who approved what or when. CVE-2026-21852 waiting to happen.
Explicit, expiring policy
Every approved tool listed. Justification required in writing. Exceptions expire and must be renewed. Scanner flags any config that drifts from the contract. Evidence of compliance at every scan.
agent_policy fields
prohibit_enable_all_project_mcp_servers — enforce CVE-2026-21852 fix.
approved_always_allow_tools — explicit allowlist, requires justification.
require_gitignore_coverage — mandatory .gitignore entries.
allow_agent_configs_in_repo — opt-in or block entirely.
Common failures we detect
Hardcoded API keys in MCP configs (CVE-2025-59536 class).
Internal IP addresses in server URLs.
Personal absolute paths committed to shared configs.
Steering docs containing sensitive internal context.
A contract is a committed file.
devcontract.json lives in your repo root.
It's version-controlled, reviewed in PRs, and referenced by every scan.
// devcontract.json — commit this to your repo root { "version": "1", "project": { "name": "my-project", "repo": "https://github.com/my-org/my-project" }, "gates": { "max_severity_allowed": "medium", "max_findings_by_severity": { "critical": 0, "high": 0 }, "min_health_score": 75, "required_layers": ["secret", "agent_security", "sast"] }, "agent_policy": { "prohibit_enable_all_project_mcp_servers": true, "approved_always_allow_tools": ["read_file", "list_files"], "approved_always_allow_justification": "Read-only only.", "require_gitignore_coverage": true }, "clauses": [ { "id": "DC-S01", "title": "No committed secrets", "category": "security", "severity_threshold": "critical", "requirement": "No credentials committed in any file." }, { "id": "DC-A01", "title": "No enableAllProjectMcpServers", "category": "agent_security", "owasp_ref": "MCP03", "severity_threshold": "critical", "requirement": "enableAllProjectMcpServers must be absent or false." } ] }