jig help lists them all.
Two layers
Jig splits the work in two:- Skills are instructions in Markdown. The agent reads them and makes every judgement: what a change touches, how risky it is, what the design should be, what the project should remember.
- Scripts are POSIX shell (
bash3.2+) in.ai/scripts/, with Git as the only requirement. They keep records straight: task state, which knowledge applies, running checks, installing and cleaning up. No script calls an AI model, and nothing is sent to any service run by Jig — there is none, and there is no telemetry.
What lives where
What each part does to your machine
Installers
-
install.sh(macOS, Linux): clones Jig into~/.local/share/jigat the newest release tag, links~/.local/bin/jig, and adds one markedPATHline to your shell startup file only when that folder is not already onPATH. Nosudo. It never touches the directory you run it from. On a failed run it removes only the install directory it created in that same run and the link it created. It refuses to overwrite anything it did not create. -
install.ps1(Windows) additionally, and says so before doing it:- installs Git for Windows when missing — through winget, which it runs with the source and package agreements accepted for you, or by downloading the official installer. The download is not checked against a hash or signature.
- sets
user.nameanduser.emailglobally when Git has none (with-Yes, the e-mail defaults to<username>@example.com); - in a folder it turned into a repository, makes one first commit of everything in it — including files that were already there (it lists the first few);
- runs
jig init --session-hookunless you pass-NoSessionHook.
-Uninstallremoves thePATHentry, thejiglink only when it points into the install folder, and the install folder only when it is a Jig checkout with no local changes. -
jig self-updatemoves the Jig on your machine to the newest release tag, never backwards, and refuses a checkout with local changes. Release tags are not signature-verified. It changes no project.
In a project
jig initcreates what it needs and never overwrites existing knowledge, configuration or a file you changed. It appends missing lines to.gitignore(.ai/workspace/,.ai/runtime/,.ai/config.local.yaml,*.log,.claude/worktrees/) and.gitattributes. With--session-hookit creates.claude/settings.jsononly when that file does not exist; an existing one is never edited. It asks nothing and commits nothing.jig upgradefetches nothing: it copies from the Jig on your machine. It replaces framework files you have not edited, keeps and reports the ones you have, and deletes a file the new version no longer ships only when you have not edited it — this can be outside.ai/, for example an old skill under.claude/skills/. It never touches knowledge, specifications, configuration orAGENTS.md.jig verifyruns your project’s own tools — test scripts, linters,php artisan test, Gradle or Maven wrappers. That is running your project’s code, with whatever that code does; some toolchains download dependencies by themselves. Jig installs nothing. A missing tool is a skip, never a pass; when every check is skipped, the run still exits successfully, and the report says what was skipped.
Git
No script pushes. No script commits — the only commit is the Windows installer’s first commit in
a repository it created. Starting a task refuses when tracked files have uncommitted changes (untracked
files do not block it), so one task’s work cannot become another’s first commit. Whether the agent
may commit, push or open pull requests is your project’s rule and your runtime’s permission, not
Jig’s.
Network
Jig’s scripts talk only to your own Git remote and, for housekeeping, to your forge’s command-line tool: withforge: auto and gh or glab installed and signed in, housekeeping lists pull requests
to learn whether a task was merged — also during a dry run, which otherwise skips git fetch.
forge: none turns that off.
Deletion
Everything a script deletes, it first proves is its own:- Workspaces are never deleted directly. Housekeeping moves one to
.ai/runtime/trash/when its task is closed after a confirmed merge, or when the task was abandoned more thanhousekeeping.abandoned_ttl(14 days) ago — an abandoned task goes to the trash whatever its remote state. A task whose remote state cannot be determined is otherwise always kept. Trash entries are deleted afterhousekeeping.trash_ttl(7 days). Age alone never removes an active task. - Paths are deleted only after being checked to lie inside
.ai/and to look like a workspace or a trash entry. Task, spec, profile, adapter and domain names are validated before any path is built from them. - Worktrees are removed by Git, never by a script, under the conditions above; on Windows, leftover links and empty folders inside that path are then removed, never followed.
- Specifications removed, closed or finished go to the trash, not straight to deletion.
- Branches are never deleted, apart from the failed-worktree case above.
jig housekeeping — the real one, not a dry run — in
the background at most once per housekeeping.cadence.
Knowledge and what an agent reads
- Proposed knowledge reaches no agent. Documents an agent inferred — a domain map, a linked or
copied document — are created as
proposedand are left out of every answerjig contextgives until they are accepted. - Acceptance is the skill’s discipline, not a script’s check.
jig knowledge acceptcannot tell who ran it. Thejig-acceptskill requires a human’s yes to each document; nothing technical stops an agent from running the command itself. Review knowledge changes in pull requests. - Knowledge written at the end of a task is active immediately, like any file the agent edits: its check is your review of the pull request.
- Linked documents (
.ai/knowledge/sources/) must be regular files Git tracks, inside the repository, not symlinks. The check is repeated every time one is resolved, because a file can be swapped after it was accepted. Changes after acceptance are reported until a human reviews them. - Copied rule files are scanned for obvious secrets before the copy; a hit names the line and the kind, never the value, and the copy waits for explicit confirmation. The scan catches the obvious only.
- Reading is recorded, not proven. The agent records which documents it has read per task, so a changed document becomes unread again. That record says the agent claimed to read it — nothing more.
Measurement
jig measure derives everything it reports when you run it, from knowledge metadata, local task
state, Git history and the housekeeping log (where housekeeping records a task’s class and dates
when it cleans the workspace up). Nothing is sent anywhere.
More
jig help lists every command; jig doctor checks the machine and the project and prints a fix
for each problem. The accepted design decisions behind all of the above are in the repository’s
.ai/knowledge/adr/.