Help us shape the future of Go! Take the 2026 Go Developer Survey

jaekit

module
v0.1.8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 25, 2026 License: MIT

README

Latest release macOS and Linux, arm64 and amd64 Claude Code and Codex MIT license

English · 한국어
Install · First task · Update · What you get · Usage guide

Jaekit carries work you delegate to Codex or Claude Code from a goal to a completion record.

  • Spec turns what you want into a goal document with completion conditions.
  • Seal has the agent implement, check, and fix the work toward that goal, and judges completion from check records.

The current release is v0.1.8, an early version being refined through real work.

Why use it

  • You want "done" backed by records
    Completion is recorded only when the required completion conditions are met by recorded checks or necessary user confirmations. The completion report shows what changed and how it was checked.
  • You want to pick up where a conversation ended
    Goals, plans, and progress records stay in the project folder. In a new conversation, specify the same goal to continue from the saved point.
  • You do not want to approve every step
    The agent plans, implements, and checks on its own. It asks when a decision affects the outcome or a check needs your confirmation.
  • You want to define the request before implementing it
    Spec works on its own. Keep the goal and completion conditions as a document and start Seal when you are ready.

How it works

An illustrated sequence, not a recording of a real run. The diagram below shows each step and who acts.

flowchart TD
    ask(["You describe the work"])
    spec["<b>Spec</b> writes the goal<br/>SPEC.md: goal, completion conditions<br/>and an Assurance: tier"]
    review{"You review the goal"}
    asknow{{"Spec asks once:<br/>implement it now?"}}
    start["Your #quot;Yes#quot; starts Seal"]
    separate(["Or later, in a separate message<br/>/seal:seal docs/specs/#lt;goal#gt;"])
    subgraph seal ["Seal: the agent works on its own"]
        direction TB
        plan["Plan<br/>PLAN.md and REVIEW.md"]
        planreview["strict only: Spar plan review<br/>before work starts"]
        build["Implement"]
        check["Check through ha<br/>every run is recorded in runs.jsonl"]
        spar["standard and strict:<br/>Spar review rounds<br/>and a recorded review gate"]
        plan --> build --> check
        plan -.->|"strict"| planreview -.-> build
        check -->|"a check fails"| build
        check -->|"checks pass"| spar
        spar -->|"a finding to fix"| build
    end
    decide{{"You answer a question<br/>that changes the requirements"}}
    done["ha done records completion<br/>when the required conditions are met"]
    report(["You review the report<br/>in PROGRESS.md: what changed<br/>and how it was checked"])
    resume(["The conversation ended?<br/>Open a new one<br/>in the same project"])

    ask -->|"/spec:spec"| spec --> review
    review -->|"ask for changes"| spec
    review -->|"looks right"| asknow
    asknow -->|"Yes"| start --> plan
    separate -.-> plan
    check -.->|"needs you"| decide
    spar -.->|"requirement question"| decide
    decide -.-> build
    spar -->|"the gate covers<br/>the last commit"| done
    check -.->|"light: may skip review<br/>with a reason"| done
    done --> report
    resume -.->|"continue docs/specs/#lt;goal#gt;"| plan

    classDef you fill:#EEF1FE,stroke:#4F6CF7,color:#1B2559
    classDef specStep fill:#E7F5F1,stroke:#168975,color:#0B3B32
    classDef sealStep fill:#FFF3E3,stroke:#C9761F,color:#4A2A06
    classDef record fill:#F1F3F5,stroke:#596579,color:#1F2328
    class ask,review,start,separate,decide,report,resume you
    class spec,asknow specStep
    class plan,planreview,build,check,spar sealStep
    class done record
    style seal fill:none,stroke:#C9761F,stroke-dasharray:5 4
  1. Spec writes the goal document with its completion conditions and an Assurance: tier, asks once whether to implement it now, and stops. Read it and say what needs changing.
  2. When it looks right, answer yes and Seal starts. You can also start Seal in a separate message later by naming the goal folder.
  3. The agent plans, implements and checks the work through ha, which records every run. standard and strict goals get independent Spar review rounds before completion, and strict goals also get a plan review before work starts; light goals may skip review with a reason. Questions that would change the requirements come to you.
  4. ha done records completion when the required completion conditions are met; for standard and strict goals, a recorded review gate must also cover the last commit. Review the report in PROGRESS.md: what changed and how it was checked, along with the actual result. If the conversation ends, continue the same goal in a new conversation.
View the same flow as an illustration

Get started

What you need

  • Git and a project folder managed with Git. You do not need to clone the Jaekit repository.
  • Claude Code or Codex CLI
  • On macOS and Linux, Homebrew (a program installer) is recommended. Without it, install from a Release file.

Install

First check what you can use in your environment.

Environment Spec Seal How to install
macOS (Apple Silicon, Intel) Yes Yes The Homebrew command below
Linux (arm64, amd64) Yes Yes The command below with Homebrew; otherwise Install from a Release file
WSL2 on Windows (Ubuntu 24.04 x64) Prepared, not yet checked in use Prepared, not yet checked in use Follow the WSL2 preparation guide and install from a Release file
Windows (native) Not checked Not available No public installation files yet

Then check your agent.

Agent Spec Seal Call
Claude Code Yes Yes /spec:spec, /seal:seal
Codex (CLI, desktop app) Yes Yes $spec:spec, $seal:seal
Windows users: what works today
  • In the current public release, the record tool ha does not support Windows natively, so Seal cannot run there. This limitation refers to native execution.
  • Spec does not need ha, but its installation and operation on Windows have not been checked yet.
  • In WSL2 with Ubuntu 24.04 LTS x64, install from the Linux Release file; Homebrew is not needed. Installation and agent use in actual WSL2 have not been checked yet. → WSL2 preparation guide
  • Native Windows (Windows 11 x64, PowerShell 5.1 and 7) has only a candidate under development; actual execution has not been checked. → Windows native candidate guide
1. Install the record tool ha in Terminal

Run one block at a time and wait for it to finish. Homebrew installs ha and spar together.

brew install jgoneit/tap/jaekit
ha --version
which -a ha
spar --version
which -a spar

It should print ha 0.1.8. The first line of which -a ha is the file that actually runs. If the command is missing or the version differs, see Check the version.

To install without Homebrew, paste the block under Install from a Release file instead of this step. It downloads the file for your OS and CPU, checks its checksum, and puts ha and spar at ~/.local/bin/ha and ~/.local/bin/spar. Other methods and details are in the install guide.

2. Install the plugins for your agent

In the same Terminal, run only the block for the agent you use.

If you already installed Jaekit, follow Update below. If you registered a repository checkout path, first see Move from a local path registration.

Claude Code

claude plugin marketplace add jgoneit/jaekit#v0.1.8
claude plugin install spec@jaekit
claude plugin install seal@jaekit
claude plugin install spar@jaekit
claude plugin list

[!TIP] Reopen Claude Code after installation. The final list should show spec@jaekit, seal@jaekit and spar@jaekit as enabled. #v0.1.8 pins the release to use. For details, see Claude Code installation.

Codex

codex plugin marketplace add jgoneit/jaekit@v0.1.8
codex plugin add spec@jaekit
codex plugin add seal@jaekit
codex plugin add spar@jaekit

[!TIP] Reopen Codex after installation. @v0.1.8 pins the release to use.

[!NOTE] Spar for standard and strict goals. From v0.1.7, standard and strict goals need the Spar executable and the Spar plugin, which the commands above install, with reviewers set to the CLIs you have: see Spar. The v0.1.7 Seal starts new goals under run-rules/5, and a standard or strict goal started under run-rules/5 completes only with a recorded Spar gate. light goals, goals without an Assurance: line and goals started under run-rules/4 or earlier do not need Spar. To finish without review, you decide a goal-document change that lowers the tier to light (Review gate).

Your first task

Open Claude Code, Codex CLI, or the Codex desktop app in your project folder.

[!IMPORTANT] From here on, type in the agent conversation, not Terminal.

1. Ask Spec

Use the example for your agent and describe the work you want.

Claude Code

/spec:spec Add a "Forgot password" link to the login screen

Codex — Type $ and choose Jaekit's spec:spec from the list.

$spec:spec Add a "Forgot password" link to the login screen

[!NOTE] This is a fictional example of a project that already has a password reset page, not an executed or verified case. Replace it with the work you want in your own project.

2. Review the goal

Read the document Spec gives you and say what needs changing.

In this example, the completion conditions are that the new link opens the existing reset page and login keeps working as before.

3. Start Seal in a separate message

Specify the goal folder.

Claude Code

/seal:seal docs/specs/<goal>

Codex — Choose Jaekit's seal:seal from the $ list.

$seal:seal docs/specs/<goal>

[!TIP] Replace <goal> with the actual goal folder name Spec reported. If its name is password-link, the full path is docs/specs/password-link.

For more on sending commands, see the usage guide.

If the conversation ends

Open a new conversation in the same project folder and specify the same goal.

continue docs/specs/<goal>

Replace <goal> with its actual folder name to continue from the saved goal and progress records.

Update

[!WARNING] When a new release comes out, update ha and the plugins together. With mixed versions, Seal may stop before recording.

1. Update ha

If you installed it with Homebrew, run these two blocks in order.

brew update
brew upgrade jgoneit/tap/jaekit

If you installed from a Release file, paste the block under Install from a Release file again.

2. Check which ha actually runs
ha --version
which -a ha
spar --version
which -a spar

If the new version does not appear, look at the first line of which -a ha. That is the file that actually runs.

If you installed both with Homebrew and from a Release file, remove the one you do not use or update it to the same version. Updating only one can leave the older one earlier on PATH still running.

3. Register the plugins again for the new release

Removing the marketplace also removes its spec, seal and spar, so install them again.

Claude Code

claude plugin marketplace remove jaekit
claude plugin marketplace add jgoneit/jaekit#v0.1.8
claude plugin install spec@jaekit
claude plugin install seal@jaekit
claude plugin install spar@jaekit

Codex

codex plugin marketplace remove jaekit
codex plugin marketplace add jgoneit/jaekit@v0.1.8
codex plugin add spec@jaekit
codex plugin add seal@jaekit
codex plugin add spar@jaekit
4. Reopen Claude Code or Codex

The new Spec, Seal and Spar load in newly opened sessions.

Updating does not delete goal documents or run records. To clean up earlier versions' data or uninstall, see Update and Uninstall.

What you get

Everything Jaekit writes stays in your project, in one folder per goal. The examples below are synthetic and shortened: they show the format, not a record of real work. Section names and markers such as ## Acceptance Criteria, ## 조건표 and AC-1 are fixed format tokens; some are in Korean, and Korean section names translates them. The prose is written in your language.

The same folder as text
docs/specs/password-link/
├── SPEC.md        goal, scenarios, completion conditions          ← Spec
├── PLAN.md        how each condition is checked, scope, budget    ← Seal
├── REVIEW.md      review plan; summary of the Spar rounds and gate ← Seal
├── PROGRESS.md    current state, timeline, completion report      ← Seal
└── runs.jsonl     append-only run record                          ← ha only

docs/reviews/password-link/   Spar records, in a folder Git ignores
├── 01-candidate/  one review round: packet, findings, summary     ← Spar
└── gate.json      the review gate, recorded with ha note          ← Spar

.git/ha/           raw check output, not tracked by Git (read it with ha log)

The completion report

When ha done records completion, Seal pastes the output of ha report unchanged into PROGRESS.md under ## 완료 보고, then adds only its own judgment below it. ha report prints English by default and Korean with --lang ko; Seal uses the language of your request. The section looks like this:

## 완료 보고

Changed: 1 files and 1 commits outside the bundle documents since base f46020ce6f77
Checked: 2 of 2 required conditions satisfied (2 by check records, 0 by user confirmation); 1 of 1 change conditions have a fresh baseline
To review: none
Remaining limits: assurance local; check author: executor
Next step: none; completion record seq 6 holds and nothing is left to do

### Stamp for `## 현재`

- record head: seq 6 (e2fd520c706e), recorded at 2026-10-23T13:38:16Z; status: complete; completion record: seq 6

### Evidence per condition

Source: completion record seq 6
| ID | kind | required | satisfied | records |
| --- | --- | --- | --- | --- |
| AC-1 | change | yes | yes | 2, 3 |
| AC-2 | maintain | yes | yes | 4 |

### Completion coverage

- completion record seq 6, commit e01fdf1e9c98; HEAD e01fdf1e9c98 is covered

### Output of unmet conditions

- none

Seal's judgment:

- Changed files (agent's claim): src/login.html for AC-1.
- Manual conditions and assumed decisions: none.
- Review: tier `standard`. Spar round `01-candidate` (claude, codex) found nothing, and its gate, recorded at seq 5, covers the last commit e01fdf1e9c98. No reviewer was waived. The records are in `docs/reviews/password-link/`.
- The head to push is the completion record's commit e01fdf1e9c98.
- This report does not establish deployment or installation. Assurance is local, and the agent wrote the checks.

How to read it:

  • The five lines at the top say what changed, what was checked, what you should look at yourself, the limits that remain and the next step. ha report computes them from the run record, Git and the goal documents; they are not the agent's own claim.
  • records are line numbers (seq) in runs.jsonl. For AC-1, seq 2 is the check run on the starting commit, failing as declared, and seq 3 is the same check passing on the result. Seq 5 is the review note that recorded the Spar gate, and completion record seq 6 means ha done recorded completion.
  • The raw output of a run stays in .git/ha/. ha log docs/specs/password-link 3 prints it in Terminal.

[!IMPORTANT] assurance local and check author: executor under Remaining limits mean the agent wrote and ran the checks on your computer. This is not independent third-party verification, so review the changed checks and the actual result too.

If the work stops before completion, Seal still pastes ha report. Next step names what to resolve, and the last section shows where each unmet condition's output is:

Next step: resolve AC-2 `criterion_failed` (executor)

### Output of unmet conditions

- AC-2 `criterion_failed` (executor): seq 4, output `ha log docs/specs/password-link 4`

The other files

SPEC.md: what you want, as conditions that can be checked
# Forgot password link

Status: Ready
Criteria-Format: nested/1
Assurance: standard

## Goal

Add a "Forgot password?" link to the login screen that opens the existing reset page.

## 사용 시나리오

A user who forgot their password selects the link and reaches the reset page (AC-1).
Signing in keeps working as before (AC-2).

## Acceptance Criteria
- **AC-1** The login screen shows a "Forgot password?" link to `/reset-password`.
- **AC-2** The existing login form keeps working.

## Open Decisions

None

Status: Ready means no outcome-changing decision is left. Assurance: standard is the review tier: before ha done, Seal has the change reviewed in independent Spar rounds. Spec stops here; nothing is implemented until you start Seal.

PLAN.md: how Seal checks each condition
## 조건표
| ID | 종류 | 검증 명령 | 검사 경로 | Task |
| --- | --- | --- | --- | --- |
| AC-1 | change | `python3 checks/login_link.py` | checks/login_link.py, checks/login-link.json | T001 |
| AC-2 | maintain | `python3 -m unittest tests.test_login` | — | T001 |

## 결과 계약
| ID | 선언 경로 |
| --- | --- |
| AC-1 | checks/login-link.json |
  • change is new behavior. Seal also runs its check on the starting commit, where it must fail the way the declaration says, and then on the result, where it must pass.
  • maintain is behavior that must keep working. manual is a condition only you can confirm.
  • The plan also lists the paths Seal may change, its tasks and a run budget. REVIEW.md holds the review of this plan, the review tier and the planned review stages, and later summarizes the Spar rounds and gate, pointing to their records in docs/reviews/password-link/.
runs.jsonl: the run record behind the report

ha appends one JSON line for each recorded event: start; a check or baseline line for each target it runs, so ha check <goal> AC-1 AC-2 adds two lines; note (your quoted confirmations and answers, and the review note that records a Spar gate); budget_change; done; and finding for findings recorded after completion. Each line carries the hash of the line before it (prev), so editing or removing an earlier line breaks the chain and ha reports record_integrity. The last line has no later line to expose a change. The record head (seq and hash) in the completion report is the last line when ha done ran; later lines such as notes or findings can follow it. A shortened done line:

{"schema":"run/v1","seq":6,"prev":"578fb93e…","kind":"done","status":"complete","commit":"e01fdf1e…","tree_clean":true,"criteria":[{"id":"AC-1","kind":"change","satisfied":true,"records":[2,3]},{"id":"AC-2","kind":"maintain","satisfied":true,"records":[4]}]}

Korean section names

Some fixed section names and table columns stay in Korean in every language, because ha and the skills read them by these exact names. The prose under them is written in your language.

File Korean token Meaning
SPEC.md ## 사용 시나리오 Usage scenarios, each linked to criteria
SPEC.md 흐름 · 경계 · 유지 Scenario kinds: flow, boundary, keep as is
PLAN.md ## 조건표 Condition table: ID, 종류 (kind), 검증 명령 (check command), 검사 경로 (check paths), Task
PLAN.md ## 결과 계약 Result contract: the declaration file of each change condition
PLAN.md ## 범위 · ## 예산 Scope (paths Seal may change, tests, behavior to keep) · budget (runs and elapsed time)
PLAN.md ## 읽을 자료 · ## 시간 제한 Reading list · per-check time limits
PROGRESS.md ## 현재 · ## Task 상태 Current state · task status
PROGRESS.md ## 타임라인 · ## 계획 변경 · ## 막힘 · ## 개선 메모 Timeline · plan changes · blocks · improvement notes
PROGRESS.md ## 완료 보고 · ## 완료 뒤 발견 Completion report · findings after completion

More on these files: Reading the completion report · Saved files · Format examples (in Korean)

Before you start

What should I look for in the completion report?

Required completion conditions need recorded checks or necessary user confirmations.

The agent writes the automated checks, so completion is not a guarantee that the entire result is flawless or independently verified by a third party. Review the report's assumptions and remaining limitations alongside the actual result.

The default result ends at local changes and commits (saved entries in the change history). Publish to GitHub, create pull requests, and deploy yourself, or ask a general-purpose agent separately. Reading the completion report

Can I just define a goal?

Yes. Spec works without Seal or ha. Define the goal now and start Seal when you are ready to implement it.

What records are saved?

The project keeps goal documents, work plans, progress and completion reports, and run records. Read the progress report in PROGRESS.md in the goal folder. See What you get for examples.

Installing, updating, or uninstalling does not delete these records. Git tracking follows project policy; review the contents before publishing. Saved files

More

Share your experience or where you got stuck in a usage report or install/bug issue. Issues are public: leave out company code, internal names, secrets, and raw logs.

MIT license

Directories

Path Synopsis
cmd
ha command
Command ha is Seal Core: it runs verification commands without a shell, appends the run record, computes goal state deterministically, and records completion.
Command ha is Seal Core: it runs verification commands without a shell, appends the run record, computes goal state deterministically, and records completion.
spar command
Command spar runs independent review rounds on pinned commits and keeps the records a gate decides from.
Command spar runs independent review rounds on pinned commits and keeps the records a gate decides from.
internal
bundle
Package bundle reads the execution bundle (contracts/bundle.md) of a goal directory and lints it against the goal documents.
Package bundle reads the execution bundle (contracts/bundle.md) of a goal directory and lints it against the goal documents.
diag
Package diag holds the lint problem type shared by the goal document and execution bundle parsers.
Package diag holds the lint problem type shared by the goal document and execution bundle parsers.
evidence
Package evidence binds a declared behavioral check to one process invocation.
Package evidence binds a declared behavioral check to one process invocation.
gittest
Package gittest holds Git settings for test processes that create repositories.
Package gittest holds Git settings for test processes that create repositories.
gitx
Package gitx calls the user's git CLI with explicit argv.
Package gitx calls the user's git CLI with explicit argv.
goaldocs
Package goaldocs reads goal documents (contracts/goal-docs.md) as a reader: SPEC.md, the auxiliary documents it links inside the goal directory, the criterion IDs, and the optional work breakdown proposal.
Package goaldocs reads goal documents (contracts/goal-docs.md) as a reader: SPEC.md, the auxiliary documents it links inside the goal directory, the criterion IDs, and the optional work breakdown proposal.
history
Package history stores and reads decision history (contracts/decision-history.md, schema decision-history/v1): judgment events that an executor records about one started goal.
Package history stores and reads decision history (contracts/decision-history.md, schema decision-history/v1): judgment events that an executor records about one started goal.
markdown
Package markdown reads the small Markdown subset that the Jaekit contracts rely on: headings, pipe tables, list items, inline code spans, and relative links.
Package markdown reads the small Markdown subset that the Jaekit contracts rely on: headings, pipe tables, list items, inline code spans, and relative links.
record
Package record reads and appends the run record `runs.jsonl` (contracts/run-record.md, schema run/v1).
Package record reads and appends the run record `runs.jsonl` (contracts/run-record.md, schema run/v1).
reviewgate
Package reviewgate reads a review-gate/v1 file, the public record that `spar gate` writes (contracts/review-gate.md), into the summary a run-rules/5 review note keeps (contracts/run-record.md §4.8).
Package reviewgate reads a review-gate/v1 file, the public record that `spar gate` writes (contracts/review-gate.md), into the summary a run-rules/5 review note keeps (contracts/run-record.md §4.8).
reviewseries
Package reviewseries reads one Spar review series folder: its review-round/v1 rounds (contracts/review-round.md §5) and the review-gate/v1 files beside them (contracts/review-gate.md), for the cost summary `ha cost` shows (contracts/run-record.md §1.7).
Package reviewseries reads one Spar review series folder: its review-round/v1 rounds (contracts/review-round.md §5) and the review-gate/v1 files beside them (contracts/review-gate.md), for the cost summary `ha cost` shows (contracts/run-record.md §1.7).
run
Package run executes a verification command as argv, without a shell, and keeps its combined output in a local log file.
Package run executes a verification command as argv, without a shell, and keeps its combined output in a local log file.
spar
Package spar runs independent review rounds on pinned commits and keeps the records a gate decides from.
Package spar runs independent review rounds on pinned commits and keeps the records a gate decides from.
status
Package status computes the state of a goal from the run record, the execution bundle, and git (contracts/run-record.md §3–§5).
Package status computes the state of a goal from the run record, the execution bundle, and git (contracts/run-record.md §3–§5).

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL