@blundergoat/goat-flow
Version:
AI coding agent harness and local dashboard for Claude Code, OpenAI Codex, Google Antigravity, and GitHub Copilot - setup audits, guardrails, structured skills, deny hooks, and persistent learning loops.
218 lines (207 loc) • 8.91 kB
JSON
{
"_snapshot_note": "Frozen copy of workflow/manifest.json as it shipped at v1.2.0 release. Immutable. CHANGELOG lint compares version-tagged numeric claims against this file, not the live manifest. The live source of truth stays at workflow/manifest.json. See workflow/manifest-snapshots/README.md for the frozen-copy contract.",
"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.2.0",
"required_files": [
".goat-flow/.gitignore",
".goat-flow/config.yaml",
".goat-flow/tasks/.gitignore",
".goat-flow/tasks/README.md",
".goat-flow/logs/quality/README.md",
".goat-flow/logs/critiques/README.md",
".goat-flow/scratchpad/.gitignore",
".goat-flow/scratchpad/README.md",
".goat-flow/lessons/README.md",
".goat-flow/footguns/README.md",
".goat-flow/skill-reference/skill-preamble.md",
".goat-flow/skill-reference/skill-conventions.md",
".goat-flow/skill-reference/skill-quality-testing.md",
".goat-flow/skill-reference/skill-quality-testing/tdd-iteration.md",
".goat-flow/skill-reference/skill-quality-testing/adversarial-framing.md",
".goat-flow/skill-reference/skill-quality-testing/deployment.md",
".goat-flow/architecture.md",
".goat-flow/code-map.md",
".goat-flow/glossary.md",
".goat-flow/patterns.md"
],
"required_dirs": [
".goat-flow/decisions/",
".goat-flow/footguns/",
".goat-flow/lessons/",
".goat-flow/logs/sessions/",
".goat-flow/logs/quality/",
".goat-flow/logs/critiques/",
".goat-flow/scratchpad/",
".goat-flow/skill-reference/",
".goat-flow/tasks/"
],
"directory_purposes": {
".goat-flow/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/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/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/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/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-reference/": "Committed shared cold-path skill doctrine copied from workflow templates. Holds skill-preamble.md, skill-conventions.md, and skill-quality-testing.md (index pointing at the skill-quality-testing/ subdir with tdd-iteration.md, adversarial-framing.md, deployment.md per ADR-023); durable reference state used across sessions, not transient notes.",
".goat-flow/tasks/": "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.",
".geminiignore": "Excludes secret/sensitive paths from Gemini context."
},
"never_create": [],
"skills": {
"canonical": [
"goat",
"goat-debug",
"goat-plan",
"goat-review",
"goat-critique",
"goat-security",
"goat-qa"
],
"references": {
"goat-security": [
"references/common-threats.md",
"references/auth-authz.md",
"references/file-upload-and-paths.md",
"references/secrets-and-data-exposure.md",
"references/dependency-and-supply-chain.md",
"references/cicd-and-agent-surfaces.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"
]
},
"agents": {
"claude": {
"name": "Claude Code",
"instruction_file": "CLAUDE.md",
"skills_dir": ".claude/skills/",
"hooks_dir": ".claude/hooks/",
"settings": ".claude/settings.json",
"hook_config_file": ".claude/settings.json",
"deny_hook": ".claude/hooks/deny-dangerous.sh",
"deny_mechanism": {
"type": "both",
"settings_path": ".claude/settings.json",
"script_path": ".claude/hooks/deny-dangerous.sh"
},
"local_pattern": "*/CLAUDE.md",
"hook_events": {
"pre_tool": "PreToolUse",
"post_turn": "Stop"
},
"hooks": ["deny-dangerous.sh"]
},
"codex": {
"name": "Codex",
"instruction_file": "AGENTS.md",
"skills_dir": ".agents/skills/",
"hooks_dir": ".codex/hooks/",
"settings": ".codex/config.toml",
"hook_config_file": ".codex/hooks.json",
"deny_hook": ".codex/hooks/deny-dangerous.sh",
"deny_mechanism": {
"type": "deny-script",
"path": ".codex/hooks/deny-dangerous.sh"
},
"local_pattern": ".github/instructions/*.md",
"hook_events": {
"pre_tool": "PreToolUse",
"post_turn": null
},
"hooks": ["deny-dangerous.sh"]
},
"gemini": {
"name": "Gemini CLI",
"instruction_file": "GEMINI.md",
"skills_dir": ".agents/skills/",
"hooks_dir": ".gemini/hooks/",
"settings": ".gemini/settings.json",
"hook_config_file": ".gemini/settings.json",
"deny_hook": ".gemini/hooks/deny-dangerous.sh",
"deny_mechanism": {
"type": "both",
"settings_path": ".gemini/settings.json",
"script_path": ".gemini/hooks/deny-dangerous.sh"
},
"local_pattern": "*/GEMINI.md",
"hook_events": {
"pre_tool": "BeforeTool",
"post_turn": "AfterAgent"
},
"hooks": ["deny-dangerous.sh"]
},
"copilot": {
"name": "Copilot CLI",
"instruction_file": ".github/copilot-instructions.md",
"skills_dir": ".github/skills/",
"hooks_dir": ".github/hooks/",
"hook_config_file": ".github/hooks/hooks.json",
"deny_hook": ".github/hooks/deny-dangerous.sh",
"deny_mechanism": {
"type": "deny-script",
"path": ".github/hooks/deny-dangerous.sh"
},
"local_pattern": ".github/instructions/**/*.instructions.md",
"hook_events": {
"pre_tool": "preToolUse",
"post_turn": null
},
"hooks": ["hooks.json", "deny-dangerous.sh"]
}
},
"instruction_file": {
"line_target": 120,
"line_limit": 150,
"required_sections": [
"Essential Commands",
"Execution Loop",
"Autonomy Tiers",
"Definition of Done",
"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": [
"help",
"home",
"projects",
"prompts",
"quality",
"settings",
"setup",
"workspace"
]
},
"snapshot_facts": {
"_note": "Numeric facts as shipped at v1.2.0. Used by CHANGELOG lint to validate claims inside the `## v1.2.0` section of CHANGELOG.md.",
"skills_total": 7,
"skills_functional_count": 6,
"checks_setup": 13,
"checks_agent": 4,
"checks_build": 17,
"checks_harness": 16,
"checks_total": 33,
"dashboard_views_count": 8,
"presets_count": 22
}
}