Git, but lazier 🦥

Commit templates + short commands = less typing, more coding

Before (Traditional Git)
$ git add src/auth.ts tests/auth.test.ts
$ git commit -m "[TASK-456] feat(auth): add OAuth2 support"
$ git push
After (With preguito)
$ guito c 456 f "add OAuth2 support" -p

More productive, less tedious

Stop wasting time on repetitive Git commands. Let preguito handle the boring stuff.

📝

Customizable Templates

Configure once, use forever. Jira, Linear, or any commit pattern you need.

Short Commands

guito c = commit, guito ap = amend + push. 70% less typing, same results.

🎯

Zero Config

Sensible defaults out-of-the-box. Start using it immediately without setup.

🔧

Highly Configurable

Per-project or global settings. TypeScript API for advanced automation.

🤖

Claude Code Skill

Official Claude Code skill. Claude reads your .preguitorc and crafts commits with /guito-commit.

Get started in 10 seconds

Choose your preferred installation method

Recommended for Node.js users

npm install -g preguito

For Debian/Ubuntu systems

wget https://github.com/jacodoisdois/preguito/releases/latest/download/preguito_0.2.3_amd64.deb
sudo dpkg -i preguito_0.2.3_amd64.deb
View all releases →

Standalone binary (no Node.js required)

wget https://github.com/jacodoisdois/preguito/releases/latest/download/guito
chmod +x guito
sudo mv guito /usr/local/bin/

For AI agent users

npx skills add jacodoisdois/preguito-skill -g

Teaches your AI agent the .preguitorc config, shortcodes and enables /guito-commit

View skill on GitHub →

Documentation

Complete command reference and usage examples. No GitHub required.

Command Reference

Command Alias Description
guito c [id] [codes] "msg" commit Templated commit with auto-stage
guito cf <hash> Create a fixup commit
guito ap Amend + force push
guito apl Amend + force push with lease
guito u [count] undo Undo last N commits (soft reset)
guito p push Simple push (git push)
guito pu Push with --set-upstream
guito r <branch> rebase Quick rebase on branch
guito re <hash> Edit rebase at commit
guito ri <count> Interactive rebase last N commits
guito sw <branch> switch Switch/create branch (-n to create)
guito st Stash changes
guito stp Pop latest stash
guito s status Short status
guito l [count] log Compact log (default: 10)
guito f <keyword> find Search commits by message
guito t <tag> tag Commits since/from a tag
guito i init Setup wizard
guito cfg config View configuration

Shortcodes Reference

Types

Key Label
f feat
x fix
c chore
t test
r refactor
d docs

Environments

Key Label
p prd
u uat
d dev
s stg
l local

Use shortcodes in commit commands: guito c 123 fx "add feature"f = feat, x = (no environment)

Common Workflows

Start a new feature

guito sw -n feature/login       # Create branch
# ... make changes ...
guito c 42 f "add login" -p     # Commit + push

Quick fix on current branch

# ... fix the bug ...
guito c 99 x "fix timeout" -p   # x = fix, push immediately

Amend last commit

# ... make more changes ...
guito apl                        # Amend + force push (safe)

Rebase before PR

guito r main                     # Pull main, rebase on top
guito pu                         # Push with upstream

Clean up commit history

guito ri 5                       # Interactive rebase last 5 commits
# or create fixup commits:
guito cf abc123 -f               # Fixup + force push

Configuration Examples

Minimal Setup

Simple template with types only

{
  "template": "{{type}}: <message>",
  "features": {
    "cardId": false,
    "type": true,
    "environment": false
  },
  "types": [
    { "key": "f", "label": "feat" },
    { "key": "x", "label": "fix" },
    { "key": "c", "label": "chore" }
  ]
}

Team Setup (Jira)

Full template with Jira ticket prefix

{
  "template": "[PAYMENTS-{{card_id}}] {{type}}({{environment}}): <message>",
  "features": {
    "cardId": true,
    "type": true,
    "environment": true
  },
  "types": [
    { "key": "f", "label": "feat" },
    { "key": "x", "label": "fix" }
  ],
  "environments": [
    { "key": "p", "label": "prd" },
    { "key": "u", "label": "uat" }
  ],
  "defaults": {
    "prefix": "PAYMENTS"
  }
}

Advanced Setup

Optional environment variables

{
  "template": "[{{prefix}}-{{card_id}}] {{type}}{{environment}}: <message>",
  "features": {
    "cardId": true,
    "type": true,
    "environment": true
  },
  "types": [
    { "key": "f", "label": "feat" },
    { "key": "x", "label": "fix" },
    { "key": "c", "label": "chore" },
    { "key": "t", "label": "test" },
    { "key": "r", "label": "refactor" },
    { "key": "d", "label": "docs" }
  ],
  "environments": [
    { "key": "p", "label": "(prd)" },
    { "key": "u", "label": "(uat)" },
    { "key": "d", "label": "(dev)" }
  ],
  "defaults": {
    "prefix": "CHECKOUT"
  }
}

Save as .preguitorc or .preguitorc.json in your project root or ~/.config/preguito/config.json globally.

Your first commit

Three simple steps to start being lazy

1
📦

Install

npm install -g preguito

2
⚙️

Configure

guito init (interactive wizard)

3
🚀

Use

guito c 123 f "your message"