Feature: Skill CLI coverage round 3
  Cover remaining uncovered branches in src/cleveragents/cli/commands/skill.py:
  tools --refresh flag, list/show non-rich capability error fallback,
  refresh with agent_skills_paths discovery, refresh errors, long
  description truncation, and the tools ValueError path.

  Background:
    Given r3skill- a fresh skill CLI service

  # -------------------------------------------------------------------
  # tools --refresh flag with agent_skills_paths configured (lines 815-838)
  # -------------------------------------------------------------------

  Scenario: Tools command with --refresh and configured agent_skills paths
    Given r3skill- a registered skill "local/refreshable" with tool_refs
    And r3skill- agent_skills_paths config resolves to a valid path with discovered skills
    When r3skill- I invoke tools "local/refreshable" with --refresh
    Then r3skill- the CLI exit code should be 0
    And r3skill- the output should contain "Refreshed"
    And r3skill- the output should contain "agent skill"

  Scenario: Tools command with --refresh and empty agent_skills_paths
    Given r3skill- a registered skill "local/no-agent-paths" with tool_refs
    And r3skill- agent_skills_paths config resolves to empty string
    When r3skill- I invoke tools "local/no-agent-paths" with --refresh
    Then r3skill- the CLI exit code should be 0

  Scenario: Tools command with --refresh and discovery errors
    Given r3skill- a registered skill "local/disc-errors" with tool_refs
    And r3skill- agent_skills_paths config resolves with discovery errors
    When r3skill- I invoke tools "local/disc-errors" with --refresh
    Then r3skill- the CLI exit code should be 0
    And r3skill- the output should contain "Warning"

  # -------------------------------------------------------------------
  # tools ValueError path (lines 887-889)
  # -------------------------------------------------------------------

  Scenario: Tools command when resolve_tools raises ValueError
    Given r3skill- a registered skill "local/val-err-tools" with tool_refs
    And r3skill- resolve_tools will raise ValueError for "local/val-err-tools"
    When r3skill- I invoke tools "local/val-err-tools" in rich format
    Then r3skill- the CLI exit code should not be 0
    And r3skill- the output should contain "Resolution error"

  # -------------------------------------------------------------------
  # list non-rich format: capability summary ValueError fallback (lines 667-669)
  # -------------------------------------------------------------------

  Scenario: List with JSON format falls back when capability summary raises ValueError
    Given r3skill- a registered skill "local/cap-fallback" with tool_refs
    And r3skill- compute_capability_summary will raise ValueError
    When r3skill- I invoke list in format "json"
    Then r3skill- the CLI exit code should be 0
    And r3skill- the output should be valid JSON
    And r3skill- the JSON list first item should have key "tool_count"
    And r3skill- the JSON list first item "capability_summary" should be null

  # -------------------------------------------------------------------
  # show non-rich format: capability summary ValueError fallback (lines 764-766)
  # -------------------------------------------------------------------

  Scenario: Show with JSON format falls back when capability summary raises ValueError
    Given r3skill- a registered skill "local/show-cap-err" with tool_refs
    And r3skill- compute_capability_summary will raise ValueError
    When r3skill- I invoke show "local/show-cap-err" in format "json"
    Then r3skill- the CLI exit code should be 0
    And r3skill- the output should be valid JSON
    And r3skill- the JSON output key "capability_summary" should be null

  # -------------------------------------------------------------------
  # list rich format: long description truncation (lines 696-700)
  # -------------------------------------------------------------------

  Scenario: List in rich format truncates long descriptions
    Given r3skill- a registered skill "local/long-desc" with a description longer than 50 chars
    When r3skill- I invoke list in rich format
    Then r3skill- the CLI exit code should be 0
    And r3skill- the long description in the output should be truncated

  # -------------------------------------------------------------------
  # refresh: agent_skills_paths discovery (lines 953-980)
  # -------------------------------------------------------------------

  Scenario: Refresh single skill with agent_skills_paths discovery
    Given r3skill- a registered skill "local/refresh-agent" with tool_refs
    And r3skill- agent_skills_paths config resolves to a valid path with discovered skills
    When r3skill- I invoke refresh "local/refresh-agent" in rich format
    Then r3skill- the CLI exit code should be 0
    And r3skill- the output should contain "Agent Skills"
    And r3skill- the output should contain "Discovered"

  Scenario: Refresh all skills with agent_skills_paths and discovery errors
    Given r3skill- a registered skill "local/refresh-err" with tool_refs
    And r3skill- agent_skills_paths config resolves with discovery errors
    When r3skill- I invoke refresh --all in rich format
    Then r3skill- the CLI exit code should be 0
    And r3skill- the output should contain "Warning"

  # -------------------------------------------------------------------
  # refresh: single skill resolve_tools ValueError (lines 1017-1026, 1044-1046)
  # -------------------------------------------------------------------

  Scenario: Refresh single skill with ValueError during resolve_tools
    Given r3skill- a registered skill "local/refresh-fail" with tool_refs
    And r3skill- resolve_tools will raise ValueError for "local/refresh-fail"
    When r3skill- I invoke refresh "local/refresh-fail" in rich format
    Then r3skill- the CLI exit code should not be 0
    And r3skill- the output should contain "Refresh failed"

  # -------------------------------------------------------------------
  # refresh: all skills with one skill ValueError (lines 1017-1026 in loop)
  # -------------------------------------------------------------------

  Scenario: Refresh all skills where one skill has resolve_tools ValueError
    Given r3skill- a registered skill "local/good-skill" with tool_refs
    And r3skill- a registered skill "local/bad-skill" with tool_refs
    And r3skill- resolve_tools will raise ValueError for "local/bad-skill"
    When r3skill- I invoke refresh --all in rich format
    Then r3skill- the CLI exit code should be 0
    And r3skill- the output should contain "Errors"

  # -------------------------------------------------------------------
  # refresh: non-rich format with mcp_errors (lines 1035-1036)
  # -------------------------------------------------------------------

  Scenario: Refresh all in JSON format with mcp errors
    Given r3skill- a registered skill "local/ok-skill" with tool_refs
    And r3skill- a registered skill "local/err-skill" with tool_refs
    And r3skill- resolve_tools will raise ValueError for "local/err-skill"
    When r3skill- I invoke refresh --all in format "json"
    Then r3skill- the CLI exit code should be 0
    And r3skill- the output should be valid JSON
    And r3skill- the JSON output should have key "errors"

  # -------------------------------------------------------------------
  # refresh: general Exception catch (lines 1106-1108)
  # -------------------------------------------------------------------

  Scenario: Refresh raises unexpected Exception
    Given r3skill- a registered skill "local/exc-skill" with tool_refs
    And r3skill- list_skills will raise RuntimeError
    When r3skill- I invoke refresh --all in rich format
    Then r3skill- the CLI exit code should not be 0
    And r3skill- the output should contain "Refresh error"

  # -------------------------------------------------------------------
  # refresh: agent_skills_paths empty path (lines 961-962 false branch)
  # -------------------------------------------------------------------

  Scenario: Refresh with empty agent_skills_paths skips discovery
    Given r3skill- a registered skill "local/no-discovery" with tool_refs
    And r3skill- agent_skills_paths config resolves to empty string
    When r3skill- I invoke refresh "local/no-discovery" in rich format
    Then r3skill- the CLI exit code should be 0
    And r3skill- the output should not contain "Discovered"

  # -------------------------------------------------------------------
  # refresh: non-rich single skill (lines 1029-1037)
  # -------------------------------------------------------------------

  Scenario: Refresh single skill with JSON format returns structured output
    Given r3skill- a registered skill "local/json-refresh" with tool_refs
    When r3skill- I invoke refresh "local/json-refresh" in format "json"
    Then r3skill- the CLI exit code should be 0
    And r3skill- the output should be valid JSON
    And r3skill- the JSON output should have key "refreshed"

  # -------------------------------------------------------------------
  # _print_skill_detail: both timestamps None (lines 253-254)
  # -------------------------------------------------------------------

  Scenario: Show skill in rich format with no timestamps shows unknown
    Given r3skill- a registered skill "local/no-ts" with tool_refs
    And r3skill- timestamps for "local/no-ts" are removed
    When r3skill- I invoke show "local/no-ts" in rich format
    Then r3skill- the CLI exit code should be 0
    And r3skill- the output should contain "unknown"

  # -------------------------------------------------------------------
  # _print_skill_registered: include present AND registered (line 159 true)
  # -------------------------------------------------------------------

  Scenario: Add skill with includes where included skill IS registered
    Given r3skill- a registered skill "local/base-inc" with tool_refs
    And r3skill- a temp YAML for "local/parent-inc" that includes "local/base-inc"
    When r3skill- I invoke add with the temp config in rich format
    Then r3skill- the CLI exit code should be 0
    And r3skill- the output should contain "registered"
    And r3skill- the output should contain "Includes"

  # -------------------------------------------------------------------
  # _print_skill_update_changes: old_skill with includes/mcp changed
  # -------------------------------------------------------------------

  Scenario: Update skill changes includes and MCP servers shows diff
    Given r3skill- a temp YAML for "local/upd-diff" with tool_refs and MCP
    And r3skill- the skill "local/upd-diff" is pre-registered via add
    And r3skill- a second temp YAML for "local/upd-diff" with different includes and MCP
    When r3skill- I invoke add with the second config and --update in rich format
    Then r3skill- the CLI exit code should be 0
    And r3skill- the output should contain "Changes"
    And r3skill- the output should contain "Includes Changed"
    And r3skill- the output should contain "MCP Servers Changed"

  # -------------------------------------------------------------------
  # _print_skill_tools: inline tool with writes and checkpointable
  # -------------------------------------------------------------------

  Scenario: Tools command with inline tool having writes and checkpointable
    Given r3skill- a registered skill "local/inline-caps" with inline tools having capabilities
    When r3skill- I invoke tools "local/inline-caps" in rich format
    Then r3skill- the CLI exit code should be 0
    And r3skill- the output should contain "custom"

  # -------------------------------------------------------------------
  # remove: confirm prompt with yes (line 553 true branch via input)
  # -------------------------------------------------------------------

  Scenario: Remove skill without --yes and confirm with y
    Given r3skill- a registered skill "local/confirm-rm" with tool_refs
    When r3skill- I invoke remove "local/confirm-rm" without --yes and confirm
    Then r3skill- the CLI exit code should be 0
    And r3skill- the output should contain "Skill Removed"

  # -------------------------------------------------------------------
  # list non-rich: capability summary KeyError fallback
  # -------------------------------------------------------------------

  Scenario: List with JSON format falls back when capability summary raises KeyError
    Given r3skill- a registered skill "local/key-err-list" with tool_refs
    And r3skill- compute_capability_summary will raise KeyError
    When r3skill- I invoke list in format "json"
    Then r3skill- the CLI exit code should be 0
    And r3skill- the output should be valid JSON
    And r3skill- the JSON list first item "capability_summary" should be null

  # -------------------------------------------------------------------
  # show non-rich: capability summary KeyError fallback
  # -------------------------------------------------------------------

  Scenario: Show with JSON format falls back when capability summary raises KeyError
    Given r3skill- a registered skill "local/key-err-show" with tool_refs
    And r3skill- compute_capability_summary will raise KeyError
    When r3skill- I invoke show "local/key-err-show" in format "json"
    Then r3skill- the CLI exit code should be 0
    And r3skill- the output should be valid JSON
    And r3skill- the JSON output key "capability_summary" should be null
