Agents
Tabnine CLI
Tabnine CLI and chock: install methods and steps, what it can enforce, and the evidence behind it.
Install methods: sync. Agentseam tier block+rewrite, grade best-effort before a tool runs.
Install methods
- Repo hooks:
chock sync --repo . --agents tabninewrites.tabnine/agent/settings.json(ask the user before running it)
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 |
post_tool | yes | no | open |
stop | yes | no | open |
pre_compact | no | no | open |
Ask support
Answers an ask with: deny. Honours ask: no. Evidence: tested (tests/test_guard_fail_to_ask.py::test_a_crashed_guard_asks_rather_than_allowing).
Hook timeout
Default 60 seconds, set by the timeout field in ms.
Test status
- Repo hooks: untested. A test of the plugin says nothing about repo hooks.
- No row in the engine's list of live tests for this agent.
Known limits
Eleven events, six of which can block -- including AfterTool, which most agents treat as observation only. A deny there cannot undo the call: it "Hides the real tool output" and its reason "replaces the result sent to the model", and the retry-on-deny is AfterAgent's, not AfterTool's (docs.tabnine.com/main/getting-started/tabnine-cli/features/hooks/event-reference, read 2026-10-13). Event names are Gemini CLI's exactly; the only documented separator is timestamp in Tabnine's base schema, which identifies Tabnine but cannot exclude Gemini, so detect() declines these payloads and the agent must be named explicitly. Fails OPEN unusually broadly: any exit code other than 0 or 2 proceeds, AND stdout that is not valid JSON is treated as a systemMessage and the action is ALLOWED -- so a chatty or crashed hook is a permitted action. Rewrite is advertised in the vendor overview, and the event reference read 2026-10-13 documents BeforeTool's hookSpecificOutput.tool_input as replacing the model's arguments ("Must include all required tool parameters"), so a transform at BeforeTool is emitted there, whole; a transform with no replacement input blocks. The claim rests on the docs alone: not tested against a live Tabnine, not witnessed. The decision words are documented: "allow" or "deny" (alias "block"), docs.tabnine.com/main/getting-started/tabnine-cli/features/hooks, read 2026-10-13.
Built from engine 5a4b6287a46e and catalog 1e60d211c1bb.