bellman
58a30f6ab8
fix: accept markdown agent definitions with YAML frontmatter
...
Agent discovery now loads .md files with YAML frontmatter alongside .toml
files, matching the Claude Code agent definition convention. Markdown
agent files must have ----delimited YAML frontmatter with at least name
or description fields.
Key changes:
- parse_agent_frontmatter extracts name, description, model, model_reasoning_effort
- load_agents_from_roots_with_invalids collects both valid and invalid agents
- InvalidAgentConfig tracks rejected .md files with reason
- AgentCollection groups valid agents with invalid entries
- agents JSON output includes valid_count, invalid_count, invalid_agents
- Status is degraded when invalid agents exist
Generated with https://github.com/Yeachan-Heo/gajae-code
Co-authored-by: Gajae Code <dev@gajae-code.com>
2026-06-04 23:57:33 +09:00
bellman
453d8945bb
fix: validate hook config entries partially
...
Hook config now supports the Claude Code structured hook format with
partial validation. Invalid hook entries are recorded in invalid_hooks
while valid siblings are retained, following the same pattern as MCP
partial validation (#440 ).
Key changes:
- RuntimeInvalidHookConfig now includes typed kind field (invalid_hooks_config
or unknown_hook_event) for machine-readable error classification
- Hook parsing collects all invalid entries instead of halting at first error
- Unknown hook event names recorded as invalid without rejecting valid hooks
- Legacy bare-string hooks still load with deprecation warnings
- Claude Code documented format loads without error (matcher + nested hooks)
- config/status/doctor JSON surfaces hook_validation metadata
- classify_error_kind maps hook errors to invalid_hooks_config
Generated with https://github.com/Yeachan-Heo/gajae-code
Co-authored-by: Gajae Code <dev@gajae-code.com>
2026-06-04 23:42:58 +09:00
bellman
4619375c14
fix: load partial MCP configs
...
Generated with https://github.com/Yeachan-Heo/gajae-code
Co-authored-by: Gajae Code <dev@gajae-code.com>
2026-06-04 18:31:58 +09:00
bellman
10fe72498a
fix: bound parent memory discovery
...
Generated with https://github.com/Yeachan-Heo/gajae-code
Co-authored-by: Gajae Code <dev@gajae-code.com>
2026-06-04 17:07:00 +09:00
bellman
5b22bc0480
fix: load Claw and Agents memory files
...
Generated with https://github.com/Yeachan-Heo/gajae-code
Co-authored-by: Gajae Code <dev@gajae-code.com>
2026-06-04 16:36:04 +09:00
bellman
ae7da0ec74
fix: expose complete version provenance
...
Generated with https://github.com/Yeachan-Heo/gajae-code
Co-authored-by: Gajae Code <dev@gajae-code.com>
2026-06-04 15:55:08 +09:00
bellman
7dd17c6344
fix: scaffold safe init settings
...
Generated with https://github.com/Yeachan-Heo/gajae-code
Co-authored-by: Gajae Code <dev@gajae-code.com>
2026-06-04 15:34:15 +09:00
bellman
d8535bf938
fix: keep failed resume side-effect free
...
Generated with https://github.com/Yeachan-Heo/gajae-code
Co-authored-by: Gajae Code <dev@gajae-code.com>
2026-06-04 15:08:56 +09:00
bellman
b5bead9028
fix: recover CLI parser CI
...
Generated with https://github.com/Yeachan-Heo/gajae-code
Co-authored-by: Gajae Code <dev@gajae-code.com>
2026-06-04 13:25:15 +09:00
bellman
41678eb097
fix: type output format selection
2026-06-04 12:47:24 +09:00
bellman
ecd3e4ceb9
fix: type allowed tools validation
2026-06-04 12:01:58 +09:00
bellman
22fdaeae2c
fix: keep skills lifecycle local
2026-06-04 03:58:35 +09:00
bellman
4522490bd5
fix: make dump-manifests self-contained
2026-06-04 02:46:44 +09:00
bellman
cd58c054ca
fix: add global cwd override
2026-06-04 02:20:09 +09:00
bellman
94579eace5
fix: default to workspace-write permissions
2026-06-04 01:51:21 +09:00
bellman
2ab2f44e1d
fix: keep session help local
2026-06-04 00:50:17 +09:00
bellman
fa35018769
fix: validate env model selection
2026-06-04 00:30:13 +09:00
bellman
94be902ce1
fix: attribute config precedence in JSON
2026-06-03 23:47:27 +09:00
bellman
9522674c87
fix: read prompt subcommand input from stdin
2026-06-03 22:39:16 +09:00
bellman
c91a3062d5
fix: normalize Anthropic model routing
2026-06-03 22:20:23 +09:00
bellman
36218ac1b1
fix: report config file load statuses
2026-06-03 21:46:47 +09:00
bellman
ce116d9dfa
fix: expose binary provenance in local JSON
2026-06-03 20:03:39 +09:00
bellman
372ec09c47
test: cover roadmap helper missing path
2026-06-03 19:31:45 +09:00
bellman
78f446f68e
test: add argv-safe dogfood probes
2026-06-03 19:26:55 +09:00
bellman
55da189315
fix: keep JSON control surfaces local
2026-06-03 19:12:20 +09:00
bellman
e752b05425
fix: load common instruction files and typed unknown commands
2026-06-03 18:54:36 +09:00
bellman
0c83a26dc7
test: cover resumed unknown slash command
2026-06-03 18:40:37 +09:00
bellman
286638fa04
docs: close ROADMAP 828 approval slash evidence
2026-06-03 18:29:16 +09:00
bellman
47d6c3d5d3
docs: close ROADMAP 829 interactive hint evidence
2026-06-03 18:26:37 +09:00
bellman
f529fb0e55
fix: classify mcp show missing server argument
2026-06-03 18:22:23 +09:00
YeonGyu-Kim
4d3dc5b873
docs: record #830 - mcp show missing server name emits unknown_mcp_action instead of missing_argument
2026-05-29 16:57:22 +09:00
YeonGyu-Kim
fdfb9f4dc1
docs: record #829 - interactive_only hint incorrectly suggests --resume for non-resume-safe commands
2026-05-29 16:38:04 +09:00
YeonGyu-Kim
187aebd74f
fix: /approve and /deny outside REPL emit interactive_only error_kind ( #828 )
...
/approve, /yes, /deny, /no (and /y, /n) are valid REPL-only slash
commands. Outside the REPL they were falling through to
format_unknown_direct_slash_command -> error_kind:unknown_slash_command.
Fix: intercept them in the SlashCommand::Unknown arm and emit
interactive_only: prefix so classify_error_kind returns the correct kind.
One new test: approve_deny_outside_repl_emits_interactive_only (covers
/approve, /yes, /deny, /no)
572 tests pass, 1 pre-existing worker_boot failure unrelated.
2026-05-29 16:36:54 +09:00
YeonGyu-Kim
58902915f6
docs: record #827 - resume unknown slash command emits opaque error_kind:unknown
2026-05-29 14:59:12 +09:00
YeonGyu-Kim
5458d3547a
docs: record #826 - multi-word unknown subcommand falls through to missing_credentials
2026-05-29 14:38:09 +09:00
YeonGyu-Kim
70d64be033
fix: unknown single-word subcommand emits command_not_found instead of missing_credentials ( #825 )
...
When looks_like_subcommand_typo fires on a single word with no close
fuzzy matches, the fallthrough reached CliAction::Prompt → provider
startup → misleading missing_credentials error.
Fix: always return Err with command_not_found: prefix from the typo
guard (with or without suggestions). Added command_not_found classifier
arm in classify_error_kind. Unified existing unknown_subcommand kind
under command_not_found in #825 .
Three new regression tests in output_format_contract.rs:
- unknown_subcommand_json_emits_command_not_found
- unknown_subcommand_text_emits_command_not_found_on_stderr
- unknown_subcommand_typo_with_suggestions_json_emits_command_not_found
Updated pre-existing unit test assertion (starts_with → contains) and
classifier unit test (unknown_subcommand → command_not_found).
572 tests pass, 1 pre-existing worker_boot failure unrelated.
2026-05-29 14:37:29 +09:00
YeonGyu-Kim
f0e6671538
docs: record #824 - global settings-load deprecation leaks to stderr in JSON mode
2026-05-29 13:34:29 +09:00
YeonGyu-Kim
e50c46c1ed
docs: extend #821 - config/providers also leak deprecation warning in JSON mode
2026-05-29 12:01:09 +09:00
YeonGyu-Kim
3dbb35c3aa
docs: record prompt missing-text JSON stderr routing gap ( #823 )
2026-05-29 11:31:28 +09:00
YeonGyu-Kim
3a76c4f4fd
docs: record unknown subcommand falls through to provider startup ( #822 )
2026-05-29 11:01:13 +09:00
YeonGyu-Kim
69b59079c5
docs: record status/sandbox/system-prompt JSON stderr deprecation leak ( #821 )
2026-05-29 10:31:13 +09:00
YeonGyu-Kim
42aff269d1
docs: record interactive_only error class JSON stderr routing gap ( #820 )
2026-05-29 10:01:01 +09:00
YeonGyu-Kim
efe59c22e4
docs: record export session-not-found JSON stderr routing gap ( #819 )
2026-05-29 09:33:25 +09:00
YeonGyu-Kim
37a9a543d6
docs: record AGENTS.md and .claude/CLAUDE.md instruction cascade gap ( #818 )
2026-05-29 08:09:51 +09:00
Bellman
69b8b367c1
docs: record plugins trailing dash json routing ( #3193 )
2026-05-28 21:35:25 +09:00
Bellman
ed3a616e62
docs: record global json warning leak ( #3191 )
2026-05-28 18:36:30 +09:00
Bellman
c3e7b6af60
docs: record config json warning duplication ( #3189 )
2026-05-28 17:05:57 +09:00
Bellman
3af2d9f986
docs: verify trailing json inventory gap resolved ( #3188 )
2026-05-28 16:36:11 +09:00
Bellman
09ff1caf42
docs: record trailing json inventory timeout ( #3187 )
2026-05-28 16:05:50 +09:00
Bellman
0e6d48d9dc
docs: record argv-safe dogfood probe gap ( #3186 )
2026-05-28 15:34:04 +09:00
Bellman
73d8d6e638
Keep doctor help machine-discoverable locally ( #3184 )
...
Doctor help was already on the local help path in current source, but the exact #702 dogfood surface lacked a focused guard and the JSON help envelope was still too prose-oriented for wrappers. Strengthen the JSON contract while preserving text help.\n\nConstraint: Preserve unrelated dirty rust/Cargo.lock from prior #701 work.\nRejected: Starting runtime/provider/session to inspect doctor semantics | help must be local and credential-free.\nConfidence: high\nScope-risk: narrow\nDirective: Keep doctor help routed through parse_local_help_action and print_help_topic; do not call run_doctor for --help.\nTested: cargo test --manifest-path rust/Cargo.toml -p rusty-claude-cli --test output_format_contract doctor_help -- --nocapture; cargo test --manifest-path rust/Cargo.toml -p rusty-claude-cli --test output_format_contract help -- --nocapture; cargo fmt --manifest-path rust/Cargo.toml --all -- --check; cargo check --manifest-path rust/Cargo.toml -p rusty-claude-cli; timeout 5s cargo run -q --bin claw -- --output-format json doctor --help; timeout 5s cargo run -q --bin claw -- doctor --help.\nNot-tested: full workspace test suite.
2026-05-28 13:31:39 +09:00
Bellman
c4770e6571
docs(roadmap): add #811 json error envelope nontty hangs ( #3171 )
2026-05-28 05:35:57 +09:00
Bellman
b0e94c996b
docs(roadmap): add #810 json stdout warning contamination ( #3169 )
2026-05-28 05:05:17 +09:00
Bellman
85d63b071c
docs(roadmap): add #809 help mcp plugin json hangs ( #3168 )
2026-05-28 04:30:30 +09:00
Bellman
db81598525
docs(roadmap): add #808 control-plane json hangs ( #3166 )
2026-05-28 03:32:15 +09:00
Bellman
86f45a11ef
docs(roadmap): add #807 model json hang ( #3163 )
2026-05-28 01:33:01 +09:00
YeonGyu-Kim
87b7e74770
fix( #806 ): plugins show <not-found> in text mode returned empty success instead of error
2026-05-27 22:34:10 +09:00
YeonGyu-Kim
efd34c151a
fix( #805 ): skills show <not-found> in text mode silently returned empty success instead of error
2026-05-27 21:05:41 +09:00
YeonGyu-Kim
2c3c0f60e7
fix( #804 ): agents/skills show <name> <extra> in text mode returned wrong error instead of unexpected_extra_args
2026-05-27 20:05:39 +09:00
YeonGyu-Kim
bad1b97f8e
fix( #803 ): agents/skills/plugins list --flag in text mode silently returned empty success
2026-05-27 19:38:31 +09:00
YeonGyu-Kim
fcebf64468
fix( #802 ): four resume-mode and broad-cwd error envelopes now include hint field
2026-05-27 19:04:15 +09:00
YeonGyu-Kim
53953a8157
fix( #801 ): diff non-git-dir error envelope now includes error_kind, hint, and message fields
2026-05-27 18:34:58 +09:00
YeonGyu-Kim
1201dc60ef
docs(roadmap): add deferred entries #798-#800 (plugins extra-arg, empty-prompt, classifier coverage)
2026-05-27 18:21:35 +09:00
Bellman
23d7761e50
docs(roadmap): add #786 installed binary provenance gap ( #3126 )
2026-05-27 18:21:02 +09:00
YeonGyu-Kim
9976585f87
fix( #796 ): agents/skills show <name> <extra> returned wrong not-found instead of unexpected_extra_args
2026-05-27 14:07:04 +09:00
YeonGyu-Kim
18b4cee5fd
fix( #795 ): skill_not_found and unsupported_skills_action now return non-null hints via fallback table
2026-05-27 13:34:09 +09:00
YeonGyu-Kim
491f179a03
fix( #794 ): plugins install not-found path returns typed plugin_source_not_found instead of unknown+null
2026-05-27 13:08:14 +09:00
YeonGyu-Kim
57a57ef771
fix( #793 ): plugins list --flag silent success + uninstall not-found hint:null
2026-05-27 12:34:35 +09:00
YeonGyu-Kim
abfa2e4cf7
fix( #792 ): agents/skills list --flag silently returned empty success; now returns unknown_option error
2026-05-27 11:39:44 +09:00
YeonGyu-Kim
93a159dca5
fix( #791 ): config extra-arg errors now return non-null hint via \n-delimited usage string
2026-05-27 11:04:50 +09:00
YeonGyu-Kim
9968a27e92
fix( #790 ): system-prompt unknown-option errors now return typed unknown_option kind + non-null hint
2026-05-27 10:36:12 +09:00
YeonGyu-Kim
e4c3c1aa80
fix( #789 ): agents show and plugins show not-found now exit 1; parity with skills ( #788 ) and mcp ( #68 )
2026-05-27 10:07:51 +09:00
YeonGyu-Kim
abdbf61acf
fix( #788 ): skills show not-found emitted duplicate JSON error envelope; use exit(1) instead of Err propagation
2026-05-27 09:36:11 +09:00
YeonGyu-Kim
113145a42a
fix( #787 ): --resume with directory path returns session_path_is_directory kind + hint; wire fallback_hint_for_error_kind into both resume error emission sites
2026-05-27 09:06:28 +09:00
YeonGyu-Kim
22b423b651
fix( #786 ): dump-manifests --manifests-dir missing-value errors now return typed missing_flag_value kind + non-null hint
2026-05-27 08:39:11 +09:00
YeonGyu-Kim
87f4334728
fix( #785 ): add unknown_subcommand classifier arm for unknown subcommand: prose prefix
2026-05-27 08:36:41 +09:00
YeonGyu-Kim
e628b4bb68
fix( #784 ): export --output missing-value and extra-positional errors now return typed error_kind + non-null hint
2026-05-27 08:07:32 +09:00
YeonGyu-Kim
81fe0ccbb7
fix( #783 ): init JSON envelope now includes hint and already_initialized fields for orchestrator parity
2026-05-27 08:04:15 +09:00
YeonGyu-Kim
32c9276fdb
fix( #782 ): acp unsupported invocation now returns non-null hint with newline-delimited remediation text
2026-05-27 07:37:26 +09:00
YeonGyu-Kim
16c1117af6
fix( #781 ): sub-classify api_auth_error/api_rate_limit_error from api_http_error; add fallback_hint_for_error_kind for hint-less API errors
2026-05-27 07:34:57 +09:00
YeonGyu-Kim
d9844cfe8d
fix( #780 ): classifier arm ordering bug — legacy_session_no_workspace_binding and no_managed_sessions shadowed by generic session_load_failed arm
2026-05-27 05:34:49 +09:00
YeonGyu-Kim
364e7909f4
fix( #779 ): resumed /skills invocation returns interactive_only error_kind + non-null hint
2026-05-27 05:09:07 +09:00
YeonGyu-Kim
fded4f6b11
fix( #778 ): doctor check JSON objects now include hint field with stable remediation text for warn/fail checks
2026-05-27 05:07:02 +09:00
YeonGyu-Kim
e02030364d
fix( #777 ): resumed /plugins mutations return interactive_only error_kind + non-null hint instead of unknown+null
2026-05-27 04:44:06 +09:00
YeonGyu-Kim
2684737d9e
fix( #776 ): resume command errors now return typed error_kind + non-null hint (invalid_history_count, session action errors)
2026-05-27 04:39:43 +09:00
YeonGyu-Kim
028998d040
test( #775 ): integration tests for #769-#771 interactive-only guards and #774 hint fields; fix stale classifier unit test string
2026-05-27 04:03:52 +09:00
YeonGyu-Kim
c760a49c47
fix( #774 ): agents/plugins/mcp unknown-subcommand errors now include non-null hint
2026-05-27 03:37:00 +09:00
YeonGyu-Kim
727a1ea4a3
fix( #773 ): config --output-format json now surfaces deprecation warnings in warnings[] array instead of only stderr text
2026-05-27 03:05:14 +09:00
YeonGyu-Kim
212f0b2ad4
fix( #772 ): slash command aliases now resolve to canonical forms in interactive_only guidance
2026-05-27 02:37:17 +09:00
YeonGyu-Kim
bf212b986d
fix( #771 ): init rejects extra args; usage/stats/fork return interactive_only instead of credential check
2026-05-27 02:33:55 +09:00
YeonGyu-Kim
3a1d88386c
fix( #770 ): cost/clear/memory/ultraplan/model with args now return interactive_only instead of falling to credential check
2026-05-27 02:10:41 +09:00
YeonGyu-Kim
9e1be05634
fix( #769 ): claw session <arg> now returns interactive_only instead of falling to credential check
2026-05-27 02:05:14 +09:00
YeonGyu-Kim
b778d4e3d4
fix( #768 ): --resume non-slash trailing arg now has error_kind:invalid_resume_argument + hint
2026-05-27 01:35:46 +09:00
YeonGyu-Kim
89735dbd33
fix( #766 ): claw diff extra args now classified as unexpected_extra_args with hint; track #767 session subcommand gap
2026-05-27 01:33:24 +09:00
YeonGyu-Kim
d29a8e216b
fix( #765 ): login/logout removed_subcommand now has error_kind + non-null hint
2026-05-27 01:28:35 +09:00
YeonGyu-Kim
4ea255ca6a
fix( #764 ): config_parse_error now populates hint field via Display newline delimiter
2026-05-27 01:23:00 +09:00
YeonGyu-Kim
c86dc73d8c
fix( #763 ): config JSON parse errors now classify as config_parse_error
2026-05-27 01:16:04 +09:00
YeonGyu-Kim
88ce181031
test( #762 ): classify_error_kind now covers all 23 classifier arms (was 8 of 23)
2026-05-27 00:33:11 +09:00
YeonGyu-Kim
d83de563c1
fix( #761 ): mcp server_not_found and skill_not_found envelopes now include hint field
2026-05-27 00:03:53 +09:00
YeonGyu-Kim
7fa81b5dae
fix( #760 ): agent_not_found and plugin_not_found envelopes now include hint field
2026-05-26 23:36:30 +09:00