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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +131 -0
- data/lib/kairos_mcp/version.rb +1 -1
- data/templates/knowledge/multi_llm_review_workflow/multi_llm_review_workflow.md +90 -5
- data/templates/skillsets/agent/config/agent.yml +13 -2
- data/templates/skillsets/agent/lib/agent/mandate_adapter.rb +26 -2
- data/templates/skillsets/agent/skillset.json +2 -1
- data/templates/skillsets/agent/test/test_agent_complexity_review.rb +1 -1
- data/templates/skillsets/agent/test/test_agent_halt_semantics.rb +2 -2
- data/templates/skillsets/agent/test/test_agent_human_mark_gate.rb +478 -0
- data/templates/skillsets/agent/test/test_agent_m2.rb +1 -1
- data/templates/skillsets/agent/test/test_agent_m3.rb +1 -1
- data/templates/skillsets/agent/test/test_agent_m4.rb +1 -1
- data/templates/skillsets/agent/tools/agent_start.rb +8 -2
- data/templates/skillsets/agent/tools/agent_step.rb +287 -13
- data/templates/skillsets/agent/tools/operator_report.rb +130 -0
- data/templates/skillsets/autoexec/tools/autoexec_run.rb +69 -1
- data/templates/skillsets/autonomos/lib/autonomos/mandate.rb +38 -8
- data/templates/skillsets/kairos_hook_projector/hooks/readable_gate.rb +427 -20
- data/templates/skillsets/kairos_hook_projector/test/mutation_check_readable_gate.rb +345 -0
- data/templates/skillsets/kairos_hook_projector/test/test_readable_gate.rb +1313 -5
- data/templates/skillsets/minimum_nomic/README.md +7 -0
- data/templates/skillsets/minimum_nomic/bin/propose_metric.rb +17 -3
- data/templates/skillsets/minimum_nomic/skillset.json +1 -1
- metadata +4 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ca968a084e8868b9cbeaa3283850dd7e56095a503d661ce6e74158ec7555f0e3
|
|
4
|
+
data.tar.gz: 7a410b2edb98cd9bf02c8396f11d1d411e9b190456ea87402789d9a95aea5f16
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
data/lib/kairos_mcp/version.rb
CHANGED
|
@@ -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.
|
|
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
|
|
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.
|
|
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
|
|
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
|
-
|
|
86
|
-
|
|
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
|
-
|
|
15
|
-
|
|
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('
|
|
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('
|
|
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('
|
|
73
|
+
require File.expand_path('../autonomos/lib/autonomos/ooda',
|
|
74
74
|
File.dirname(__dir__))
|
|
75
75
|
|
|
76
76
|
Session = KairosMcp::SkillSets::Agent::Session
|