kairos-chain 3.75.0 → 3.77.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +131 -0
  3. data/lib/kairos_mcp/version.rb +1 -1
  4. data/templates/knowledge/multi_llm_review_workflow/multi_llm_review_workflow.md +90 -5
  5. data/templates/skillsets/agent/config/agent.yml +13 -2
  6. data/templates/skillsets/agent/lib/agent/mandate_adapter.rb +26 -2
  7. data/templates/skillsets/agent/skillset.json +2 -1
  8. data/templates/skillsets/agent/test/test_agent_complexity_review.rb +1 -1
  9. data/templates/skillsets/agent/test/test_agent_halt_semantics.rb +2 -2
  10. data/templates/skillsets/agent/test/test_agent_human_mark_gate.rb +478 -0
  11. data/templates/skillsets/agent/test/test_agent_m2.rb +1 -1
  12. data/templates/skillsets/agent/test/test_agent_m3.rb +1 -1
  13. data/templates/skillsets/agent/test/test_agent_m4.rb +1 -1
  14. data/templates/skillsets/agent/tools/agent_start.rb +8 -2
  15. data/templates/skillsets/agent/tools/agent_step.rb +287 -13
  16. data/templates/skillsets/agent/tools/operator_report.rb +130 -0
  17. data/templates/skillsets/autoexec/tools/autoexec_run.rb +69 -1
  18. data/templates/skillsets/autonomos/lib/autonomos/mandate.rb +38 -8
  19. data/templates/skillsets/kairos_hook_projector/hooks/readable_gate.rb +427 -20
  20. data/templates/skillsets/kairos_hook_projector/test/mutation_check_readable_gate.rb +345 -0
  21. data/templates/skillsets/kairos_hook_projector/test/test_readable_gate.rb +1313 -5
  22. data/templates/skillsets/minimum_nomic/README.md +7 -0
  23. data/templates/skillsets/minimum_nomic/bin/propose_metric.rb +17 -3
  24. data/templates/skillsets/minimum_nomic/skillset.json +1 -1
  25. metadata +4 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3491085c294fc09283689fa6a808362f088cd2d3287639c028959165928f4820
4
- data.tar.gz: d974be22bf343153f28e3dff6146fcc931e72af34c138d5e3ada2330afcf08f8
3
+ metadata.gz: ca968a084e8868b9cbeaa3283850dd7e56095a503d661ce6e74158ec7555f0e3
4
+ data.tar.gz: 7a410b2edb98cd9bf02c8396f11d1d411e9b190456ea87402789d9a95aea5f16
5
5
  SHA512:
6
- metadata.gz: 9072c0b407d3cd2a50490de0c93f954a4d32fb86d3342b5eb36c80940d21257e001edc1a3eba0b158c6f7f822638a7fb445a98093fa34fe73c84593e8b624771
7
- data.tar.gz: 32afff4b989ba3b1a09a96d138250e6e536e68700be54f4f09887311406170439ffdb422f6ba21d49c204109758963181c2d5f199aa60f692c3c21a7c5ad609b
6
+ metadata.gz: 5cea432521cb70bcc7ed1f354bb0a4abe1165d16a25ed185d8b3c46af5db0d00d57c459737e3a52f290a356d29356033cce8e6ef4c56e7526438eb6f7eba30d3
7
+ data.tar.gz: cf536e54e866a943d95d0209741c1a6658e6df62421f9a5e0e082983e98025057aa4e4dfc04ad08a4f96e7acfd9a982e69bde253d6f3986302325d9dd7ab65f3
data/CHANGELOG.md CHANGED
@@ -4,6 +4,137 @@ All notable changes to the `kairos-chain` gem will be documented in this file.
4
4
 
5
5
  This project follows [Semantic Versioning](https://semver.org/).
6
6
 
7
+ ## [3.77.0] - 2026-08-26
8
+
9
+ ### Added
10
+
11
+ - **`operator_report` — the agent SkillSet's first tool for handing a
12
+ deliverable to a human.** Three runs produced documents no one could receive;
13
+ the loop concluded "there is no way to deliver this" and it was right. The
14
+ tool writes the report body to a file under `.kairos/log/agent_reports/` and
15
+ returns only the path, because the executor truncates tool output at 500
16
+ characters. It is registered `low` in the risk table — an unlisted tool would
17
+ be marked by norm (d) and the report itself would wait for human
18
+ confirmation. Two norms ship with it: (e) an irreversible step is marked and
19
+ deferred, not a reason to halt the plan; (f) a delivery tool exists — do not
20
+ conclude there is no way to hand the result over.
21
+
22
+ - **`test_agent_human_mark_gate.rb`** — 39 tests, 87 assertions, covering the
23
+ deferred-mark path, halt-kind classification, and the cumulative cycle
24
+ ledger.
25
+
26
+ ### Changed
27
+
28
+ - **Seven fixes surfaced by running the loop, not by reviewing it.** The goal
29
+ text never reached the DECIDE prompt — the loop was judging without its goal;
30
+ it is now included, truncated at 6,000 characters with the cut declared in
31
+ the text. Halt kinds were hardcoded to one kind, so tool errors were recorded
32
+ as "waiting for human"; the kind now reads from each step's own status, and
33
+ the seven-site refactor a prior design round estimated for this turned out
34
+ unnecessary. A plan halted at its first human-marked step; `human_mark_mode:
35
+ 'defer'` sets marked steps and their dependents aside, runs the rest, and
36
+ returns the deferred list at the cycle's end (the default remains `halt`).
37
+ The completed-cycle count was per call; the ledger now accumulates across the
38
+ run. Norm (d) pulled read-only tools into confirmation waits; it now names
39
+ writing, recording, sending, and deleting tools only, and its counter is
40
+ renamed `unlisted_writing_tool_unmarked` with the old name's counts folded
41
+ in. Report titles doubled when the body already opened with a heading; they
42
+ no longer do.
43
+
44
+ ### Removed
45
+
46
+ - **The 300-second wall clock and `max_cycles`.** The clock was shorter than
47
+ one measured cycle (823 seconds for a 13-step cycle); both caps are gone.
48
+ What still stops a run: the call budget (`max_total_llm_calls`, default 60 —
49
+ about 15 cycles at the measured 4 calls per cycle), two consecutive errors,
50
+ loop detection, self-declared completion at confidence ≥ 0.9, and the
51
+ `checkpoint_every` return, where continuing is decided by whether the
52
+ operator calls the next `agent_step`. The uncapped run that validated this
53
+ went three cycles: the first drafted a priority list, the second found and
54
+ corrected six errors in it, the third declined to write a third version,
55
+ declared the second canonical, and returned four open items — zero norm
56
+ violations, confidence never reaching the self-completion threshold. Mutation
57
+ testing covers the session's first half (11 mutants, 11 killed); the latter
58
+ eight fixes ship unmutated by operator decision — this release exists to find
59
+ their defects in use.
60
+
61
+ ## [3.76.0] - 2026-08-22
62
+
63
+ ### Changed
64
+
65
+ - **L1 `multi_llm_review_workflow` 3.10.2 → 3.11.0 — three norms and one
66
+ recorded open question, for three failures the operator named and one request
67
+ he made.** The failures: an orchestrator issuing different criteria each
68
+ round, the APPROVE ratio operating as the close condition, and design reviews
69
+ descending into code. The request: bound mutation experiments. Four rules were
70
+ drafted, reviewed over three rounds, applied, reviewed once more as applied
71
+ text — one APPROVE of four seats, eighteen blocking findings — and revised
72
+ subtractively. What ships is narrower than what was drafted, which is the
73
+ point: this entry's own § Revision Discipline records that deletions drew zero
74
+ new P0s in every measured case and additions became the next round's
75
+ battleground.
76
+
77
+ **§ Prompt Generation Rules gains a recording duty on the round's
78
+ instrument** — what a seat is told to look for, how much of the artifact it is
79
+ given, and which seats answer. It bounds nothing: narrowing criteria, cutting
80
+ scope and convening a different panel are each a documented remedy for
81
+ something. It forbids moving the instrument and then reading the resulting
82
+ change in finding counts as a property of the artifact. It was drafted around
83
+ criteria alone, which left scope and panel composition — two channels that
84
+ move the count just as well — outside it.
85
+
86
+ **§ Review Types gains the phase rule as an invariant with no branches**: a
87
+ review answers at the phase of its target and does not descend. Design and
88
+ Document reviews read code only to refute a factual claim and write none;
89
+ implementation review is where fixes are written. Two enumerated sentences
90
+ drafted with it are not here. "An implementation-phase finding that reopens
91
+ the design belongs to the backlog" collided with this entry's own "any (a) or
92
+ (b) REJECT or FAIL = revise and re-review" over exactly the
93
+ design-implementation seam it calls the most valuable layer, and pre-answered
94
+ the operator question § Revision Discipline rule 1 requires. "Fix plan and
95
+ Final/convergence reviews inherit the phase of the artifact they check" gave
96
+ those two nothing to inherit, no phase being assigned to a fix plan anywhere.
97
+ The `<structured_output_contract>` line drops "consider improving" without
98
+ enumerating review types, because the enumerated form left this entry's own
99
+ knowledge/documentation-update review unassigned.
100
+
101
+ **The mutation norm is one sentence inside the phase rule and assigns no
102
+ party**: a green suite is not evidence until its tests have been shown to
103
+ fail, and a pass whose sites the code's author chose measures the author's
104
+ attention, not the suite. It was drafted as a seventh item in Step -1 carrying
105
+ the duty "whoever chooses the sites is not whoever wrote the code", and no
106
+ party in this entry can discharge that — before dispatch the only actor is the
107
+ orchestrator, which § Roles makes the same context as the implementer, and
108
+ review seats run sandboxed read-only and cannot execute anything. Stated as a
109
+ property of evidence rather than a duty on someone, it holds wherever a
110
+ mutation result is read. The bound the operator asked for is not here and the
111
+ omission is open, not settled: the recorded decision is to accumulate three
112
+ runs and then judge.
113
+
114
+ **Withdrawn in the same version: a rule making each seat label its own
115
+ findings new or carryover.** A seat sees only its own priors, so a finding one
116
+ seat raises after another raised it is new to that seat and carryover to the
117
+ round, and a seat added or returning mid-thread has no priors at all, making
118
+ every finding it raises new by construction — the machine-side signal "new
119
+ (a)+(b) P0 = 0" is then not computable from seat labels. § Convergence Rules
120
+ records that who makes the label is undecided and that the orchestrator makes
121
+ it meanwhile, which is the biased judge the withdrawn rule was written to
122
+ replace. Its paired edits revert with it, which also removes "the round number
123
+ is never written into a prompt" — that sentence contradicted § Output
124
+ Directive's MUST that the prompt carry `review{N}` in the output path, and an
125
+ orchestrator obeying it would have had round N+1 overwrite round N.
126
+
127
+ A fifth proposed rule, an exception for self-referential reviews, was dropped
128
+ before the version was written, after four reviewer contexts — occupying two
129
+ of that round's three counted seats — shot it on three independent grounds.
130
+
131
+ Across all four review rounds the thing most often refuted was not the rules
132
+ but the change's account of itself. The pre-flight falsifier for the applied
133
+ round refuted 8 of 22 checked claims, three of them inside the version entry;
134
+ the correction to those three introduced a fourth false claim, which the round
135
+ then refuted. Every such claim is a record summarised without its denominator
136
+ or its condition.
137
+
7
138
  ## [3.75.0] - 2026-08-21
8
139
 
9
140
  ### Added
@@ -1,4 +1,4 @@
1
1
  module KairosMcp
2
- VERSION = "3.75.0"
2
+ VERSION = "3.77.0"
3
3
  CHANGELOG_URL = "https://github.com/masaomi/KairosChain_2026/blob/main/CHANGELOG.md"
4
4
  end
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: multi_llm_review_workflow
3
3
  description: "Multi-LLM review methodology and execution — workflow pattern, CLI tooling, consensus analysis, Persona Assembly. Applicable to design, implementation, documentation, or any artifact."
4
- version: "3.10.2"
4
+ version: "3.11.0"
5
5
  tags:
6
6
  - workflow
7
7
  - review
@@ -53,7 +53,9 @@ write a review spec and declare it frozen for the round:
53
53
  3. **Cap fixes per round (≤5)** and write one line per fix: *what this fix
54
54
  newly claims* (values pinned, ranges narrowed, failure visibility
55
55
  changed). A fix that cannot state its new claims is doing more than the
56
- finding asked.
56
+ finding asked. A round that moves its instrument records that it moved it
57
+ (§ Prompt Generation Rules). That is a recording duty; unlike the cap
58
+ above, it bounds nothing.
57
59
  4. **Pre-flight falsifier.** Before dispatch, one agent whose only job is to
58
60
  refute every factual claim in the spec and artifact — especially numbers
59
61
  and "X does not exist" claims. In this loop it caught real errors before
@@ -563,6 +565,13 @@ Rules:
563
565
  | Document review | Accuracy, completeness, consistency | Document text | Grant applications, papers |
564
566
  | Final/convergence review | All prior findings resolved, no new issues | Resolution matrix + revised artifact | Before merge |
565
567
 
568
+ **A review answers at the phase of its target and does not descend.** Design
569
+ review and Document review read code only to refute a factual claim the
570
+ artifact makes about an existing system, and write none. Implementation review
571
+ is where fixes are written, and is also where a green suite is not evidence
572
+ until its tests have been shown to fail — a mutation pass whose sites the
573
+ code's author chose measures the author's attention, not the suite.
574
+
566
575
  ## LLM Role Differentiation
567
576
 
568
577
  Without explicit instruction, different LLMs naturally focus on different verification layers:
@@ -601,9 +610,17 @@ numerator moved. Do not treat a reached ratio as sufficient on its own either:
601
610
  check what the approving replies actually said before counting them.
602
611
 
603
612
  **Count carryover and new (a)/(b) P0s separately; the machine-side signal of
604
- convergence is "new P0 = 0", not the APPROVE ratio.** Require each persona to
613
+ convergence is "new P0 = 0", not the APPROVE ratio.** Require each **seat** to
605
614
  state a closure verdict on its own prior-round P0s — closed / open /
606
- half-closed, with grounds. This format is validated live (chain erasure
615
+ half-closed, with grounds. **Who labels a finding new versus carryover is
616
+ undecided.** The seat-side answer — each seat labelling against its own prior
617
+ findings — was written into this section on 2026-08-22 and removed the same day:
618
+ a seat sees only its own priors, so a finding one seat raises after another seat
619
+ raised it is new to that seat and carryover to the round, and a seat added or
620
+ returning mid-thread has no priors at all, making every finding it raises new by
621
+ construction. Until this is answered, the orchestrator makes the call, knowing
622
+ that it is the context whose artifact the call converges. This format is
623
+ validated live (chain erasure
607
624
  R6–R8) and is what makes the carryover/new split computable. A round whose
608
625
  (a)+(b) findings are all carryover with closure verdicts, and whose revision
609
626
  drew zero new P0s (observed without exception when the revision was
@@ -1202,6 +1219,19 @@ Every review prompt MUST include these 7 items:
1202
1219
 
1203
1220
  All prompt content MUST be in **English** for consistent parsing across LLM tools.
1204
1221
 
1222
+ **A round that changes its instrument records the change.** The instrument is
1223
+ whatever bounds what the round can find: what a seat is told to look for, how
1224
+ much of the artifact it is given, and which seats answer. Some of a prompt
1225
+ varies by construction — the artifact itself, the prior findings a round asks a
1226
+ seat to verdict — and that is not the instrument. When a round moves the
1227
+ instrument, it says so on the record, in one line, naming what moved and why.
1228
+
1229
+ This is a recording duty, not a prohibition. An orchestrator may narrow a
1230
+ seat's criteria mid-thread, cut the scope, or convene a different panel; each
1231
+ of those is a documented remedy for something. What it may not do is move the
1232
+ instrument and then read the resulting change in finding counts as a property
1233
+ of the artifact.
1234
+
1205
1235
  ### Reviewer incentive rule
1206
1236
 
1207
1237
  **Never tell a reviewer — subprocess or persona — that its finding count is
@@ -1247,7 +1277,8 @@ For each finding:
1247
1277
  - **What can go wrong**: concrete failure scenario
1248
1278
  - **Why this is vulnerable**: code path or design gap
1249
1279
  - **Likely impact**: data loss, security breach, silent corruption, etc.
1250
- - **Recommended fix**: specific change (not "consider improving")
1280
+ - **Recommended fix**: specific, never "consider improving" — the change where
1281
+ this review writes changes, the claim that does not hold where it does not.
1251
1282
  </structured_output_contract>
1252
1283
 
1253
1284
  <grounding_rules>
@@ -1611,5 +1642,59 @@ Compression ratio: parallel agent raw → Assembly ≈ 2:1
1611
1642
  with zero new and one carryover (a) at 1 of 2 seats approving reports
1612
1643
  "GATE NOT PASSED" under the old rule and "FREEZE CANDIDATE" under this one.
1613
1644
 
1645
+ - Three norms, subtractively (v3.11.0, 2026-08-22): the operator named three
1646
+ recurring failures — an orchestrator issuing different criteria each round,
1647
+ the APPROVE ratio operating as the close condition, and design reviews
1648
+ descending into code — and asked for mutation experiments to be bounded. Four
1649
+ rules were written and reviewed; one was withdrawn in the same version and two
1650
+ of the survivors are narrower than they were drafted, so what ships is three
1651
+ norms and one recorded open question. **§ Prompt Generation Rules** gains a
1652
+ recording duty on the round's instrument — what a seat is told to look for,
1653
+ how much of the artifact it is given, and which seats answer. It bounds
1654
+ nothing: narrowing criteria, cutting scope and convening a different panel are
1655
+ each a documented remedy for something. What it forbids is moving the
1656
+ instrument and then reading the resulting change in counts as a property of
1657
+ the artifact. It was drafted around criteria alone, which left scope and panel
1658
+ composition — two channels that move the count just as well — outside it.
1659
+ **§ Review Types** gains the phase rule as an invariant with no branches: a
1660
+ review answers at the phase of its target and does not descend. Two enumerated
1661
+ sentences were drafted with it and are not here. "An implementation-phase
1662
+ finding that reopens the design belongs to the backlog" collided with this
1663
+ document's own "any (a) or (b) REJECT or FAIL = revise and re-review" over
1664
+ exactly the design-implementation seam it calls the most valuable layer, and
1665
+ pre-answered the operator question § Revision Discipline rule 1 requires. "Fix
1666
+ plan and Final/convergence reviews inherit the phase of the artifact they
1667
+ check" gave those two reviews nothing to inherit, since no phase is assigned to
1668
+ a fix plan anywhere. The output contract at `<structured_output_contract>`
1669
+ drops "consider improving" without enumerating review types, because the
1670
+ enumerated form left this document's own knowledge/documentation-update review
1671
+ unassigned. **The mutation norm** is one sentence inside the phase rule and
1672
+ assigns no party: a green suite is not evidence until its tests have been shown
1673
+ to fail, and a pass whose sites the code's author chose measures the author's
1674
+ attention, not the suite. It was drafted as a seventh item in Step -1 with the
1675
+ duty "whoever chooses the sites is not whoever wrote the code", and no party in
1676
+ this document can discharge that — before dispatch the only actor is the
1677
+ orchestrator, which § Roles makes the same context as the implementer, and the
1678
+ seats are sandboxed read-only and cannot execute anything. Stated as a property
1679
+ of evidence rather than a duty on someone, it holds wherever a mutation result
1680
+ is read. The bound the operator asked for is not here and the omission is open,
1681
+ not settled: the recorded decision is to accumulate three runs and then judge.
1682
+ **Withdrawn in this version**: a rule making each seat label its own findings
1683
+ new or carryover. A seat sees only its own priors, so a finding one seat raises
1684
+ after another raised it is new to that seat and carryover to the round, and a
1685
+ seat added or returning mid-thread has no priors at all. § Convergence Rules
1686
+ now records that who makes the label is undecided and that the orchestrator
1687
+ makes it meanwhile, which is the biased judge the withdrawn rule was written to
1688
+ replace. A fifth proposed rule, an exception for self-referential reviews, was
1689
+ dropped before this version was written, after four reviewer contexts —
1690
+ occupying two of that round's three counted seats — shot it on three
1691
+ independent grounds. Design history: three review rounds on the proposal
1692
+ (closed by operator declaration, not convergence), then one round on the
1693
+ applied text, which returned one APPROVE of four seats and eighteen blocking
1694
+ findings — every rule above is narrower for it. What kept being shot across all
1695
+ four rounds was the change's account of itself, not the rules it proposed.
1696
+ Records: L2 `handoff_mlr_l1_norms_revision_three_rounds_and_switch_to_implementation_20260821`
1697
+ and L2 `mlr_v3_11_0_applied_review_r1_and_subtractive_revision_20260822`
1698
+
1614
1699
  **Key insight**: Design reviews and implementation reviews find
1615
1700
  **categorically different bugs**. Both phases are necessary.
@@ -30,6 +30,10 @@ tool_blacklist:
30
30
  - "skills_rollback"
31
31
  - "skills_promote"
32
32
  - "instructions_update"
33
+ # The norms the agent is held to live in L1. A run with risk_budget: medium
34
+ # would otherwise reach knowledge_update (medium in TOOL_RISK) and let the
35
+ # constrained side rewrite what constrains it.
36
+ - "knowledge_update"
33
37
  - "token_manage"
34
38
  - "system_upgrade"
35
39
  - "chain_import"
@@ -82,8 +86,15 @@ orient_tools_extra: []
82
86
 
83
87
  # Autonomous mode limits
84
88
  autonomous:
85
- max_total_llm_calls: 60 # across all cycles in one batch
86
- max_duration_seconds: 300 # wall-clock timeout per batch (5 min)
89
+ # The cost bound, and the one that actually stops a runaway. At the ~4 calls
90
+ # per cycle measured on 2026-08-26 this is about 15 cycles.
91
+ max_total_llm_calls: 60
92
+ # Wall-clock bound, off. Blank or 0 means no bound: the loop runs until it is
93
+ # done rather than until the clock says so. It never interrupted a running
94
+ # cycle — it only refused to start the next — so at 300 against a measured
95
+ # 823-second cycle it just made max_cycles above 1 unreachable. Withdrawn
96
+ # 2026-08-26; put a number back only if a run is seen to go on too long.
97
+ max_duration_seconds:
87
98
  min_cycles_before_exit: 2 # confidence exit disabled for first N cycles
88
99
  confidence_exit_threshold: 0.9 # minimum confidence for early exit
89
100
 
@@ -6,13 +6,37 @@ module KairosMcp
6
6
  # Bridges agent structures to Autonomos::Mandate API shapes.
7
7
  # Input: string keys (from JSON.parse). Output: symbol keys (for Mandate API).
8
8
  module MandateAdapter
9
+ # Tools whose presence routes the whole plan to the agent_execute
10
+ # subcontractor instead of in-process autoexec.
11
+ #
12
+ # Defined here rather than in agent_step because the risk gate and the
13
+ # ACT router must agree on the route. If they disagree, a plan can be
14
+ # granted the human-mark exemption below and then run under the
15
+ # subcontractor, which formats steps as prose and never reads the mark
16
+ # — the marked step would be delegated rather than halted on.
17
+ FILE_TOOL_NAMES = %w[Edit Write Read Bash file_edit file_write file_read].freeze
18
+
19
+ def self.routes_to_subcontractor?(task_json)
20
+ steps = task_json && task_json['steps']
21
+ Array(steps).any? { |s| FILE_TOOL_NAMES.include?(s['tool_name']) }
22
+ end
23
+
9
24
  # Convert decision_payload to Mandate-compatible proposal
10
25
  # for Mandate.risk_exceeds_budget? and Mandate.loop_detected?
26
+ #
27
+ # enforce_human_marks declares that this caller halts before a marked
28
+ # step at execution time. It lives inside autoexec_task, beside the
29
+ # steps it qualifies, because risk_exceeds_budget? reads that hash and a
30
+ # declaration written elsewhere than it is read is the whole defect.
11
31
  def self.to_mandate_proposal(decision_payload)
32
+ task_json = decision_payload['task_json']
12
33
  {
13
34
  autoexec_task: {
14
- steps: (decision_payload.dig('task_json', 'steps') || []).map { |s|
15
- { risk: s['risk'] || 'low', tool_name: s['tool_name'] }
35
+ enforce_human_marks: !routes_to_subcontractor?(task_json),
36
+ steps: Array(task_json && task_json['steps']).map { |s|
37
+ { risk: s['risk'] || 'low',
38
+ tool_name: s['tool_name'],
39
+ requires_human_cognition: s['requires_human_cognition'] == true }
16
40
  }
17
41
  },
18
42
  selected_gap: {
@@ -14,7 +14,8 @@
14
14
  "KairosMcp::SkillSets::Agent::Tools::AgentStep",
15
15
  "KairosMcp::SkillSets::Agent::Tools::AgentStatus",
16
16
  "KairosMcp::SkillSets::Agent::Tools::AgentStop",
17
- "KairosMcp::SkillSets::Agent::Tools::AgentWait"
17
+ "KairosMcp::SkillSets::Agent::Tools::AgentWait",
18
+ "KairosMcp::SkillSets::Agent::Tools::OperatorReport"
18
19
  ],
19
20
  "config_files": ["config/agent.yml"],
20
21
  "knowledge_dirs": ["knowledge/agent_guide"],
@@ -69,7 +69,7 @@ module Autonomos
69
69
  end
70
70
  end
71
71
 
72
- require File.expand_path('../../../../.kairos/skillsets/autonomos/lib/autonomos/mandate',
72
+ require File.expand_path('../autonomos/lib/autonomos/mandate',
73
73
  File.dirname(__dir__))
74
74
 
75
75
  Session = KairosMcp::SkillSets::Agent::Session
@@ -67,10 +67,10 @@ module Autonomos
67
67
  end
68
68
  end
69
69
 
70
- require File.expand_path('../../../../.kairos/skillsets/autonomos/lib/autonomos/mandate',
70
+ require File.expand_path('../autonomos/lib/autonomos/mandate',
71
71
  File.dirname(__dir__))
72
72
  # The autonomous loop reaches Ooda for goal loading and COMPLEX_KEYWORDS.
73
- require File.expand_path('../../../../.kairos/skillsets/autonomos/lib/autonomos/ooda',
73
+ require File.expand_path('../autonomos/lib/autonomos/ooda',
74
74
  File.dirname(__dir__))
75
75
 
76
76
  Session = KairosMcp::SkillSets::Agent::Session