v0.1 — now available on npm

committy gcv

A lightweight global CLI for conventional commits. Install once, use in any repo.

$ npm install -g committy

What is committy?

committy (gcv) is a global CLI tool that brings structure to your git commits without locking you into a project setup. You install it once and it works everywhere — with or without a config file.

Run gcv for an interactive prompt, or commit inline in one line. When you're working with a team, drop a .gc.json in the repo root to share types, scopes, and team prefixes — and committy picks it up automatically.

Interactive + inline

Guided prompt when you need it. One-liner when you don't. Falls back gracefully when args are partial.

🌍

Global install

No per-project config required. Works in any git repo the moment you install it.

👥

Team-ready

Share commit types, scopes, and team prefixes via a single .gc.json config file.

🔍

Config resolution

Walks up from your current directory to find the nearest config. Sensible defaults if none found.

Roadmap

What's shipped and what's coming next.

v0.1 Commit convention Launched
  • gcv commit — interactive + inline with graceful fallback
  • gcv init — scaffolds .gc.json with commits section
  • Team prefix per scope
  • Staged files check
  • Default types when no config
v0.2 Branch convention Upcoming
  • gcv branch — interactive + inline
  • Branch pattern validation against allowed config
  • gcv init extended with branches section
v0.3 Changelog Upcoming
  • gcv changelog — generates from git log
  • --from, --dry-run flags
  • Groups by type, includes team prefix
v0.4 Versioning Upcoming
  • gcv bump — semver auto-detect from commits
  • --minor, --dry-run flags
  • Git tag creation
  • Auto-run changelog after bump

Documentation

Quick start

You need Node 18+ and a git repo with staged files.

# 1. Install globally
npm install -g committy

# 2. Stage your changes
git add .

# 3. Run the interactive prompt
gcv

You'll be guided through type → scope → message. committy runs git commit for you.

Commit — interactive

Run gcv with no arguments to open the guided prompt. Scope is always optional — skipping it produces feat: message, not feat(): message.

gcv

# Prompt:
? Type:    feat
? Scope:   (optional, press Enter to skip)
? Message: fix svg images not loading

# Result:
git commit -m "feat: fix svg images not loading"

Commit — inline

Pass type, scope, and message directly as arguments for a fast one-liner. If args are partial or invalid, committy drops into the prompt with valid fields pre-filled.

# type + scope + message
gcv feat auth fix svg images not loading
→ git commit -m "feat(auth): fix svg images not loading"

# type + message (no scope)
gcv fix update readme
→ git commit -m "fix: update readme"

Argument parsing rules:

ArgsParsed as
1 argmessage only — prompts for type and scope
2 argstype + scope (if scope matches config), or type + message
3+ argstype + scope + message (rest joined with spaces)

Init — set up a team config

Run gcv init to scaffold a .gc.json in the current directory. Commit this file so the whole team shares the same types and scopes.

gcv init

If you're not at the repo root, committy warns you before writing. If .gc.json already exists, it asks before overwriting.

Config reference

.gc.json is optional. When present it must be valid JSON — malformed config prints an error and exits. No silent fallback.

{
  "types": ["feat", "fix", "chore", "docs", "refactor", "test"],
  "scopes": [
    { "name": "auth", "team": "PCUST" },
    { "name": "payment", "team": "PCUST" },
    { "name": "dashboard", "team": "PINT" },
    { "name": "deps" }
  ]
}
FieldTypeRequiredDescription
typesstring[]YesNon-empty list of allowed commit types
scopesobject[]YesList of scope definitions (can be empty [])
scopes[].namestringYesScope identifier used in commits
scopes[].teamstringNoTeam prefix inserted before the message

Scope names must be unique. Scopes without team produce no prefix.

When a scope has a team value, the commit message becomes:

type(scope): TEAM message

# Example with { "name": "auth", "team": "PCUST" }:
feat(auth): PCUST fix svg images not loading

Default types

Used when no config is present. Follows Conventional Commits v1.0.0.

feat  fix  chore  docs  refactor  test  style  perf  ci  build  revert

Command reference

CommandDescription
gcvInteractive commit prompt
gcv <type> [scope] <message>Inline commit
gcv initScaffold .gc.json in current directory
gcv --help / -hPrint usage
gcv --version / -vPrint installed version