Chock.sh Build your plugin

Agents

Junie CLI

Junie CLI and chock: install methods and steps, what it can enforce, and the evidence behind it.

Install methods: none. Agentseam tier block+rewrite, grade best-effort before a tool runs.

Install methods

  • Not wired by chock sync: this agent reads its hooks from a config in your home folder, and chock sync writes only inside the repository.

What it can enforce

Tier
block+rewrite
Grade before a tool runs
best-effort
Fail mode before a tool runs
open
Basis
vendor-docs
Recorded
2026-08-26

Events

EventCan blockCan rewriteFail mode
session_startnonoopen
session_endnonoopen
prompt_submityesnoopen
pre_toolyesyesopen
stopyesnoopen

Ask support

The engine records no ask claim for this agent.

Hook timeout

The engine records no timeout for this agent.

Test status

  • No row in the engine's list of live tests for this agent.

Known limits

Strongest gate here: PreToolUse returns allow/ask/block and carries updatedInput, so block, ask and rewrite are all native. Its event names and field names are Claude Code's by design; project_path is what separates the two payloads. Project-local hooks in <project>/.junie/config.json are IGNORED by default for safety, so a guardrail committed to a repo does not run for a teammate who clones it -- the user file is the only location that takes effect without --config-location. PermissionRequest inverts the usual default: a hook exiting 0 without a blocking decision approves the action and skips the dialog the user would have seen. Its documented answers are that approval and a block (decision block/deny, or exit 2); no ask and no updatedInput are documented there (junie.jetbrains.com/docs/junie-cli-hooks.html, read 2026-10-13), so an escalate or a transform at PermissionRequest is answered as a block, never as an approval. Deliberately not installable on its own -- it shares canonical pre_tool with PreToolUse, and install('junie', ['pre_tool']) wires only PreToolUse, since bundling the two would hand a consumer an approve-by-default gate they did not ask for. Wire it by hand if wanted. StopFailure is observability-only and fires on LLM/API failures, not tool failures, so it is not tool_failure and is left unmapped. Non-zero exits other than 2 are warnings and execution proceeds, so this fails OPEN.

Built from engine 5a4b6287a46e and catalog 1e60d211c1bb.