This CLI is used to generate commit messages for you using AI! Visit https://commits.denyhs.com/ to learn more ❤️
A command-line tool to generate commit messages based on your repository changes.
npm install -g @denyhs/cortex-cli
Before using the CLI, you need to set your API token as an environment variable:
export CORTEX_GENERATE_COMMIT_MESSAGE_TOKEN=your_token_here
Or create a .env
file in your project root:
CORTEX_GENERATE_COMMIT_MESSAGE_TOKEN=your_token_here
You can also create a .cortexrc
file in your project root to set default options:
{
"stageAllChanges": true,
"include": ["src/**/*.js", "lib/**/*.js"],
"exclude": ["test/**", "**/*.test.js"],
"header": "feat: ",
"commitStaged": true,
"template": {
"name": "quave-projects",
"variables": {
"taskId": "123",
"taskName": "My task"
}
}
}
To make your IDE treat .cortexrc
as a JSON file:
VS Code
The repository includes .vscode/settings.json
with the correct configuration:
{
"files.associations": {
".cortexrc": "json"
}
}
JetBrains IDEs (WebStorm, IntelliJ, etc.)
The repository includes .idea/fileTypes/cortexrc.xml
with the correct configuration. If you're not using the provided configuration:
- Go to Preferences/Settings → Editor → File Types
- Find "JSON" in the list
- Add
cortexrc
pattern under "File name patterns"
Vim/Neovim Add to your configuration:
autocmd BufNewFile,BufRead .cortexrc setfiletype json
The CLI follows a strict priority order when applying configurations:
- Command-line flags (highest priority)
.cortexrc
file settings (lower priority)- Default values (lowest priority)
For example, if you have this .cortexrc
:
{
"include": ["src/**/*.js"],
"header": "feat: "
}
And run:
cortex commit-message --include "lib/**/*.js" --header "fix: "
The CLI will use:
include: ["lib/**/*.js"]
(from command line)header: "fix: "
(from command line)
The values in .cortexrc
are overridden by the command-line flags.
Here are some common .cortexrc
configurations:
// Basic configuration for a JavaScript project
{
"stageAllChanges": true,
"include": ["src/**/*.js", "lib/**/*.js"],
"exclude": ["**/*.test.js", "**/*.spec.js"],
"header": "feat: "
}
// TypeScript project with automatic commit
{
"stageAllChanges": true,
"include": ["src/**/*.ts", "src/**/*.tsx"],
"exclude": ["**/*.test.ts", "**/__tests__/**"],
"commitStaged": true,
"header": "fix: "
}
// Full-stack project configuration
{
"stageAllChanges": true,
"include": [
"frontend/src/**/*.{js,jsx,ts,tsx}",
"backend/src/**/*.js",
"shared/**/*.js"
],
"exclude": [
"**/*.test.*",
"**/*.spec.*",
"**/dist/**",
"**/build/**"
],
"commitAndPushStaged": true
}
// Configuration for documentation changes
{
"stageAllChanges": true,
"include": [
"docs/**/*.md",
"**/*.mdx",
"**/README.md"
],
"header": "docs: ",
"commitStaged": true
}
Templates allow you to customize how your commit messages are generated using the template feature available at commits.denyhs.com/templates. You can use templates interactively with the --withTemplates
flag or specify a template name with --templateName
.
First, create your template on commits.denyhs.com/templates. Templates use variables (prefixed with #) that will be replaced with actual values. For example:
#taskId - #taskName
#GENERATED_MESSAGE
Then, in your .cortexrc
file, you can pre-define values for some or all of these variables:
{
"template": {
"name": "my-template",
"variables": {
"#taskName": "Creating login page"
}
}
}
When you run the CLI, it will:
- Use the pre-defined variables from your
.cortexrc
- Prompt you to fill in any remaining variables (like
#taskId
in this case) - Replace
#GENERATED_MESSAGE
with the AI-generated commit message
Let's say you have this template named "my-proj" on commits.denyhs.com:
#taskId - #taskName
#GENERATED_MESSAGE
Your .cortexrc
:
{
"template": {
"name": "my-proj",
"variables": {
"#taskName": "Creating login page"
}
}
}
When you run the CLI:
- It will prompt you to enter the
#taskId
- After entering "123", it might generate a message like:
123 - Creating login page
Finishing my amazing login page
Note: While you can use templates interactively with CLI flags (--withTemplates
or --templateName
), pre-defining template variables is only possible through the .cortexrc
file.
cortex commit-message [options]
--stageAllChanges
: Stage all changes before generating the message--include <patterns...>
: Include only files matching these patterns when staging (supports glob patterns)--exclude <patterns...>
: Exclude files matching these patterns when staging (supports glob patterns)--header <text>
: Add a custom header to the commit message (will be added above the generated message)--preScript <command>
: Execute a command before generating the commit message (e.g., linting, tests)--commitStaged
: After generating the message, prompt to commit staged changes--commitAndPushStaged
: After generating the message, prompt to commit staged changes and push them to the remote repository--verbose
: Show detailed information about the current configuration and execution--withTemplates
: Show an interactive prompt to choose from available templates for generating the commit message--templateName <templateName>
: Use a specific template by name to generate the commit message
# Generate message for staged changes
cortex commit-message
# Use interactive template selection
cortex commit-message --withTemplates
# Use a specific template
cortex commit-message --templateName "my-template"
# Run linter before generating message
cortex commit-message --preScript "npm run lint"
# Run tests and stage all changes if they pass
cortex commit-message --preScript "npm test" --stageAllChanges
# Stage specific files and generate message
cortex commit-message --stageAllChanges --include "src/**/*.js" --exclude "**/*.test.js"
# Stage changes in specific directories
cortex commit-message --stageAllChanges --include "src/**" "lib/**" --exclude "test/**"
# Stage changes with patterns and commit
cortex commit-message --stageAllChanges --include "src/**/*.js" --header="feat: new feature" --commitStaged
# Stage filtered changes, generate message, and commit and push
cortex commit-message --stageAllChanges --include "src/**" --exclude "test/**" --commitAndPushStaged
# Generate message with a custom header
cortex commit-message --header="feat: new feature implementation"
# Generate message, commit, and push with a custom header
cortex commit-message --commitAndPushStaged --header="fix: resolve critical bug"
- Generates commit messages based on git diff
- Configurable via
.cortexrc
file or command-line options - Pattern-based file inclusion/exclusion for staging
- Automatic staging of filtered changes
- Copies generated message to clipboard
- Optional custom header for commit messages
- Optional automatic commit after message generation
- Optional automatic push to remote after commit
- Environment variable validation
- Git repository validation