Make the agent-facing contract uniform across the whole surface:
- cobra parse errors (unknown flag, arg-count) emit the JSON envelope by
default, not bare prose — via a single DefaultFormatMode shared by the early
resolver and ResolveDefault.
- a malformed --jq is input.invalid_argument (exit 5), not internal.error.
- destructive-confirmation messages name the real operation (edit/remove,
not a hardcoded "delete").
- `doc wait` emits one envelope (Silent failure, no contradictory stderr);
completed marshals as [] not null.
- WEKNORA_AGENT_HELP covers every leaf command, enforced by a coverage drift
guard; a sibling guard enforces --dry-run on every mutation.
- `search docs`/`search chunks` resolve --kb through the same
flag→env→project-link chain as `doc list`/`chat` (no longer a hard --kb
requirement); a linked dir or WEKNORA_KB_ID now works without --kb, and an
unresolved KB is local.kb_id_required (exit 1). The destructive
`doc delete --all` keeps its explicit-only rule.
- exit-code and batch/wait ok-semantics documented in the shared skill, README,
and AGENTS.md.
Ship weknora-shared and weknora-rag-search Agent Skills (SKILL.md plus
references) so an agent driving the CLI learns the auth flow, output contract,
exit codes, and the chat vs session-ask vs search distinction without scraping
help text.
Add CI drift guards that keep the skills honest: every ```weknora``` block must
reference a live command/flag (skillparity), and every MCP tool named in a
skill must exist in the registry (skill_tool_parity).