Coding Friendv0.42.4
esc
navigate openesc close

00 · toolkit

make your coding agent work like an engineer.

Coding Friend adds skills, agents, and hooks to Claude Code, Codex, and the agents you already use — plan, implement, review, ship, with project memory underneath.

host · claude code

memory · mcp

plugin · v0.42.4

💡 If you have problems with CF, use /cf-help to get help or ask in the GitHub Discussions.

Coding Friend adds skills, agents, and hooks to the tools you already use. You get plan → implement → review → commit, with project knowledge in docs/ and learning notes in ~/.coding-friend/learn/. A memory system runs underneath, along with useful hooks and mechanisms to protect your privacy and security.

How Coding Friend works: you invoke /cf-* skills, skills dispatch agents, agents write to your repo; hooks intercept skills, agents record to docs/, and CF Memory (MCP) reads and writes docs/

harness only

without cf

You can only rely on the harness and default settings of the tool you’re using, or sometimes no harness at all. Even small tool changes can affect your usual workflow without you noticing.

standards · memory

with cf

Besides the harness for the tool you’re using, CF suggests best-practice standards for daily workflows—from planning and code reviews to bug fixes, research, and optimization. CF also includes a memory system that helps agents avoid spending too many tokens on topics they’ve worked on before. You can also build a learning hub for readers as you work with CF; the system will help summarize everything and turn it into a polished website.

🤝 Supported Tools

Coding Friend installs on the host you already use.

HostSupportCommandNotes
Claude Code100%cf installDefault.
oh-my-pi95%cf install --agent ompBeta. Skills come from the Claude plugin cache.
Codex77%cf install --agent codexBeta. Invoke as $cf-*. Partial hooks and auto-approve.
Antigravity73%cf install --agent agyBeta. Requires agy >= 1.1.0. No memory auto-capture.
Cursor100%comes with ClaudeRuns Claude Code / Codex underneath.
Grok Build100%comes with ClaudeSame as Cursor.
ZCode100%via github marketplacenot tested 100%

% = Claude is a baseline with all skills, agents, hooks. Some are Claude only: statusline, session save/restore (/cf-session), and task tracking. Other hosts ship their own equivalents, so they are not counted.

📦 Install

You need Node 20+ and a supported host.

npm i -g coding-friend-cli
# If `cf` is taken, use `cdf`

cf install               # Claude Code (default)
cf install --agent codex # or 'omp', 'agy'

cf init                  # per project: docs/, .coding-friend/config.json
cf update                # later: pull the newest plugin

# Need help?
cf help

# Get Started in any project
cf init

Scope with --user | --project | --local. Host aliases: --codex / --omp / --agy. Then use /cf-help inside your agent to ask anything about CF.

After cf init or working with CF, a folder docs/ is created inside your project with nested folders for plans, memory, research, reviews,... and more.

Manual install

plugin marketplace add dinhanhthi/coding-friend
plugin install coding-friend@coding-friend-marketplace

Or ask your agent to install it.

✨ Features

Skills are slash commands (/cf-*) or auto-invoked when a matching situation appears. Settings that live in config.json — run cf config and follow the instructions there. To extend a built-in skill, see Custom Guides.

🔁 Workflow

You plan, implement, review, commit, then ship. Bugs loop through /cf-fix and cf-sys-debug.

The daily workflow: /cf-plan hands tasks to cf-tdd/implement, the diff goes to /cf-review, then /cf-commit and /cf-ship; under the hood cf-explorer and cf-planner serve /cf-plan, cf-implementer runs tasks, cf-reviewer dispatches 5 specialists, cf-writer writes docs; bugs loop through /cf-fix and cf-sys-debug; after the merge, cf-verification, /cf-remember, and /cf-learn run

🗺️ Plan & build

🐛 Fix & debug

🚀 Review & ship

External review: /cf-review runs --codex, --gemini, --cursor, or --grok in parallel and merges; or hand off manually — /cf-review-out writes a prompt for any AI, /cf-review-in reads the results back

💡 Knowledge

📌 Context & session

❓ Help

🧠 Memory

Every session starts from scratch. CF Memory is persistent, searchable project knowledge. Markdown in docs/memory/ is the source of truth. Three search tiers degrade gracefully (SQLite → MiniSearch → grep). Use it from other LLM tools via the MCP server (cf mcp). Run cf config for tier, embeddings, and capture.

CF Memory architecture: a Claude Code session calls the MCP server over stdio; searches go direct to tier 1 SQLite (FTS5 + vectors), over HTTP/UDS to the Hono daemon serving tier 2 MiniSearch (BM25 + fuzzy), or direct to tier 3 grep; SQLite falls back to the daemon and the daemon falls back to grep; all three tiers read the markdown files in docs/memory/

✅ Auto-approve

Permission gate that auto-approves safe tool calls and working-dir edits. Unknown tools defer to Claude's native permission flow / auto mode unless you opt in to the LLM classifier via autoApproveLLM. Run cf config.

Auto-approve pipeline: rule-based checks, then working-dir checks, then the opt-in LLM classifier (Claude only)

You can extend the Bash allow/deny lists in config:

{
  "autoApprove": true,
  // extra command prefixes to auto-approve. Merged across global + local
  "autoApproveAllowExtra": ["cargo check", "npm test"],
  // use below setting to bypass CF auto-approve and let Claude Code handle them.
  "autoApproveIgnore": ["cargo test", "cargo build"],
  // opt-in Sonnet classifier for unknown tools (default: defer to Claude native)
  "autoApproveLLM": false
}

⚠️ Not 100% safe: CF auto-approve is an additional layer that helps reduce prompts, but it doesn't guarantee 100% safety. You can still trigger unsafe actions if you use the wrong command or if the LLM classifier (when enabled) makes a mistake.

🛡️ Security

Layered prompt-injection defense. Three layers: isolation, extraction, then alert. Fetched content is data, never instructions.

Security layers: isolation of fetched content as data, extraction of facts only, then alert on injection attempts

📟 Statusline

Claude only. Run cf statusline to install the renderer.

Statusline

🧭 Agents

Skills dispatch agents as subagents that run in their own context.

AgentModelDoesDispatched by
cf-explorer (source)haikuMaps the repo and writes context files/cf-plan, /cf-fix, /cf-ask
cf-planner (source)inheritCompares approaches and breaks work into tasks/cf-plan
cf-implementer (source)inheritWrites the code (TDD with --add-tests)/cf-plan, /cf-fix, cf-tdd
cf-reviewer (source)inheritOrchestrates the five-specialist review/cf-review, /cf-ship
cf-reviewer-plan (source)sonnetChecks the diff against the plancf-reviewer
cf-reviewer-security (source)sonnetFinds security issues in the diffcf-reviewer
cf-reviewer-quality (source)haikuNames, complexity, duplication, slopcf-reviewer
cf-reviewer-tests (source)haikuCoverage and missing testscf-reviewer
cf-reviewer-rules (source)haikuCLAUDE.md MUST/SHOULD/ALWAYS/NEVERcf-reviewer
cf-reviewer-reducer (source)haikuDeduplicates and ranks findingscf-reviewer
cf-writer (source)haikuWrites straightforward markdown/cf-learn, /cf-remember, /cf-scan, /cf-fix, /cf-ask
cf-writer-deep (source)sonnetWrites deep technical docs/cf-learn

📘 Custom Guides

Extend a built-in skill without editing the plugin. When that skill runs, CF loads your guide (if one exists) and applies its sections: ## Before before the first step, ## Rules throughout, ## After after the last step. Sections are optional — include only what you need.

cf guide create cf-commit   # scaffolds the local file
cf guide list               # local guides in this project

cf guide create writes a project file. The skill name must match a built-in skill (cf-commit, cf-plan, …). It will not overwrite an existing guide.

ScopePathWho it applies to
Local.coding-friend/skills/<skill-name>-custom/SKILL.mdThis project. Wins if both exist.
Global~/.coding-friend/skills/<skill-name>-custom/SKILL.mdAll projects. Create this file yourself.

Local and global are not merged — if the local file exists, the global one is ignored. The loader resolves the path from the git project root, so it still works if your shell is in a subdirectory.

Example — .coding-friend/skills/cf-commit-custom/SKILL.md:

## Before

- Check branch naming convention (must match `feat/XX-*` or `fix/XX-*`)

## Rules

- Always include the JIRA ticket from the branch name in the commit subject

## After

- Run tests if the commit type is `feat:` or `fix:`

The next time you run /cf-commit, that guide is loaded. No /clear needed.

⚙️ Config

You have two config files. Global is ~/.coding-friend/config.json. Project is .coding-friend/config.json — local overrides global at the same top-level keys.

// Some examples
{
  "language": "en",
  "docsDir": "docs",
  "tdd": false,
  "autoApprove": false,
  "autoApproveLLM": false,
  "review": {
    "withCodex": false,
    "maxRounds": 5
  },
  "memory": {
    "autoCapture": false
  },
  "learn": {
    "outputDir": "~/.coding-friend/learn"
  }
}

Learn notes default to ~/.coding-friend/learn/ (learn.outputDir is configurable). docsDir is for plans, memory, and research — not the default learn output.

KeyDescription
languageLanguage for docs (plans, memory, research, ask). Default: en.
docsDirBase docs directory relative to project root (plans, memory, research). Default: docs. Not the default learn output.
autoApproveEnable the auto-approve hook. Default: false.
autoApproveLLMOpt-in Sonnet classifier for unknown tools (Claude only). Default: false — unknowns defer to Claude native / auto.
privacyBlockPrivacy-block hook (deny .env, keys, credentials). Default: true.
scoutBlockScout-block hook (deny ignored dirs). Default: true.
autoApproveAllowExtraBash command prefixes to auto-approve (merged across global + local).
autoApproveIgnoreBash command prefixes to always require user review.
disableGUIPlanDisable the human overview doc /cf-plan generates. Default: true.
guiPlanFormatFormat for the GUI plan: html or md. Default: html.
learnLearn settings: language, outputDir, categories. Default outputDir: ~/.coding-friend/learn.
reviewReview settings. Nested object; withCodex runs a Codex second opinion; maxRounds (default 5) caps the autopilot review-fix loop.
tddBoolean. Enable TDD (RED→GREEN→REFACTOR) by default.
memoryObject. MemoryConfig for search tier, embeddings, and capture.

memory (MemoryConfig) keys:

List gitignore-style paths in .coding-friend/ignore so scout-block skips them.