| Crates.io | jig-cli |
| lib.rs | jig-cli |
| version | 0.0.0-pre3 |
| created_at | 2025-06-30 17:41:58.138367+00 |
| updated_at | 2025-07-17 02:38:17.175935+00 |
| description | jig - A command line toolbox |
| homepage | |
| repository | https://github.com/daveio/jig |
| max_upload_size | |
| id | 1732128 |
| size | 367,044 |
jig - A CLI Toolboxjig is a comprehensive CLI toolbox that consolidates various utilities into a single, unified command-line interface.
Built with Rust, it provides a consistent experience for common development, security, and administrative tasks.
It's a collection of things I felt like implementing. It's not a framework, it's not a library, it's just a bunch of utilities.
Enjoy the chaos.
jig can be installed as a standalone binary.
The shell plugin is strongly recommended. It is required for:
jig installation and updates$PATH configurationjig workspace commandsFor additional features, install it åusing your preferred package manager. The following shell plugin managers are tested and supported:
Fish Shell:
fisheroh-my-fishfundlefishermanZsh:
antigenantidoteantibodyzplugzpluginoh-my-zshBash:
bash-itoh-my-bashOther shell plugin managers may work, but are not explicitly tested.
When you run jig init, it will tell you how to install the plugin for your shell. You don't strictly have to, of
course.
jig workspace hook integration$PATH / $fish_user_paths configuration~/.local/share/jigclap)# Install using Cargo if you have Rust installed
cargo install jig
# Or install with Homebrew on macOS
brew install daveio/tap/jig
# Or just grab the latest release
# <https://github.com/daveio/jig/releases/latest>
# Initialize configuration
jig init
# View help
jig --help
Multi-architecture container images are automatically built and published to GitHub Container Registry for every tagged release.
ghcr.io/daveio/jig:latest - Latest releaseghcr.io/daveio/jig:x.y.z - Specific versionlinux/amd64 (x86_64)linux/arm64 (aarch64)# Run the latest version
docker run --rm ghcr.io/daveio/jig:latest --help
# Run a specific version
docker run --rm ghcr.io/daveio/jig:1.0.0 --version
# Mount current directory and run with config
docker run --rm -v "$(pwd):/workspace" -w /workspace \
-v "$HOME/.jig.yaml:/root/.jig.yaml:ro" \
ghcr.io/daveio/jig:latest crypto encrypt file.txt
The container build process is optimized for speed and efficiency:
This approach significantly reduces build times compared to compiling Rust code inside Docker containers.
┌─────────────────┐ ┌─────────────────┐
│ build-binaries│ │ build-binaries│
│ (x86_64) │ │ (aarch64) │
│ │ │ │
│ • Rust cache │ │ • Rust cache │
│ • Native build │ │ • Cross compile │
│ • Upload binary │ │ • Upload binary │
└─────────┬───────┘ └─────────┬───────┘
│ │
└──────────┬───────────┘
│
┌────────▼────────┐
│ build-container │
│ │
│ • Download bins │
│ • Multi-arch │
│ • Fast build │
└─────────────────┘
---
config:
layout: elk
theme: dark
---
graph LR
jig[jig]
jig --> init(init)
jig --> crypto(crypto)
crypto --> cryptoEncrypt(encrypt)
crypto --> cryptoDecrypt(decrypt)
crypto --> cryptoPublic(public)
jig --> generate(generate)
generate --> generateHex(hex)
generate --> generatePassword(password)
generate --> generateKey(key)
generateKey --> generateKeyCrypto(crypto)
generateKey --> generateKeyWireguard(wireguard)
generate --> generateJwt(jwt)
jig --> network(network)
network --> networkDns(dns)
networkDns --> networkDnsFlush(flush)
networkDns --> networkDnsLookup(lookup)
networkDns --> networkDnsSec(sec)
jig --> domain(domain)
domain --> domainCheck(check)
domain --> domainExpiry(expiry)
domain --> domainNs(ns)
jig --> tls(tls)
tls --> tlsCert(cert)
tls --> tlsCiphers(ciphers)
jig --> api(api)
api --> apiTicket(ticket)
apiTicket --> apiTicketTitle(title)
apiTicket --> apiTicketDescription(description)
apiTicket --> apiTicketEnrich(enrich)
api --> apiImage(image)
apiImage --> apiImageAlt(alt)
apiImage --> apiImageOptimise(optimise)
api --> apiToken(token)
apiToken --> apiTokenInfo(info)
apiToken --> apiTokenRevoke(revoke)
apiToken --> apiTokenUsage(usage)
api --> apiPing(ping)
jig --> mcp(mcp)
mcp --> mcpProxy(proxy)
mcp --> mcpServe(serve)
jig --> dance(dance)
jig --> terminal(terminal)
terminal --> terminalSysinfo(sysinfo)
terminal --> terminalXKCD(xkcd)
jig --> project(project)
project --> projectNew(new)
project --> projectUpdate(update)
project --> projectBump(bump)
project --> projectDependabot(dependabot)
project --> projectTemplate(template)
projectTemplate --> projectTemplateList(list)
projectTemplate --> projectTemplateNew(new)
projectTemplate --> projectTemplateUpdate(update)
jig --> git(git)
git --> gitClone(clone)
git --> gitBinary(binary)
gitBinary --> gitBinaryGet(get)
gitBinary --> gitBinaryUpdate(update)
gitBinary --> gitBinaryShow(show)
gitBinary --> gitBinaryRemove(remove)
git --> gitSecrets(secrets)
git --> gitCommit(commit)
git --> gitYank(yank)
git --> gitLatest(latest)
jig --> workspace(workspace)
workspace --> workspaceSwitch(switch)
workspace --> workspaceList(list)
workspace --> workspaceHook(hook)
jig --> ai(ai)
ai --> aiRename(rename)
aiRename --> aiRenameImage(image)
style dance stroke-dasharray: 2 3, stroke-width: 5px
jig uses YAML configuration files for its configuration. The configuration system is built with saphyr and serde
for robust YAML operations.
~/.jig.yaml~/.jig.secret.yaml (configurable via secret.file)The bare minimum configuration requires only an encryption key:
secret:
key: AGE-SECRET-KEY-[...]
dns:
nameserver: 8.8.8.8
generate:
password:
emoji: true
git:
commit:
after: null
before: null
prefixes:
- docs
- feat
- fix
- perf
- refactor
- style
- test
internal: true
github:
user: daveio
mcp:
clients:
example-client:
length: 40
servers:
- example-http
- example-sse
- example-stdio
servers:
example-stdio:
command: uvx some-mcp-server
env:
MCP_ENV_VAR: value
type: stdio
example-sse:
type: sse
url: https://mcp.example.com/sse
example-http:
type: http
url: https://mcp.example.com/http
nextdns:
profiles:
home: ff33bb
work: bbff33
project:
dependabot:
schedule:
interval: daily
open-pull-requests-limit: 100
assignees:
- daveio
groups:
all-dependencies:
patterns:
- "*"
secret:
file: ~/.jig.secret.yaml # ignores all other secret configuration if set, even if the file doesn't exist
domainr:
env: DOMAINR_API_KEY
file: ~/.jig.domainr.key
key: xxxxxxx
order:
- env
- file
- key
github:
env: GITHUB_API_KEY
file: ~/.jig.github.key
key: xxxxxxx
order:
- env
- file
- key
nextdns:
env: NEXTDNS_API_KEY
file: ~/.jig.nextdns.key
key: xxxxxxx
order:
- env
- file
- key
main:
env: JIG_SECRET_KEY
file: ~/.jig.secret.key
key: AGE-SECRET-KEY-[...]
order:
- env
- file
- key
jwt:
env: JIG_JWT_SECRET
file: ~/.jig.jwt.key
key: JWT_SECRET_VALUE
order:
- env
- file
- key
template:
branch: template
repository: daveio/jig
workspace:
current: example
create: false
hooks:
before-up: []
after-up:
- echo "hello example"
before-down: []
after-down:
- echo "bye example"
workspaces:
example:
up:
- gcloud config configurations activate example
- gcloud config set project example_project
- kubectx example_cluster
down: []
env:
EXAMPLE_VAR: abc123
ANOTHER_VAR: "true"
YET_ANOTHER_VAR: "12345"
yank:
dir: ~/src
fetch: --prune --tags --prune-tags --recurse-submodules=yes
pull: --all --tags --prune --jobs=8 --recurse-submodules=yes
For a quick start, use this minimal configuration:
secret:
key: AGE-SECRET-KEY-[...]
All jig commands support these universal options:
| Option | Short | Description |
|---|---|---|
--version |
-V |
Display version information |
--help |
-h |
Show help for a command |
--yes |
-y |
Skip all confirmations |
--json |
-j |
Output structured JSON (formatted with stringify_pretty) |
--verbose |
-v |
Detailed output to STDERR (incompatible with --json) |
--quiet |
-q |
Minimal output to STDERR (incompatible with --json) |
--silent |
-s |
No output to STDOUT/STDERR (incompatible with --json) |
Note: Commands support abbreviation to the point of disambiguation via
clap.
jig initInitialize jig configuration and set up the environment.
Summary: Creates necessary directories, fetches templates, generates configuration with encryption keys, and sets up shell integration.
Parameters:
-c, --clobber: Overwrite existing configuration without confirmationConfiguration: None.
Flow:
~/.local/share/jig
~/.local/share/jig/bin~/.local/share/jig/templates--clobber)Notes:
git CLI or gix library based on git.internal configtemplates branch of jig repositorytemplate.repository and template.branchjig aiAI-powered utilities for various automation tasks.
jig ai renameAI-powered renaming operations.
jig ai rename imageAutomatically rename image files using AI-generated descriptive names.
Summary: Analyzes image content and generates descriptive filenames following a standardized format.
Parameters:
[FILENAME_OR_GLOB]: File or glob pattern to rename (defaults to all *.jpg, *.jpeg, *.png, *.webp in current
directory)Configuration: None.
Flow:
prepare_image_for_claude utilitydescriptive_words-YYYYMMDD-HHMMss.extNotes: Uses internal ask_claude utility for AI processing.
jig apiInteract with the dave.io API services.
Base URL: https://dave.io/
jig api pingCheck API health and connectivity.
Summary: Performs a simple health check against the API endpoint.
Parameters: None.
Configuration: None.
Flow:
/api/pingjig api imageImage processing and AI operations.
jig api image altGenerate AI-powered alt text for accessibility.
Summary: Analyzes images and generates descriptive alt text for web accessibility.
Parameters:
[FILENAME]: Image file to processConfiguration: None.
Flow:
prepare_image_for_claude utility/api/ai/alt via POSTjig api image optimiseOptimize images for web delivery.
Summary: Reduces image file size while maintaining quality.
Parameters:
[FILENAME]: Image file to optimizeConfiguration: None.
Flow:
/api/images/optimise via POSTjig api ticketAI-powered ticket management utilities.
jig api ticket titleGenerate concise ticket titles from descriptions.
Summary: Creates well-formatted ticket titles from detailed descriptions.
Parameters:
[DESCRIPTION]: Ticket description text (required)-i, --input: Read description from file-S, --stdin: Read description from stdinConfiguration: None.
Flow:
/api/tickets/titlejig api ticket descriptionGenerate detailed descriptions from titles.
Summary: Expands ticket titles into comprehensive descriptions.
Parameters:
[TITLE]: Ticket title text (required)-i, --input: Read title from file-S, --stdin: Read title from stdinConfiguration: None.
Flow:
/api/tickets/descriptionjig api ticket enrichEnhance ticket information with additional context.
Summary: Adds metadata and context to existing tickets.
Parameters: None.
Configuration: None.
Flow: None.
jig api tokenAPI token management operations.
jig api token infoRetrieve token details and metadata.
Summary: Displays information about a specific API token.
Parameters:
[UUID]: Token UUID (required)Configuration: None.
Flow:
/api/tokens/$UUIDjig api token revokeRevoke an active API token.
Summary: Permanently invalidates a token.
Parameters:
[UUID]: Token UUID to revoke (required)Configuration: None.
Flow:
/api/tokens/$UUID/revokejig api token usageView token usage statistics.
Summary: Shows usage metrics and limits for a token.
Parameters:
[UUID]: Token UUID (required)Configuration: None.
Flow:
/api/tokens/$UUID/usagejig cryptoEncryption and decryption operations using age encryption.
jig crypto encryptEncrypt data using age encryption.
Summary: Encrypts files or stdin data using the age encryption standard.
Parameters:
-i, --input: Input file to encrypt (reads stdin if omitted)-o, --output: Output file for ciphertext (writes to stdout if omitted)-k, --key [KEY]: Override default encryption keyConfiguration:
secret.main.key: Default encryption keysecret.main.env: Environment variable for keysecret.main.file: File containing keyFlow:
Notes: Supports binary input. Information messages sent to stderr.
jig crypto decryptDecrypt age-encrypted data.
Summary: Decrypts files or stdin data encrypted with age.
Parameters:
-i, --input: Input file to decrypt (reads stdin if omitted)-o, --output: Output file for plaintext (writes to stdout if omitted)-k, --key [KEY]: Override default decryption keyConfiguration:
secret.main.key: Default decryption keysecret.main.env: Environment variable for keysecret.main.file: File containing keyFlow:
Notes: Supports binary output. Information messages sent to stderr.
jig crypto publicDisplay public key for encryption.
Summary: Shows the public key (recipient) associated with a private key.
Parameters:
-k, --key [KEY]: Private key to process (uses configured key if omitted)Configuration:
secret.main.key: Default private keyFlow:
Notes: Public key is used as recipient in age encryption.
jig danceEaster egg command with animated terminal effects.
Summary: Hidden command that displays animated terminal effects and ASCII art.
Parameters: None.
Configuration: None.
Flow:
Notes:
--help outputjig domainDomain management and information tools.
jig domain checkCheck domain name availability across TLDs.
Summary: Searches for available domain names using the Domainr API, filtered to Cloudflare-supported TLDs.
Parameters:
[QUERY]: Domain name to check (required)-d, --domaincheck: Use external domaincheck tool insteadConfiguration:
api.domainr: Domainr API keyFlow:
Notes:
ac academy accountant accountants actor adult agency ai airforce apartments app army
associates attorney auction audio baby band bar bargains beer bet bid bike bingo biz
black blog blue boo boston boutique broker build builders business cab cafe cam camera
camp capital cards care careers casa cash casino catering cc center ceo chat cheap
christmas church city claims cleaning clinic clothing cloud club co co.uk coach codes
coffee college com com.ai com.co community company compare computer condos construction
consulting contact contractors cooking cool coupons credit creditcard cricket cruises dad
dance date dating day dealer deals degree delivery democrat dental dentist design dev
diamonds diet digital direct directory discount doctor dog domains download education email
energy engineer engineering enterprises equipment esq estate events exchange expert exposed
express fail faith family fan fans farm fashion feedback finance financial fish fishing
fit fitness flights florist flowers fm foo football forex forsale forum foundation fun
fund furniture futbol fyi gallery game games garden gifts gives glass global gmbh gold
golf graphics gratis green gripe group guide guitars guru haus health healthcare help
hockey holdings holiday horse hospital host hosting house how icu immo immobilien inc
industries info ink institute insure international investments io irish jetzt jewelry kaufen
kim kitchen land lawyer lease legal lgbt life lighting limited limo link live loan loans
lol love ltd luxe maison management market marketing markets mba me me.uk media memorial
men miami mobi moda mom money monster mortgage mov movie navy net net.ai net.co net.uk
network new news nexus ngo ninja nom.co observer off.ai ong online org org.ai org.uk
organic page partners parts party pet phd photography photos pics pictures pink pizza
place plumbing plus porn press pro productions prof promo properties protection pub racing
realty recipes red rehab reise reisen rent rentals repair report republican rest restaurant
review reviews rip rocks rodeo rsvp run sale salon sarl school schule science security
select services sex sh shoes shop shopping show singles site ski soccer social software
solar solutions soy space storage store stream studio style supplies supply support surf
surgery systems tax taxi team tech technology tennis theater theatre tienda tips tires
today tools tours town toys trade trading training travel tv uk university uno us
vacations ventures vet viajes video villas vin vip vision vodka voyage watch webcam
website wedding wiki win wine work works world wtf xxx xyz yoga zonejig domain expiryCheck domain expiration dates.
Summary: Retrieves domain registration expiry information via RDAP.
Parameters:
[DOMAIN]: Domain name to check (required)Configuration: None.
Flow:
Notes: Uses rdap-icann-client for RDAP queries.
jig domain nsRetrieve nameserver information.
Summary: Displays authoritative nameservers for a domain.
Parameters:
[DOMAIN]: Domain name to check (required)Configuration: None.
Flow:
Notes: Falls back to DNS lookup if RDAP unavailable.
jig generateCryptographically secure generation utilities.
Global Options for Deterministic Generation:
-k, --keyed [name]: Generate deterministic output using encryption key + name-d, --seed [value]: Use custom seed instead of encryption key (processed with argon2)jig generate hexGenerate random hexadecimal strings.
Summary: Creates cryptographically secure random hex values for IDs, tokens, or secrets.
Parameters:
[LENGTH]: Number of bytes (default: 16 bytes = 32 hex chars)Configuration: None.
Flow:
jig generate passwordGenerate secure passwords with customizable complexity.
Summary: Creates strong passwords with entropy validation and character set requirements.
Parameters:
[LENGTH]: Password length (default: 16, or word count in xkcd mode)-e, --emoji: Include emoji characters-x, --xkcd: Generate passphrase using word listConfiguration:
generate.password.emoji: Enable emoji by defaultFlow:
zxcvbn (minimum score: 3)Notes:
A-Z, a-z, 0-9, @%^-_,.~jig generate keyGenerate various types of cryptographic keys.
jig generate key cryptoGenerate age encryption keys.
Summary: Creates private keys for age-based encryption.
Parameters:
-w, --write: Save key to configuration fileConfiguration:
secret.main.key: Where to store the keyFlow:
jig generate key wireguardGenerate WireGuard VPN keys.
Summary: Creates WireGuard private and public key pairs.
Parameters: None.
Configuration: None.
Flow:
jig generate jwtGenerate JSON Web Tokens with claims.
Summary: Creates signed JWTs for API authentication.
Parameters:
--subject [subject]: Token subject (required, e.g., "ai:alt")--description [text]: Human-readable description--expiry [duration]: Expiration time (default: "1h")--claim [key=value]: Custom claims (repeatable)--secret [secret]: Signing secret--algorithm [alg]: Algorithm (default: HS256)Configuration:
secret.jwt.key: Default JWT secretsecret.jwt.env: Environment variable for secretsecret.jwt.file: File containing secretFlow:
graph LR
A[Start] --> B{Secret Source?}
B -->|Parameter| C[Use --secret]
B -->|Config| D[Load from config]
B -->|None| E[Error]
C --> F[Build Claims]
D --> F
F --> G[Sign JWT]
G --> H[Output Token]
jig gitGit and GitHub utilities for repository and release management.
jig git binaryManage binary releases from GitHub repositories.
Storage: ~/.local/share/jig/binaries.yaml (metadata), ~/.local/share/jig/bin (binaries)
jig git binary getInstall binary releases from GitHub.
Summary: Downloads and installs the latest binary release for your platform.
Aliases: install, add
Parameters:
[USERNAME]/[REPO]: GitHub repository (required)Configuration: None.
Flow:
~/.local/share/jig/binbinaries.yamlNotes: PATH integration handled by shell hook.
jig git binary showDisplay information about installed binaries.
Summary: Shows installation path and optional hash information.
Parameters:
[USERNAME]/[REPO]: GitHub repository-H, --hashes: Include file hashesConfiguration: None.
Flow:
binaries.yamljig git binary updateUpdate installed binaries to latest versions.
Summary: Checks for and installs newer releases.
Parameters:
[USERNAME]/[REPO]: Specific repository to update[BINARY_NAME]: Update by binary name-a, --all: Update all installed binariesConfiguration: None.
Flow:
jig git binary removeRemove installed binaries.
Summary: Uninstalls binaries and cleans up metadata.
Aliases: rm
Parameters:
[USERNAME]/[REPO]: Repository to remove[BINARY_NAME]: Remove by binary nameConfiguration: None.
Flow:
jig git cloneClone GitHub repositories with simplified syntax.
Summary: Clone repositories using short username/repo or just repo notation.
Parameters:
[USERNAME]/[REPO] or [REPO]: Repository to clone-c, --cli: Use git CLI instead of gix-i, --internal: Force use of gix libraryConfiguration:
git.internal: Use gix library by default (true)github.user: Default GitHub usernameFlow:
repo, use configured usernameNotes:
--cli flagjig git commitGenerate AI-powered commit messages.
Summary: Creates conventional commit messages with AI analysis of changes.
Parameters:
[PARAMETERS]: Additional git commit parametersConfiguration:
git.commit.prefixes: Allowed conventional prefixesgit.commit.before: Prepend text to messagesgit.commit.after: Append text to messagesFlow:
graph LR
A[Get Diff] --> B{Diff Size}
B -->|Large| C[Truncate]
B -->|Small| D[Send to AI]
C --> D
D --> E[Generate Message]
E --> F[Add Custom Text]
F --> G[Commit]
Notes: Reimplements oco functionality natively.
jig git latestGet latest commit hash from GitHub.
Summary: Retrieves the most recent commit SHA for a branch.
Parameters:
[USERNAME]/[REPO]: Repository to query[BRANCH]: Branch name (defaults to default branch)Configuration: None.
Flow:
jig git secretManage GitHub repository secrets.
Summary: Set encrypted secrets for GitHub Actions.
Parameters:
[USERNAME]/[REPO] or [REPO]: Target repository[SECRET_NAME]: Secret name[SECRET_VALUE]: Secret value (or stdin)Configuration:
github.user: Default GitHub usernameFlow:
jig git yankBatch update all Git repositories.
Summary: Recursively fetch and pull all repositories in a directory.
Parameters:
[DIRECTORY]: Root directory to search-c, --cli: Use git CLI-i, --internal: Force gix usageConfiguration:
yank.dir: Default directoryyank.fetch: Git fetch parametersyank.pull: Git pull parametersgit.internal: Use gix by defaultFlow:
.git directories recursivelyNotes:
--clijig mcpModel Context Protocol functionality.
jig mcp proxyModel Context Protocol proxy. Configure a single MCP in your clients, subset your configured MCPs and tools (if desired) for client names, and adjust tool names for certain clients.
Summary: Provides a stdio MCP server proxying requests to other MCPs.
Parameters:
[CLIENT_NAME]: The client name to subset MCPs and tools, and adjust tool names. See configuration.Configuration: TODO
Flow: TODO
Notes:
jig will manage tool name collisions.jig mcp serveModel Context Protocol server for AI agent integration.
Summary: Provides a stdio MCP server allowing AI agents to interact with jig functionality.
Parameters: None.
Configuration: None.
Flow: None.
Notes:
jig networkNetwork utilities and diagnostics.
jig network dnsDNS query and management tools.
jig network dns flushClear local DNS cache.
Summary: Flushes DNS resolver cache on the local system.
Parameters: None.
Configuration: None.
Flow:
dscacheutil -flushcachesystemd-resolve --flush-cachesipconfig /flushdnsjig network dns lookupPerform DNS queries.
Summary: Query DNS records with optional custom resolvers.
Parameters:
[QUERY]: Domain name to query[TYPE]: Record type (A, AAAA, MX, TXT, etc.)--root: Use root nameservers--server [SERVER]: Use specific nameserverConfiguration:
dns.nameserver: Default resolverFlow:
Notes: --root and --server are mutually exclusive.
jig network dns secVerify DNSSEC configuration.
Summary: Checks DNSSEC validation chain for a domain.
Parameters:
[DOMAIN]: Domain to verifyConfiguration: None.
Flow:
jig projectProject management and scaffolding utilities.
jig project bumpUpdate all dependencies to latest versions.
Summary: Automatically updates package versions across multiple package managers.
Parameters: None.
Configuration: None.
Flow:
Cargo.tomlpackage.json.github/workflows/*.ya?mlNotes:
⚠️ CAUTION: Updates to latest major versions may introduce breaking changes. GitHub Actions are pinned to default branch commits.
jig project dependabotGenerate Dependabot configuration.
Summary: Creates .github/dependabot.yml based on detected package managers.
Parameters: None.
Configuration:
project.dependabot: Template for dependabot configFlow:
graph LR
A[Scan Files] --> B[Detect Ecosystems]
B --> C[Apply Template]
C --> D[Generate YAML]
jig project newCreate new project from template.
Summary: Scaffolds a new project using Tera templates.
Parameters:
[TEMPLATE]: Template name to use[NAME]: Project name/directory-n, --name: Override project name-g, --git: Initialize git repo-G, --no-git: Skip git initializationConfiguration:
git.internal: Default git backendFlow:
~/.local/share/jig/templates and ~/.local/share/jig/templates/_shared.jig.yaml tracking fileNotes: Templates support Tera syntax for dynamic content.
Notes:
.jig.yaml tracking file with:
jig project updateUpdate existing project with template changes.
Summary: Applies template updates. Attempts to preserve local modifications.
Parameters:
-c, --clobber: Force overwrite without merge-n, --name: Override project nameConfiguration: None.
Flow:
.jig.yaml for template info--clobber).jig.yaml metadatajig project templateManage project templates.
.jig.template.yaml:
The .jig.template.yaml file is in the root of each template and defines its behaviour.
name: null # if omitted or null, name of the root directory of the template, default: null
shared: true # if false, disable shared template when rendering this template, default: true
jig project template listList available templates.
Summary: Shows all installed project templates.
Parameters: None.
Configuration: None.
Flow:
jig project template newCreate a new template.
Summary: Initialize a new project template.
Parameters:
-S, --shared: Copy files from _shared and disable the shared template for this template[NAME]: Template name (required)Configuration: None.
Flow:
.jig.template.yaml with metadata and shared template behaviour_shared if requiredjig project template updateUpdate template repository.
Summary: Fetches latest templates from configured repository.
Parameters:
-c, --cli: Use git CLI-i, --internal: Force gix usageConfiguration:
git.internal: Default git backendtemplate.repository: Template sourcetemplate.branch: Template branchFlow:
# Clone the repository
git clone https://github.com/daveio/jig.git
cd jig
# Build in debug mode
cargo build
# Build in release mode
cargo build --release
# Run tests
cargo test
# Run with cargo
cargo run -- --help
# Format code
cargo fmt
# Lint code
cargo clippy
# Check code without building
cargo check
# Watch for changes and rebuild
cargo watch -x run
The project uses GitHub Actions for continuous integration and deployment:
ci.yaml)mainrelease.yaml)v*.*.*)x86_64, aarch64x86_64, aarch64x86_64, aarch64 (currently disabled due to build issues)container.yaml)v*.*.*)ghcr.io/daveio/jig)linux/amd64 and linux/arm64publish.yaml)v*.*.*)For maintainers, the following GitHub secrets must be configured:
CARGO_REGISTRY_TOKEN: API token for publishing to crates.io
The CI/CD pipeline uses optimized caching:
ci-stable, ci-beta, ci-nightly)release-{target})publish)This allows:
Goal: Implement features that rely on external APIs (dave.io, Domainr, RDAP).
Duration: 2 weeks
Dependencies: Phase 2 partially complete
Can run in parallel with: Phase 3
jig api (Core):
https://dave.io/ with retry logicping: Implement the API health checktoken info: Retrieve token detailstoken revoke: Revoke an API tokentoken usage: View token usage statisticsjig domain:
check: Implement domain availability check using the Domainr APIexpiry: Implement domain expiration check using an RDAP clientns: Implement nameserver lookup using RDAP with a DNS fallbackGoal: Integrate with AI services (Claude) to deliver intelligent automation features.
Duration: 2 weeks
Dependencies: Phase 4 complete (for API client)
prepare_image_for_claude utility for image resizing and optimizationask_claude helper function for sending prompts and datajig ai rename image: Implement AI-powered image renamingjig git commit: Implement AI-generated conventional commit messages from diffsjig api image alt: Generate alt text for imagesjig api image optimise: Optimize images via the APIjig api ticket title: Generate ticket titles from descriptionsjig api ticket description: Generate ticket descriptions from titlesjig api ticket enrich: Design and implement enrichment logicGoal: Implement features that require deep integration with the user's shell and local environment.
Duration: 2 weeks
Dependencies: Phases 1-3 complete
jig init:
jig workspace:
list: Implement listing of configured workspacesswitch: Implement the complete state transition logic, including running up/down commands and managing environment variableshook: Implement the shell-specific hook for prompt integration and automatic environment managementjig terminal:
sysinfo: Display system info gauges using viuerxkcd: Fetch and display XKCD comics in the terminalGoal: Add features that enhance the user experience but are not critical to core functionality.
Duration: 1 week
Dependencies: Phase 6 complete
jig dance:
tachyonfx, tui-rain, etc.)--help outputGoal: Implement forward-looking features planned for after the initial release.
Duration: 1 week (initial implementation)
Dependencies: Most other phases complete
jig mcp:
rmcpjig commands to AI agentsGoal: Finalize the application for a public release.
Duration: 2 weeks
Dependencies: All feature phases complete
Should run continuously: Throughout development
ci.yaml to run tests, rustfmt, and clippy on all pushesREADME.md to ensure it is accurate--help messages are clear, correct, and comprehensivecargo installjig macos quarantine [add,remove]: Manage quarantine with xattrjig macos sign: Sign binary with apple-codesignjig clipboard [copy,paste]: Cross platform pbcopy / pbpaste using clipboard-rsjig about: Replicate https://github.com/daveio/npmjig catppuccin browse: Use nucleo-picker to browse catppuccin repos.
jig catppuccin fetch [reponame]: Fetch https://github.com/catppuccin/reponame into ./reponame using configured git backendjig nextdns allow [pattern]: Add [pattern] to NextDNS allow list. Config nextdns.profiles lists profiles to apply to.
-p / --profile: Profile alias (home and work in example config) or NextDNS slug (6 hex chars). Single profile to act on.-k / --key: Override NextDNS API keyjig ai usage [tool]: Check usage for tools with AI usage limits.
[tool] is unspecified, as just jig ai usage.jig ai usage cursor zed