# 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.

> Ask the user before running any command on this page: each one changes how their agent or repository behaves.

## 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

| Event | Can block | Can rewrite | Fail mode |
| --- | --- | --- | --- |
| session_start | no | no | open |
| session_end | no | no | open |
| prompt_submit | yes | no | open |
| pre_tool | yes | yes | open |
| stop | yes | no | open |

## 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](https://github.com/open-coder-ai/chock/commit/5a4b6287a46e07f9f856d9bbe10622bd1ff2e021) and catalog [1e60d211c1bb](https://github.com/open-coder-ai/chock-catalog/commit/1e60d211c1bb767152c6ab0167932da06ab3a10f).
