A discipline layer for Claude Code. Hooks at every tool boundary, a workflow that runs from intake to commit, and a small constitution the agent cannot bypass.
# Add to your Claude Code skills
git clone https://github.com/friedbotstudio/baselinebaseline is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by friedbotstudio. A discipline layer for Claude Code. Hooks at every tool boundary, a workflow that runs from intake to commit, and a small constitution the agent cannot bypass. It has 9 GitHub stars.
baseline's catalog security scan is still queued. You can run an instant dependency and prompt-injection check now with the "Scan for vulnerabilities" button above.
Clone the repository with "git clone https://github.com/friedbotstudio/baseline" and add it to your Claude Code skills directory (see the Installation section above).
baseline is primarily written in JavaScript. It is open-source under friedbotstudio on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh baseline against similar tools.
No comments yet. Be the first to share your thoughts!
Unlocks once the catalog security scan passes (runs nightly).
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
The deep catalog scan for this skill is still queued. Run an instant dependency check now instead.
A discipline layer for Claude Code. Hooks at every tool boundary, a workflow that runs from intake to commit, and a small constitution the agent cannot bypass.
Why · What · Quickstart · Inventory · Enforcement · Install reference · Contributing
npx @friedbotstudio/create-baseline ./your-project
[!WARNING] Public alpha — under active development. Expect breaking changes and shifting structural counts between releases. The constitution and the consent-gate semantics are stable; specifics in
docs/init/seed.md§16 may move. Pin to a specific@friedbotstudio/create-baseline@<version>for repeatable installs across a team.
Claude Code on a real codebase, left unattended, will eventually push to main without review, amend a published commit, mock the database in a test, or sign off on its own spec. None of these are bugs in Claude Code. They are the absence of an opinion your team already holds but has never written down anywhere the agent is obliged to obey it.
The baseline is that opinion, written down and enforced below the layer Claude can reach.
A repository overlay. It installs 26 hooks at Claude's tool boundaries, 58 skills, 1 subagent, 9 workflow tracks, 4 consent gates you type yourself, and 1 output style that changes how Claude writes back to you.
The hooks run as separate processes, outside Claude's tool boundary, before the tool call resolves. So "don't push", "don't --amend", "don't self-approve specs" stop being instructions Claude may follow and become operations it cannot perform. It cannot disable a hook with a flag, cannot write its own consent marker, and cannot reorder a phase without an exception /triage records on disk.
Three files carry the contract: docs/init/seed.md is the genesis prompt, CLAUDE.md is the in-session constitution, and the hooks and skills actuate both. Precedence runs seed.md > CLAUDE.md > implementation. Every claim points at a file you can open.
Read the docs: https://baseline.friedbotstudio.com/
npx @friedbotstudio/create-baseline ./your-project
cd ./your-project
Then, inside Claude Code:
# 1. Configure the project. Runs the recommender, asks the questions,
# flips .claude/project.json from configured: false to true.
/init-project
# 2. Triage a request. Picks the track, writes .claude/state/workflow.json
# with any exceptions the request needs.
/triage "your request in plain English"
# 3. Run the pipeline. /harness chains every non-gated phase in one
# invocation and yields at consent gates so you can review.
/harness
Three gates pause the workflow until you type the command yourself:
| Gate | When | What it authorizes |
|---|---|---|
/approve-direction <slug> |
after intake | the build direction, before scout/research/spec. The spec is then machine-reviewed, not human-gated |
/approve-swarm <slug> |
after /swarm-plan |
parallel dispatch of the planned waves |
/grant-commit |
before the commit lands | the workflow's commits. Under github-flow, a non-protected feature branch omits this gate: /commit pushes and opens a PR, handing back to you if either fails |
A fourth sits outside the pipeline: /grant-push opens a 5-minute window for git push on a protected branch (per project.json → git.protected_branches). Pushes on non-protected branches need no consent.
Each gate writes a short-lived consent marker via a UserPromptSubmit hook that runs before Claude is invoked on the body. Claude cannot forge the marker; the write-boundary guard validates it on disk before letting the approval token through.
| What | Count | Where it lives |
|---|---|---|
| Hooks on PreToolUse, PostToolUse, SessionStart, Stop, PreCompact, and UserPromptSubmit | 26 | .claude/hooks/ |
| Skills across fifteen categories: artifact drafting, workflow phases, phase workers, spec helpers, orchestration, memory, navigation, phase helpers, generators, audit, alternate tracks, shared globals, maintenance, sprint, and roadmap | 58 | .claude/skills/ |
Subagent — swarm-worker, executes pre-decided recipes within a declared write set |
1 | .claude/agents/ |
Workflow tracks — intake-full (the full 11-phase pipeline), spec-entry, tdd-quickfix, chore, freeform, epic, epic-child, org and power (both opt-in, off by default). Two sub-tracks (swarm-implementation, tdd-worker-chain) are referenced by selector nodes inside the canonical set |
9 + 2 sub | .claude/workflows.jsonl, enforced by track_guard |
Consent gates — three workflow-phase gates plus /grant-push at runtime. All user-typed, all structurally un-invokable by Claude |
3 + 1 | consent_gate_grant UserPromptSubmit hook |
MCP servers declared in .mcp.json — context7 (third-party API docs), plantuml (diagram render), playwright (cross-engine smoke), sprint-channel (coordination channel) |
4 | .mcp.json |
Output style — Baseline, written to ASD-STE100 Simplified Technical English, the controlled language used in aerospace maintenance manuals. One voice: a senior engineer telling another engineer what they concluded. It shapes Claude's chat messages only, and stays out of code, skill-owned files, and governance documents. Enabled by default through outputStyle in the shipped .claude/settings.json |
1 | .claude/output-styles/ |
This is the only installed component that changes behavior you might not want. Your own .claude/settings.local.json overrides it; set outputStyle there to any other style. To switch it off for the whole project, delete the single outputStyle line from .claude/settings.json. If you are upgrading, that file goes through /upgrade-project rather than an automatic merge, so a copy you have edited is never silently overwritten.
The roster counts are asserted by audit-baseline against docs/init/seed.md and the manifest on every build, and drift fails CI. The cross-doc scanner reads prose claims rather than table cells, so this table is maintained by hand against the same source of truth.
The 26 hooks declared in .claude/settings.json fire at Claude's tool boundaries: PreToolUse for Bash / Write / Edit / MultiEdit, PostToolUse for the same, plus SessionStart, Stop, PreCompact, and UserPromptSubmit. Each is a Node ESM script (.mjs) invoked as a subprocess outside Claude's reach. Their output is JSON; their exit decides whether the tool call proceeds.
The architectural rule is short: decisions live in main context; subagents only execute pre-decided recipes. The baseline ships exactly one subagent, swarm-worker, and its only sanctioned use is parallel dispatch of fully-specified recipes during /swarm-dispatch. Workers share your working tree by default; set swarm.isolation to give each one its own git worktree. Every other capability that might have been a subagent (code authoring, scenario design, scouting, security review, prose writing, UI design) is a skill running in main context with full conversation visibility.
The full pipeline runs intake → /approve-direction → scout → research → spec → tdd → simplify → security → integrate → document → archive → roadmap-sync → memory-sync → /grant-commit → commit. The closing sequence matters: archive moves the workflow's artifacts into docs/archive/<date>/<slug>/, roadmap-sync flips the tasks this work landed, and memory-sync curates the session's memory candidates into the canonical files — all before /grant-commit opens the consent window and commit lands the change. A track may skip phases it declares no node for, but it cannot reorder them.
Tracks declared in .claude/workflows.jsonl are enforced at the write boundary by track_guard, and node ordering inside each track is bin