Kiro Local Walk Use Case
- Use case ID:
auto-walk.kiro-local - Protocol:
auto-walk@0.1.0 - Evidence:
field-tested - Conformance:
partially-verified— generation and semantic-trigger surfacing were observed; current status/discharge fields, natural calendar firing, andauto-walk:L4remain unverified - Validation scope: manual generation, launchd-environment runner execution, and semantic-trigger surfacing tests through parts of
auto-walk:L3are documented; natural calendar firing andauto-walk:L4remain deferred - Reproducibility:
partial— observed runs and procedures are documented; exact local scripts are not included here - Level namespace:
auto-walk - Last reviewed: 2026-07-17
1. Context
This use case describes a local ~/.kiro/walks Auto-Walk system layered on top of the existing ~/.kiro/memories setup on macOS.
The goal is to give the Kiro agent a low-stakes background process that runs over already-distilled memory and produces candidate associations for future conversations, without ever mutating the memory itself.
The design is a practical implementation of Agent-first Auto-Walk Architecture. It also depends on the memory layer described in Kiro Local Memory, which is the canonical corpus this binding consumes.
Protocol alignment note
The observed runs predate the current explicit hypothesis status field and the tightened discharge provenance rule. Those fields must be migrated and tested before this binding can claim complete conformance at any higher contiguous level. This is why the header says partially-verified rather than verified.
2. Design philosophy
This implementation borrows from three sources:
- Agent-first Auto-Walk Architecture — the five-rule walking principle (§5), the discharge-not-promote invariant (§6), and the two-step gating model for surfacing (§12).
- Existing Kiro Local Memory — the launchd + script + automation-repository layout, and the hybrid symlink strategy (local high-churn files, version-controlled stable files).
- Oppezzo and Schwartz (2014) — evidence for creative ideation and comparable indoor/outdoor gains. Multi-pass traces, cadence, and non-rewrite behavior are protocol engineering policies, not findings attributed to that study.
The core claim:
Give the Kiro agent a weekly "walk" through its distilled memory that produces structured hypotheses, surfaces them carefully in future conversations, and discharges confirmed insights back into memory through the ordinary capture protocol — never by silent promotion.
3. Directory structure
~/.kiro/
├── memories/ # existing, see kiro-local-memory.md
│ ├── archive/ # read by walk
│ ├── topics/ # read by walk
│ ├── conventions.md # context only
│ ├── index.md # read by walk
│ ├── memory.md # written by discharge protocol
│ └── log.md
└── walks/ # NEW
├── README.md
├── log.md # local, high-churn
├── active/ -> automation-config/kiro/walks/active/
├── discharged/ -> automation-config/kiro/walks/discharged/
├── rejected/ -> automation-config/kiro/walks/rejected/
├── archived/ -> automation-config/kiro/walks/archived/
└── noteworthy/ -> automation-config/kiro/walks/noteworthy/
~/automation-config/kiro/
├── scripts/
│ ├── auto-archive.sh # existing
│ ├── auto-dream.sh # existing
│ └── auto-walk.sh # NEW
├── walks/ # NEW (synced via dotfiles)
│ ├── active/
│ ├── discharged/
│ ├── rejected/
│ ├── archived/
│ └── noteworthy/
└── skills/
└── auto-walk/ # NEW
└── SKILL.md
~/Library/LaunchAgents/
├── com.example.kiro.auto-archive.plist # existing
├── com.example.kiro.auto-dream.plist # existing
└── com.example.kiro.auto-walk.plist # NEW
walks/ is a peer of memories/, not a child. This reinforces the §6.1 lateral-not-vertical invariant from the protocol: a hypothesis is a sibling of memory, not a sub-product of it.
There is no walks/memory.md inbox. Auto-Walk does not capture from sessions; it only produces from existing distilled memory.
4. Layering model
| Layer | File | Nature | Loading |
|---|---|---|---|
| Walk runner | scripts/auto-walk.sh |
Scheduled shell, calls kiro-wrap |
Invoked by launchd |
| Hypothesis pool (active) | walks/active/*.yaml |
Warm, candidate insights | Loaded on demand by skill (§8) |
| Hypothesis pool (cold) | walks/discharged/ walks/rejected/ walks/archived/ |
Cold | Audit only |
| Noteworthy bucket | walks/noteworthy/ |
Cold, human-only | Never read by skill or runner; human review only |
| Walk log | walks/log.md |
Cold | Audit only |
| Surfacing skill | skills/auto-walk/SKILL.md |
Warm | Triggered by natural language only (kiro-cli reserves / prefix for built-ins; see §11.3) |
| Surfacing rules | conventions.md (memory-side) |
Hot | Rules about when surfacing is allowed |
The hypothesis pool is never Hot. Even in A mode, a hypothesis only enters the agent's context after the §12 gating check (see §8 below) confirms it should surface for the current turn.
5. Version-control strategy
Mirrors the memory side, by intent:
Symlinked into the automation repository (cross-machine sharable, low churn):
walks/active/walks/discharged/walks/rejected/walks/archived/walks/noteworthy/scripts/auto-walk.shskills/auto-walk/
Local-only (high churn, not synced):
walks/log.mdwalks/README.md(boilerplate; optional to sync)
Rationale: hypothesis files and the auto-walk script are durable artifacts worth syncing. The log is a noisy operations trace that does not need to survive across machines.
6. Walk runner: auto-walk.sh
A weekly script that mirrors the auto-dream.sh pattern.
6.1 Scheduling
- launchd job: identifier de-identified as
com.example.kiro.auto-walk.plist(deployed 2026-05-29;Weekday 5,Hour 7,Minute 50) - Cadence: weekly, Friday 07:50 — after that day's
auto-archive(07:30) andauto-dream(07:40), so the walk reads freshly-distilled topics - Rationale for fixed Friday:
- Once-per-week fits a small corpus (4 topics + ~3 weeks of archive). Daily or every-3-days walks would regenerate similar bridges.
- A fixed weekday creates a predictable rhythm matching the protocol's §5.4 cadence-as-ritual principle. Variable cadence (e.g., every 3 days) drifts across weekdays and dilutes that ritual quality.
- Friday lets the user open the new hypotheses on the weekend when in a more exploratory mode.
- When
topics/grows beyond ~10 entries, graduate to daily-light + weekly-deep (§11.1 of the protocol).
6.2 Steps
The runner mirrors auto-dream.sh exactly: shell only assembles one prompt and makes one kiro-wrap chat call. Kiro itself reads the corpus, runs the three passes, and writes the output files — the same way auto-dream lets the model write index.md rather than having the shell parse anything. The observed auto-walk:L1 and auto-walk:L3 tests showed that Kiro read and wrote walks/ files reliably in those bounded runs, so there is no reason for the shell to touch YAML.
1. Skip if `topics/` has fewer than 3 files (logs a skip event).
2. Assemble one prompt (heredoc, paths expanded to absolute) that instructs Kiro to:
- Honor the five walking principles (§5).
- READ: all topics/*.md, last 7 days of archive/, existing active/*.yaml
(avoid duplicate claims), recent log.md seeds (avoid repeating a seed).
- PICK one propositional seed (§11.2) — Kiro does the near/middle/far
sampling itself; the shell does not pre-extract excerpts.
- Run INVENTORY → ROAM → CRITIQUE as labeled phases in one session.
- WRITE each surviving hypothesis to
`active/hyp-YYYY-MM-DD-NNN.yaml` (schema §9), and each
rejected-but-noteworthy candidate to
`noteworthy/hyp-YYYY-MM-DD-noteworthy-NNN.yaml` (schema §11.6).
**NNN must be `max(existing NNN for $TODAY) + 1`** scanned from
the target directory, never hard-coded from 001. Same-day
kickstart + calendar trigger + retry can all coexist; hard-coding
001 would silently overwrite prior outputs. Kiro got this right
on 2026-05-29 round-2 only by luck (a seed-note hint); rule is
now mandatory in the runner prompt.
- APPEND a walk-auto entry to log.md containing all three required sections per §7 / protocol §18 item 5: `inventory:` (1-2 lines of key facts per corpus item, proving INVENTORY ran), `candidates:` (per-candidate `SURVIVED → hyp-id` or `REJECTED: reason`), and any `noteworthy:` routing.
3. Call `kiro-wrap chat --no-interactive --trust-all-tools "$PROMPT"`
once, with HOME pinned to REAL_HOME (kiro-local-memory §8.4).
Decay / expiration / discharge are not in the auto-walk:L2 script — that is auto-walk:L4. The runner only generates. While the corpus is small, monotonic growth of active/ is harmless; a human review walks (§12) handles pruning until auto-walk:L4 automates it.
The three passes (INVENTORY / ROAM / CRITIQUE) are labeled phases inside the single prompt, executed by Kiro in one session — not three shell calls. The single-pass-shortcut failure (§11.4 / §15 of protocol) is skipping straight to conclusions without the INVENTORY warm-up and CRITIQUE gate; it has nothing to do with how many times the shell invokes the wrapper.
6.3 Skeleton
The deployed shape (canonical source in the private automation repository):
Parameterized skeleton. The deployed file uses literal absolute paths; replace
<USER_HOME>/<USER>with your own when adapting.
#!/bin/bash
# auto-walk.sh — Friday 07:50 weekly walk (runs after auto-dream)
set -euo pipefail
export PATH="<USER_HOME>/.local/bin:<USER_HOME>/.cargo/bin:/opt/homebrew/bin:/usr/local/bin:$PATH"
REAL_HOME="<USER_HOME>"
MEM_DIR="$REAL_HOME/.kiro/memories"
WALKS_DIR="$REAL_HOME/.kiro/walks"
KIRO_WRAP="$REAL_HOME/.cargo/bin/kiro-wrap"
LOG_FILE="$WALKS_DIR/log.md"
TODAY=$(date +%Y-%m-%d)
# Skip if corpus too small
topic_count=$(find "$MEM_DIR/topics/" -maxdepth 1 -name "*.md" 2>/dev/null | wc -l | tr -d ' ')
if [ "$topic_count" -lt 3 ]; then
echo "## [$TODAY] walk-auto | corpus too small ($topic_count topics), skip" >> "$LOG_FILE"
exit 0
fi
# Assemble ONE prompt (heredoc with $MEM_DIR / $WALKS_DIR / $TODAY expanded).
# The prompt instructs Kiro to: read topics + recent archive + existing
# active/ + recent log seeds; pick one propositional seed; run
# INVENTORY -> ROAM -> CRITIQUE; write survivors to active/, noteworthy
# candidates to noteworthy/, and append a walk-auto entry to log.md.
PROMPT_FILE=$(mktemp /tmp/kiro-walk-XXXXXX.txt)
cat > "$PROMPT_FILE" << PROMPT_EOF
...five principles, read list, seed rule, three passes, write paths,
log format, boundaries — all paths absolute via $WALKS_DIR / $MEM_DIR...
PROMPT_EOF
PROMPT=$(cat "$PROMPT_FILE"); rm -f "$PROMPT_FILE"
# One call. Kiro does the passes and writes the files itself.
HOME="$REAL_HOME" "$KIRO_WRAP" chat --no-interactive --trust-all-tools "$PROMPT"
The full prompt body is intentionally not duplicated here — the canonical source lives next to its siblings (auto-archive.sh, auto-dream.sh). Note << PROMPT_EOF is unquoted so the shell expands $MEM_DIR / $WALKS_DIR / $TODAY into absolute paths inside the prompt; this mirrors auto-dream.sh and avoids ~ expansion surprises in Kiro.
7. Walk procedure (what the prompt enforces)
The protocol's §11.4 phase separation MUST be honored. The single prompt to kiro-wrap (see §6.2) instructs Kiro to execute three labeled phases sequentially in one session, emitting each phase's output visibly so the trace can be audited after the fact. The walk-auto log entry must contain three sections: an inventory: summary (1–2 lines of key facts per corpus item — proof INVENTORY ran and was not skipped), a candidates: list with per-candidate verdicts (proof ROAM + CRITIQUE ran), and any noteworthy: routing decisions. A pure final-answer dump with no inventory trace fails §11.4 / §18 item 5.
The phase roles are summarized below. The exact prompt and runner remain in the private automation repository, consistent with this page's partial reproducibility label:
INVENTORY phase:
Restate the seed and what each retrieved item says. Do not bridge.
This is the warm-up; protocol §11.4 explicitly requires it.
ROAM phase:
Given the inventory, generate 5-10 candidate bridges.
Each bridge: a one-line claim + which items connect + one sentence of why.
Be liberal. Produce more than needed.
CRITIQUE phase:
Apply the §11.5 critic gate (missing refs, missing disconfirm,
vague applies_when, sensitive-attribute inference, single-source
generalization, restatement of existing memory, claim referencing
material absent from corpus, missing impact self-assessment,
unfalsifiable claim). Reject most; emit YAML for survivors per §9.
The critic gate is the protocol's §11.5. Its strictness — together with the visible per-candidate verdicts in log.md — is the safeguard against the single-pass-shortcut failure.
8. Surfacing wiring
Surfacing is the part of the system that connects the static hypothesis pool to live conversations. This implementation provides two modes from §12 of the protocol:
8.1 C mode (explicit) — definite implementation
A Kiro skill at skills/auto-walk/SKILL.md is invoked by natural language only — kiro-cli reserves / for built-in commands (/tui, /feedback, /copy), so /walk returns "Unknown command". The skill matches two classes of triggers (see SKILL.md 觸發場景 for the canonical list):
- Explicit: "散步看看", "最近散步发现什么", "auto-walk", "walk note".
- C-meta (user requests divergence without naming the system): "还有别的角度吗", "我是不是漏了什么", "换个思路", "有没有我没考虑到的".
On a match:
- The skill reads all of
walks/active/*.yaml. - It filters those whose
applies_whenorseedoverlaps the current conversation topic. No mode gating is applied — explicit pull signals exploratory intent. - It surfaces up to N (default 3) hypotheses as short side-notes, in confidence order.
- It records a
surfaceevent inwalks/log.mdfor each surfaced hypothesis withmode: C.
This is the safe, definite implementation; it does not depend on Kiro having any turn-level hook.
8.2 A mode (automatic) — provisional implementation
Whether A mode is implementable depends on whether Kiro provides a turn-level hook (a place to run code on every user message, before the main response).
If a turn-level hook exists:
- On each user turn, the hook runs a lightweight matcher.
- It applies the §12.2 two-step gating.
- If a hypothesis passes, the agent appends a short side-note after the main answer.
- The hook records a surface_event for outcome tracking.
If no turn-level hook exists:
- A mode degrades. The user must invoke C mode explicitly via natural language
("散步看看", or any C-meta phrase like "还有别的角度吗").
- The protocol still works; only fully automatic surfacing is unavailable.
- This is acceptable. The protocol's §12.1 names C (explicit + meta) as a peer to A.
The first auto-walk:L3 testing milestone is to determine which branch applies for the current Kiro runtime (see §11 below).
8.3 Surface side-note format
When a hypothesis surfaces (either mode), the side-note has a fixed shape:
---
**Walk note** _(hyp-2026-05-28-001, confidence: medium)_
<one-to-three-sentence claim>
_Why this might matter:_ <one sentence>
_Refs:_ topics/X.md, topics/Y.md
Constraints:
- Always after the main answer, separated by a horizontal rule.
- Maximum three sentences for the claim.
- Always includes the hypothesis id (for outcome tracking).
- Always names the refs (so the user can check provenance).
9. Discharge wiring
When an explicit authoritative statement, independent observable evidence, or governed review with cited evidence confirms a hypothesis:
- The walk skill identifies the relevant hypothesis id.
- It generates a new atomic memory item that states the fact independently.
Sourcenames the confirmation event or independent evidence. Originalsupporting_refsremaincorroborating_refsunless they independently establish the claim; the hypothesis appears only ininspired_by. - It appends the new item to
memories/memory.mdthrough the ordinary minimum schema, including date, stable memory id,kind, andSource(plussubjectforstate). - It moves the hypothesis file from
walks/active/towalks/discharged/, adding adischarged_atandspawned_memory_reffield pointing to the new memory item. - It appends a
dischargeevent towalks/log.md.
The next auto-archive run (07:30) moves the new memory.md entry into the day's archive. The next auto-dream run (07:40) integrates it into index.md and topics/.
The new memory item is born through the existing capture protocol. It is not a "promoted hypothesis." This is the protocol's §6.2 invariant made operational.
Rejection and expiration follow the symmetric paths in §13.2 and §13.3 of the protocol. No special wiring needed beyond moving files between walks/ subdirectories.
10. Key design decisions
10.1 Why weekly, not daily
The existing memory pipeline runs daily because raw memory accumulates daily. Hypothesis pools don't. With 4 topics, daily walks would produce 5-7 hypotheses per week of which most overlap.
When topics/ grows past ~10 entries (currently 4), graduate to daily-light + weekly-deep as described in the protocol's §11.1. Until then, weekly is enough.
10.2 Why no walks/memory.md inbox
Memory has an inbox because daytime sessions write raw notes that must be preserved before AI distills them. Walks produce structured YAML directly into walks/active/. There is nothing to capture-then-archive; the walk runner is itself the producer.
10.3 Why walks/ is a peer of memories/, not under it
Lateral, not vertical. A hypothesis is not a junior memory waiting to grow up (protocol §6.1). Placing walks/ inside memories/ would invite the wrong mental model and the wrong file-permissions intuition (which mutation goes where).
10.4 Why no Hot loading of the hypothesis pool
A Hot-loaded pool would force every conversation to start with the active pool in context. This re-introduces the "convergent surfacing" failure mode (protocol §15): even when the user is debugging, the agent has been pre-primed with side-notes. Gating must happen at the turn level, not at the load level.
10.5 Why kiro-wrap chat and not a direct LLM call
Consistent with auto-dream.sh. The wrapper handles HOME normalization, trust-all-tools, and non-interactive mode. The walk runner SHOULD use the same wrapper to inherit the same environmental fixes (kiro-local-memory §8.4).
11. Testable rollout
Three milestones. Each is independently testable.
11.1 auto-walk:L1 — Manual walk, structured pool (done 2026-05-28)
Goal: produce one walk by hand, validate the hypothesis YAML format, surface via natural language.
Steps:
- Create
~/.kiro/walks/and theactive/ discharged/ rejected/ archived/ noteworthy/subdirs (symlinked to the private automation repository). - Create
skills/auto-walk/SKILL.mddescribing the surfacing skill (C mode). Trigger by natural language, not/walk— see §11.3. - Manually invoke a walk by composing a prompt (mimicking what auto-walk.sh will eventually do) and running it through Kiro interactively.
- Place the output YAML(s) into
walks/active/. Route critic-rejected-but-noteworthy candidates towalks/noteworthy/. - Test from a fresh conversation by saying "散步看看". Confirm side-notes match the format in §8.3.
Historical pass criterion: at least one hypothesis with all fields required by the then-current schema, surfaced cleanly. Achieved: 5 hypotheses + 1 noteworthy (R7 self-lock), and the critic gate rejected a deliberately planted sensitive-attribute inference (R11). The later status field remains a declared migration gap.
11.2 auto-walk:L2 — Scheduled profile (runner kickstarted 2026-05-29; Friday calendar trigger pending)
Goal: weekly auto-walk runs unattended, produces hypotheses without manual prompting.
Steps:
- ✓ Wrote
scripts/auto-walk.shper §6.3 — single prompt tokiro-wrap chat, three labeled phases inside it, Kiro writes the files itself. - ✓ Added a de-identified launchd job running Friday 07:50 (
Weekday 5); its plist lives in the private automation repository and is symlinked into~/Library/LaunchAgents/. - ✓ Loaded with
launchctl bootstrap "gui/$(id -u)" <plist>— notlaunchctl load, and not undersudo(LaunchAgent owner must equal the loader). - ✓ kickstart run 2026-05-29 succeeded under round-1 prompt (exit 0, ~5m48s, 4 hypotheses + 1 noteworthy, ~44% critic pass rate matching the
auto-walk:L1manual rate). First run exposed and fixed a real bug: launchd does not load.zshrc, sokiro-wraplacked the required proxy environment and reached the wrong upstream endpoint. The fix (explicit proxy environment in the scheduled script) was applied toauto-walk.shand back-ported toauto-dream.sh. The runner also gained a 3× retry +walk-errorlog line so future failures are visible, not silent. - ✓ Second kickstart 2026-05-29 21:46 validated round-2 prompt (exit 0, ~4m25s). All round-2 invariants verified by the produced artifact:
inventory:section present, with 5 corpus items × 1-2 lines of key facts each — protocol §11.4 / §18 item 5 visible-trace rule satisfied at the artifact level (not only in the model's transient conversation stream).- All four
hyp-2026-05-29-005..007andnoteworthy-002carry sub-filesupporting_refs(e.g.topics/memory-system-design.md#架構決策,topics/steering-design-guide.md#反模式) — protocol §9 sub-file-granularity rule honored. - hyp-005's claim cites facts retrievable from the named refs — §11.5 corpus-coverage rule honored after two rounds of review-caught cleanup. Round-3 fix added a missing AutoDream-section ref to cover "index 控 200 行內" and corrected a heading-space typo on a sibling ref. A subsequent round-4 review caught a cascading issue: the topic heading itself had been updated in the same change (adding "2026-05-29 排程修正" to the section title), which broke text-anchor matching for the just-added ref; that ref was then converted to a line-range form (
#L40-L43) which is robust to heading edits. A sibling typo on hyp-007 (same missing space pattern as hyp-005's) was also fixed in the same pass. Lesson recorded: when refs use heading text as anchor, simultaneously editing the heading breaks the ref — prefer line ranges or copy the post-edit heading verbatim. - critic pass rate 3/8 ≈ 38%, in the same band as prior runs (45% / 44%) — gate neither over-loose nor self-locking.
- Runner's own
notes:flagged a meta-observation: noteworthy-routed candidates have recurred across three walks under the same single-source-cross-domain pattern (28 R7, 29-early R5, 29-late R6) — useful for future protocol review, not actioned this run.
- ○ Friday calendar trigger pending —
StartCalendarIntervalitself has not yet fired naturally. The same mechanism had operated auto-archive and auto-dream, but that does not validate this job's calendar firing.launchctl printshowedruns = 0 / last exit code = (never exited)after abootout / bootstrapreset; separate walk and runner logs record the two kickstart runs. The remaining claim is therefore narrow: runner execution was observed, natural scheduled firing was not.
Pass criterion under round-1 prompt: met by the 2026-05-29 first kickstart.
Pass criterion under round-2 prompt: met by the 2026-05-29 21:46 second kickstart — inventory: artifact present, sub-file refs used, claim stayed within corpus.
11.3 auto-walk:L3 — Surfacing mode (tested 2026-05-29)
Goal: determine which surfacing mode Kiro can actually support, and verify executive-turn silence.
Result for the tested Kiro runtime: semantic-trigger only; no per-turn hook was found. The staged test used one configured Kiro model:
| Stage | Input | Behavior | Verdict |
|---|---|---|---|
| 1 — C mode | "散步看看" | Globbed walks/active/, read 5 YAML, emitted 3 walk notes in the §8.3 format, wrote 3 surface | mode: C events to log, did not write to memory.md, did not ask "is this right?" |
Pass; production-ready |
| 2 — A probe | "聊聊 agent memory 系统设计" | Answered normally. No tool calls, did not touch walks/active/. Discussed the auto-walk concept but did not execute a walk surface |
A2 confirmed |
| 3 — negative | debug an auto-dream launchd failure |
Full debug, zero walk notes, did not touch walks/active/ — even though auto-dream is the corpus source of a live hypothesis |
Pass; zero false trigger |
| 4 — C-meta | "聊聊 agent memory 设计……有没有什么我没考虑到的角度?" | Globbed active/, read 5, surfaced 3 walk notes labeled "旁支" after a complete main answer; wrote 3 surface | mode: C events. The half-sentence divergence request flipped the outcome vs stage 2's plain "聊聊" |
Pass; C-meta verified |
Conclusions:
/walkdoes not work — kiro-cli reserves/for built-in commands. Natural-language triggers only.- Kiro's semantic triggering is precise: discussing the auto-walk concept (stage 2) does not trigger a surface. The two are cleanly separated.
- A2's zero-false-trigger property (stage 3) is exactly the §5.1 / §12 "default silent, prefer false negatives" safety. It is a feature, not a limitation.
Adopted strategy: C mode with C-meta extension (protocol §12.1). The SKILL.md trigger set was extended from explicit walk requests to also include divergence-request language ("还有别的角度吗", "我是不是漏了什么", "换个思路"). Stage 3 showed that the tested executive turn contained no such language; in that bounded test, C-meta preserved the zero-false-trigger behavior. Stage 4 verified the extension live: appending "有没有什么我没考虑到的角度?" to the same prompt that stayed silent in stage 2 now surfaces — and the agent placed the walk notes as a labeled "旁支" after a complete main answer, honoring §5.5 ADD-not-REWRITE without being told. True A mode (Hot rule forcing per-turn active/ checks) was explicitly rejected: it would sacrifice the stage-3 zero-false-trigger property for marginal automation.
11.4 auto-walk:L4 — Feedback loop (deferred)
Negative-feedback decay, automated muting, automated discharge detection. Out of scope for the initial test. Manual decisions are fine while the corpus is small.
12. Review entry point
A manual review workflow:
review walks
A review should inspect:
active/entries past theirexpires_after_walkscounter that were not archived.- Hypotheses surfaced more than 3 times with no engagement (candidates for muting or manual rejection).
- Discharge events with no corresponding memory item in
memories/memory.mdor topics (broken discharge wiring). - Critic-gate bypasses (hypotheses missing required fields).
- Walk log entries marked
errororskipfor two consecutive cycles.
Review produces a plan before any destructive change. Files are moved between subdirectories, not deleted.
13. Pitfalls
Rows marked [observed] were confirmed during the 2026-05-28 auto-walk:L1 and 2026-05-29 auto-walk:L3 tests. Unmarked rows are still predicted from the protocol; update them as later cycles run.
| Pitfall | Cause | Mitigation |
|---|---|---|
[observed] /walk returns "Unknown command" |
kiro-cli reserves / prefix for built-in commands; custom skills cannot use slash triggers |
Trigger by natural language only ("散步看看" / divergence-request phrases); SKILL.md must not advertise /walk |
| Hypotheses restate existing topics | Walk slipped into Dream mode | Strengthen critic-gate prompt: explicitly reject "restatement" |
| Hypotheses too generic | ROAM prompt too loose; topical (not propositional) seed | Tighten ROAM: require each bridge to span ≥2 distinct topics; use propositional seeds (protocol §11.2) |
| Side-notes during debugging | Surfacing misjudged the turn | [observed not to occur] under C-meta in the tested executive turn (auto-walk:L3 stage 3), which lacked divergence-request language. If true A mode is ever added, this risk returns |
| Hypothesis count grows monotonically | Expiration not running | Verify maintenance pass in §6.2 step 7 actually executes |
| Discharged but no new memory item | Discharge step skipped or failed | Inspect discharge log entry against memory.md diff |
kiro-wrap chat hangs |
HOME or PATH wrong | Mirror the §8.3/§8.4 fixes from kiro-local-memory.md |
| High-value cross-domain bridge discarded | Critic gate rejects single-source generalization (protocol §11.5) | [observed] Route to walks/noteworthy/ (protocol §11.6); R7 self-lock insight preserved this way |
| Surface selects only "interesting" hypotheses, skips others | Agent applies relevance filtering on top of applies_when |
[observed, benign] The tested agent surfaced 3/5 by relevance and stated the rest "stayed in the pool" — this matches §12.2 match-first intent |
14. Evidence boundary
What this use case supports
- Manual and kickstarted runner executions produced structured hypotheses and visible phase traces in a real Kiro environment.
- Semantic-trigger C and C-meta surfacing worked in the tested runtime while an executive task stayed silent.
- Launchd environment differences, id allocation, and source-anchor drift produced concrete operational lessons.
What it does not support
- Natural
StartCalendarIntervalfiring for the walk job; that remained pending. - True per-turn A-mode hooks in Kiro.
- Automated
auto-walk:L4feedback, discharge, muting, or expiration. - Current runtime behavior after model, wrapper, or Kiro changes.
15. Essence
The system can be summarized as:
Memory captures, archives, and distills daily.
Walks read the distilled memory weekly.
Walks produce hypotheses but never write to memory.
Confirmed hypotheses spawn new memory items through the ordinary capture path.
The user pulls a surface by asking — explicitly ("散步看看") or by requesting divergence ("还有别的角度吗"); the agent never pushes unasked.
Auto-Walk is not an improvement to memory. It is a sibling layer that lets the agent notice connections memory alone cannot.