{
  "description": "Expected goat-flow project structure. Source of truth for setup, audit, and upgrade paths. Not a JSON Schema - this is a manifest of what should exist on disk.",
  "version": "1.12.1",

  "required_files": [
    ".goat-flow/.gitignore",
    ".goat-flow/config.yaml",
    ".goat-flow/plans/.gitignore",
    ".goat-flow/plans/README.md",
    ".goat-flow/logs/quality/README.md",
    ".goat-flow/logs/events/README.md",
    ".goat-flow/logs/critiques/README.md",
    ".goat-flow/logs/review/README.md",
    ".goat-flow/logs/security/README.md",
    ".goat-flow/scratchpad/.gitignore",
    ".goat-flow/scratchpad/README.md",
    ".goat-flow/learning-loop/lessons/README.md",
    ".goat-flow/learning-loop/footguns/README.md",
    ".goat-flow/learning-loop/decisions/README.md",
    ".goat-flow/logs/sessions/.gitkeep",
    ".goat-flow/skill-docs/README.md",
    ".goat-flow/skill-docs/skill-preamble.md",
    ".goat-flow/skill-docs/skill-conventions.md",
    ".goat-flow/skill-docs/playbooks/README.md",
    ".goat-flow/skill-docs/playbooks/browser-use.md",
    ".goat-flow/skill-docs/playbooks/changelog.md",
    ".goat-flow/skill-docs/playbooks/code-comments.md",
    ".goat-flow/skill-docs/playbooks/gruff-code-quality.md",
    ".goat-flow/skill-docs/playbooks/observability.md",
    ".goat-flow/skill-docs/playbooks/page-capture.md",
    ".goat-flow/skill-docs/playbooks/release-notes.md",
    ".goat-flow/skill-docs/skill-quality-testing/README.md",
    ".goat-flow/skill-docs/skill-quality-testing/tdd-iteration.md",
    ".goat-flow/skill-docs/skill-quality-testing/adversarial-framing.md",
    ".goat-flow/skill-docs/skill-quality-testing/deployment.md",
    ".goat-flow/hooks/deny-dangerous.sh",
    ".goat-flow/hooks/gruff-code-quality.sh",
    ".goat-flow/hooks/post-turn-safety.sh",
    ".goat-flow/hooks/deny-dangerous/patterns-shell.sh",
    ".goat-flow/hooks/deny-dangerous/patterns-paths.sh",
    ".goat-flow/hooks/deny-dangerous/patterns-writes.sh",
    ".goat-flow/hooks/deny-dangerous/deny-dangerous-self-test.sh",
    ".goat-flow/architecture.md",
    ".goat-flow/code-map.md",
    ".goat-flow/glossary.md",
    ".goat-flow/learning-loop/patterns/README.md"
  ],

  "required_dirs": [
    ".goat-flow/learning-loop/decisions/",
    ".goat-flow/learning-loop/footguns/",
    ".goat-flow/learning-loop/lessons/",
    ".goat-flow/learning-loop/patterns/",
    ".goat-flow/logs/sessions/",
    ".goat-flow/logs/quality/",
    ".goat-flow/logs/events/",
    ".goat-flow/logs/critiques/",
    ".goat-flow/logs/review/",
    ".goat-flow/logs/security/",
    ".goat-flow/scratchpad/",
    ".goat-flow/skill-docs/",
    ".goat-flow/skill-docs/playbooks/",
    ".goat-flow/skill-docs/skill-quality-testing/",
    ".goat-flow/hooks/",
    ".goat-flow/hooks/deny-dangerous/",
    ".goat-flow/plans/"
  ],

  "directory_purposes": {
    ".goat-flow/learning-loop/decisions/": "Committed ADR history. Durable architectural, product-surface, and tooling decisions with context and rationale; part of the project's persistent knowledge, not session-scoped WIP.",
    ".goat-flow/learning-loop/footguns/": "Committed architectural trap records. Use for codebase or system footguns that exist independent of one agent mistake; entries should carry grep-friendly file evidence and remain part of durable project knowledge.",
    ".goat-flow/learning-loop/lessons/": "Committed behavioural mistake records. Use for real agent or workflow mistakes learned from incidents; these entries are durable project knowledge, not local session notes.",
    ".goat-flow/logs/sessions/": "Workspace-local, gitignored-by-design session logs. Continuity notes for the current checkout only; not part of committed project history. Only .gitkeep is committed.",
    ".goat-flow/logs/quality/": "Workspace-local, gitignored-by-design quality report history. Saved agent quality reports (JSON) and their captured prose companions (MD); feeds `goat-flow quality history`, `goat-flow quality diff`, and prior same-agent prompt context. Only README.md is committed.",
    ".goat-flow/logs/events/": "Workspace-local, gitignored-by-design evidence envelope event log. Dashboard and future runtime producers append redacted JSONL records for local continuity; durable project knowledge must be promoted to lessons/, footguns/, or decisions/. Only README.md is committed.",
    ".goat-flow/logs/critiques/": "Workspace-local, gitignored-by-design critique run history. Phase 3 snapshots from `/goat-critique` runs persisted before the Phase 4 blocking gate so work survives session interruptions. Only README.md is committed.",
    ".goat-flow/logs/review/": "Workspace-local, gitignored-by-design review artifact history. Refutation ledgers and cross-model refuter outputs from `/goat-review` runs are stored here so review integrity evidence survives session interruptions. Only README.md is committed.",
    ".goat-flow/logs/security/": "Workspace-local, gitignored-by-design security assessment history. Saved `/goat-security` run outputs for reference across sessions. Only README.md is committed.",
    ".goat-flow/scratchpad/": "Local, gitignored-by-design working notes. Session-scoped WIP; not a persistence gap. Durable project knowledge belongs in lessons/, footguns/, or decisions/. Transient continuity notes belong in logs/sessions/. Only README.md, .gitignore, and .gitkeep are committed.",
    ".goat-flow/skill-docs/": "Committed shared meta references composed into every goat-flow skill at scoring and runtime. Holds README.md, skill-preamble.md (Proof Gate, OBSERVED/INFERRED tagging, evidence discipline; loaded every skill invocation), skill-conventions.md (footgun/lesson entry shapes, frontmatter contracts; loaded on full-depth). These describe the universal contract every skill inherits - adding a new file here commits every skill to inherit it.",
    ".goat-flow/skill-docs/playbooks/": "Committed standalone playbooks for tools and capabilities available to coding agents. Holds README.md as the capability-playbook index, browser-use.md for browser evidence capture, changelog.md for CHANGELOG.md discipline, code-comments.md for inline-comment discipline, gruff-code-quality.md for gruff analyzer triage/fix/verification workflow across gruff-go/gruff-rs/gruff-ts/gruff-php/gruff-py, observability.md for instrumentation discipline, page-capture.md for Playwright page-capture usage tiers, and release-notes.md for per-release narrative discipline. Loaded on-demand by skills/agents - never composed into a skill at scoring time.",
    ".goat-flow/skill-docs/skill-quality-testing/": "Committed skill-authoring methodology pack. README.md indexes the pack; tdd-iteration.md, adversarial-framing.md, and deployment.md cover skill TDD, pressure-testing, and deployment discipline.",
    ".goat-flow/hooks/": "Committed central hook runtime. Holds deny-dangerous.sh, gruff-code-quality.sh, post-turn-safety.sh, and hook-specific policy modules under subdirectories.",
    ".goat-flow/hooks/deny-dangerous/": "Committed shared hook policy store sourced by each agent's deny-dangerous.sh dispatcher. Holds the destructive-shell, secret-path, repository-write policy modules and the central deny-dangerous self-test.",
    ".goat-flow/plans/": "Local, gitignored-by-design milestone files and plan subdirs. Session-scoped coordination state; not a persistence gap. Only README.md and .gitignore are committed."
  },

  "optional_files": {
    "_note": "Optional files created when the project needs them, not during base setup.",
    ".cursorignore": "Excludes secret/sensitive paths from Cursor context."
  },

  "never_create": [],

  "skills": {
    "canonical": [
      "goat",
      "goat-debug",
      "goat-plan",
      "goat-review",
      "goat-critique",
      "goat-security",
      "goat-qa"
    ],
    "references": {
      "goat-plan": [
        "references/milestone-examples.md",
        "references/issue-format.md"
      ],
      "goat-critique": [
        "references/rubric-examples.md",
        "references/sub-agent-directives.md"
      ],
      "goat-review": [
        "references/examples.md",
        "references/refuter-spec.md",
        "references/automated-review.md"
      ],
      "goat-security": [
        "references/common-threats.md",
        "references/identity-and-data.md",
        "references/file-upload-and-paths.md",
        "references/supply-chain-and-cicd.md",
        "references/project-policy-template.md"
      ]
    },
    "stale_names": [
      "goat-audit",
      "goat-investigate",
      "goat-onboard",
      "goat-reflect",
      "goat-resume",
      "goat-context",
      "goat-simplify",
      "goat-refactor",
      "goat-preflight",
      "goat-research",
      "goat-sbao",
      "goat-test"
    ]
  },

  "hooks": {
    "stale_names": [
      "guard-common.sh",
      "guard-destructive-shell.sh",
      "guard-secret-paths.sh",
      "guard-repository-writes.sh",
      "guardrails-self-test.sh",
      "deny-dangerous.self-test.sh",
      "post-turn-validate.sh",
      "plan-checkbox-guard.sh"
    ]
  },

  "agents": {
    "claude": {
      "name": "Claude Code",
      "instruction_file": "CLAUDE.md",
      "skills_dir": ".claude/skills/",
      "capabilities": {
        "terminal_binary": "claude",
        "setup_surfaces": ["CLAUDE.md", ".claude/settings.json"],
        "prompt_invocation_style": "slash",
        "skill_source": "installed"
      },
      "hooks_dir": ".goat-flow/hooks/",
      "settings": ".claude/settings.json",
      "hook_config_file": ".claude/settings.json",
      "deny_hook": ".goat-flow/hooks/deny-dangerous.sh",
      "deny_mechanism": {
        "type": "both",
        "settings_path": ".claude/settings.json",
        "script_path": ".goat-flow/hooks/deny-dangerous.sh"
      },
      "local_pattern": "*/CLAUDE.md",
      "hook_events": {
        "pre_tool": "PreToolUse",
        "post_turn": "Stop"
      },
      "hooks": [
        "deny-dangerous.sh",
        "gruff-code-quality.sh",
        "post-turn-safety.sh"
      ]
    },
    "codex": {
      "name": "Codex",
      "instruction_file": "AGENTS.md",
      "skills_dir": ".agents/skills/",
      "capabilities": {
        "terminal_binary": "codex",
        "setup_surfaces": [
          "AGENTS.md",
          ".codex/config.toml",
          ".codex/hooks.json"
        ],
        "prompt_invocation_style": "dollar",
        "skill_source": "agent-mirror"
      },
      "hooks_dir": ".goat-flow/hooks/",
      "settings": ".codex/config.toml",
      "hook_config_file": ".codex/hooks.json",
      "deny_hook": ".goat-flow/hooks/deny-dangerous.sh",
      "deny_mechanism": {
        "type": "both",
        "settings_path": ".codex/config.toml",
        "script_path": ".goat-flow/hooks/deny-dangerous.sh"
      },
      "local_pattern": ".github/instructions/*.md",
      "hook_events": {
        "pre_tool": "PreToolUse",
        "post_turn": null
      },
      "hooks": ["deny-dangerous.sh"]
    },
    "antigravity": {
      "name": "Antigravity",
      "instruction_file": "AGENTS.md",
      "skills_dir": ".agents/skills/",
      "capabilities": {
        "terminal_binary": "agy",
        "setup_surfaces": [
          "AGENTS.md",
          ".agents/skills/",
          ".agents/hooks.json",
          ".goat-flow/hooks/"
        ],
        "prompt_invocation_style": "slash",
        "skill_source": "agent-mirror"
      },
      "hooks_dir": ".goat-flow/hooks/",
      "hook_config_file": ".agents/hooks.json",
      "deny_hook": ".goat-flow/hooks/deny-dangerous.sh",
      "deny_mechanism": {
        "type": "deny-script",
        "path": ".goat-flow/hooks/deny-dangerous.sh"
      },
      "local_pattern": "*/AGENTS.md",
      "hook_events": {
        "pre_tool": "PreToolUse",
        "post_turn": null
      },
      "hooks": [
        "deny-dangerous.sh",
        "gruff-code-quality.sh"
      ]
    },
    "copilot": {
      "name": "Copilot CLI",
      "instruction_file": ".github/copilot-instructions.md",
      "skills_dir": ".github/skills/",
      "capabilities": {
        "terminal_binary": "copilot",
        "setup_surfaces": [
          ".github/copilot-instructions.md",
          ".github/instructions/**/*.instructions.md",
          ".github/hooks/hooks.json"
        ],
        "prompt_invocation_style": "slash",
        "skill_source": "github-mirror"
      },
      "hooks_dir": ".goat-flow/hooks/",
      "hook_config_file": ".github/hooks/hooks.json",
      "deny_hook": ".goat-flow/hooks/deny-dangerous.sh",
      "deny_mechanism": {
        "type": "deny-script",
        "path": ".goat-flow/hooks/deny-dangerous.sh"
      },
      "local_pattern": ".github/instructions/**/*.instructions.md",
      "hook_events": {
        "pre_tool": "preToolUse",
        "post_turn": null
      },
      "hooks": ["deny-dangerous.sh", "gruff-code-quality.sh"]
    }
  },

  "instruction_file": {
    "line_target": 125,
    "line_limit": 150,
    "required_sections": [
      "Truth Order",
      "Autonomy Tiers",
      "Hard Rules",
      "Key Resources",
      "Essential Commands",
      "Execution Loop",
      "Definition of Done",
      "Artifact Routing",
      "Router Table"
    ],
    "version_header_pattern": "# {FILE} - v{VERSION} ({DATE})"
  },

  "facts": {
    "_note": "Static facts only. Derived facts (check counts, skill names, version, presets count) are computed by src/cli/manifest/manifest.ts at load time. `goat-flow manifest --check` validates static facts against observed state (src/dashboard/views/*.html).",
    "dashboard_views": [
      "about",
      "coming-soon",
      "home",
      "hooks",
      "projects",
      "prompts",
      "quality",
      "settings",
      "setup",
      "skills",
      "plans",
      "workspace"
    ]
  }
}
