Skip to content

feat: manifest-first entity recall for all platforms (#224)#226

Merged
visahak merged 5 commits into
AgentToolkit:mainfrom
visahak:feat/codex-recall-manifest-224
May 11, 2026
Merged

feat: manifest-first entity recall for all platforms (#224)#226
visahak merged 5 commits into
AgentToolkit:mainfrom
visahak:feat/codex-recall-manifest-224

Conversation

@visahak
Copy link
Copy Markdown
Collaborator

@visahak visahak commented Apr 28, 2026

Summary

  • Replace full-body entity injection with compact manifest output across all three platforms (Codex, Claude, Bob)
  • The UserPromptSubmit hook (Claude/Codex) and manual recall skill (Bob) now emit only path, type, and trigger per entity — full content is read on demand
  • Shared load_manifest and dedupe_manifest_entries helpers in entity_io.py power all three implementations
  • Claude/Codex output JSON lines; Bob outputs human-readable markdown (visible in Cline UI)

Changes

  • entity_io.py — Added _parse_frontmatter_only, load_manifest, dedupe_manifest_entries shared helpers
  • Codex retrieve_entities.py — Switched to manifest JSON output
  • Claude retrieve_entities.py — Switched to manifest JSON output
  • Bob retrieve_entities.py — Switched to human-readable manifest output
  • SKILL.md (all platforms) — Updated to document manifest-first two-step flow
  • Tests — New test_claude_retrieve_manifest.py, test_codex_retrieve_manifest.py; updated test_retrieve.py, test_bob_sharing.py, test_codex_sharing.py, test_sync.py, test_subscribe.py

Test plan

  • 294 platform_integrations tests passing
  • Manifest shape: entries contain only path, type, trigger
  • No full entity bodies in output
  • Deterministic ordering and deduplication
  • Symlinked entities filtered out
  • Subscribed and public entities included
  • Invalid stdin handled gracefully (Claude/Codex)

addressing issue #224

Summary by CodeRabbit

  • New Features
    • Support for a public entity directory alongside private entities
    • Manifest-first recall: entities are surfaced as structured manifest entries (path, type, trigger); platforms emit human-readable or JSON-lines manifests
  • Bug Fixes
    • Deterministic deduplication across recall sources
    • Skip symlinked entries and ignore .git paths when building manifests
    • Subscribe now warns on audit-log write failures, exits successfully, and preserves cloned subscription data
  • Tests
    • Added/updated tests validating manifest output, ordering, dedupe, and symlink handling
  • Documentation
    • Updated recall skill docs to describe manifest-first workflow and on-demand expansion

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 28, 2026

📝 Walkthrough

Walkthrough

Entity discovery/search now includes both .evolve/entities/ and .evolve/public/. New frontmatter-only manifest utilities were added (parse frontmatter, stable manifest path, load manifest, deterministic dedupe). Retrieve scripts were changed to emit manifest-only outputs ({path, type, trigger}) and to load manifests from recall roots; tests and SKILL docs were updated accordingly.

Changes

Manifest-First Entity Recall

Layer / File(s) Summary
Data Shape & Library Foundation
plugin-source/lib/entity_io.py, platform-integrations/*/lib/entity_io.py
find_recall_entity_dirs() now considers both entities/ and public/. Added frontmatter parsing helpers (_parse_frontmatter_lines, _parse_frontmatter_only), _manifest_path() for stable relative paths, dedupe_manifest_entries(entries), and load_manifest(root_dir) that scans **/*.md, skips symlinks and .git, filters entries requiring both type and trigger, and emits {path,type,trigger}.
Core Retrieval Flow
plugin-source/skills/.../retrieve_entities.py.j2, platform-integrations/*/skills/.../retrieve_entities.py
Removed load_entities_with_source() and replaced single-entities loading with iterating find_recall_entity_dirs() + load_manifest() then dedupe_manifest_entries(). Audit IDs are now derived from manifest path via _audit_id().
Output Formatting / Wiring
platform-integrations/*/skills/.../retrieve_entities.py, plugin-source/.../retrieve_entities.py.j2
format_entities() changed to manifest-first output: Bob emits human-readable bullet manifest; other platforms emit manifest JSON lines (json.dumps(entity) per line). Module docstrings and imports updated to use new entity_io APIs.
Skill Documentation
platform-integrations/*/skills/evolve-lite/recall/SKILL.md, plugin-source/skills/.../SKILL.md.j2
SKILL docs updated to describe manifest-first behavior, search both entities/ and public/, and an On-Demand Expansion section describing when to read full entity files.
Tests & Fixtures
tests/platform_integrations/*
Fixtures updated to include trigger frontmatter. New tests added verifying load_manifest and dedupe_manifest_entries; existing retrieve/share/sync tests updated to assert manifest-only outputs, deterministic ordering, exact deduplication, symlink skipping, and absence of full entity bodies. Helpers run_retrieve/parse_manifest_lines added/updated.

Sequence Diagram

sequenceDiagram
    participant Agent as Agent (Claude/Codex/Bob)
    participant Retrieve as retrieve_entities.py
    participant EntityIO as entity_io (load_manifest)
    participant FS as FileSystem (.evolve/<dirs>)
    participant Manifest as Manifest Output

    Agent->>Retrieve: request entity guidance
    Retrieve->>EntityIO: find_recall_entity_dirs()
    EntityIO-->>Retrieve: [entities/, public/] (existing ones)

    loop per recall root
        Retrieve->>EntityIO: load_manifest(root_dir)
        EntityIO->>FS: scan **/*.md (skip symlinks, .git)
        FS-->>EntityIO: markdown files
        EntityIO->>EntityIO: _parse_frontmatter_only()
        EntityIO->>EntityIO: _manifest_path() normalize path
        EntityIO-->>Retrieve: {path,type,trigger} entries
    end

    Retrieve->>EntityIO: dedupe_manifest_entries()
    EntityIO-->>Retrieve: deduped, sorted entries
    Retrieve->>Manifest: format_entities() -> header + JSON/markdown lines
    Manifest-->>Agent: manifest-only output

    Agent->>FS: read_file(path) when trigger matches
    FS-->>Agent: full entity markdown (on demand)
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related issues

Possibly related PRs

Suggested reviewers

  • vinodmut
  • illeatmyhat

Poem

🐰 A tidy manifest hops into view,
Only path, type, trigger—clear and true.
Two roots I sniff, public and mine,
Dedupe the carrots, order each line.
Agents fetch full crumbs only when due.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 49.06% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'feat: manifest-first entity recall for all platforms (#224)' accurately captures the main change: shifting from full-body entity injection to a manifest-first retrieval flow across multiple AI platforms.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Tip

💬 Introducing Slack Agent: The best way for teams to turn conversations into code.

Slack Agent is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.

  • Generate code and open pull requests
  • Plan features and break down work
  • Investigate incidents and troubleshoot customer tickets together
  • Automate recurring tasks and respond to alerts with triggers
  • Summarize progress and report instantly

Built for teams:

  • Shared memory across your entire org—no repeating context
  • Per-thread sandboxes to safely plan and execute work
  • Governance built-in—scoped access, auditability, and budget controls

One agent for your entire SDLC. Right inside Slack.

👉 Get started


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

coderabbitai[bot]

This comment was marked as resolved.

@visahak
Copy link
Copy Markdown
Collaborator Author

visahak commented Apr 28, 2026

Haven't tested this in the agent harnresses yet claude, codex, and IBM Bob.

@visahak visahak force-pushed the feat/codex-recall-manifest-224 branch 2 times, most recently from 87d1b15 to da2adbc Compare May 5, 2026 20:23
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (7)
plugin-source/skills/evolve-lite/recall/SKILL.md.j2 (1)

70-72: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Failure conditions / completion note still reference only entities/.

The Required Action and Minimum Acceptable Procedure now include ${EVOLVE_DIR:-.evolve}/public/, but the failure condition on line 72 and the "Required Visible Completion Note" examples on lines 48-52 still say only ${EVOLVE_DIR:-.evolve}/entities/. Worth syncing these so an agent that searches only entities/ (and skips public/) is correctly flagged as not-complete, and so the completion note records both roots.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugin-source/skills/evolve-lite/recall/SKILL.md.j2` around lines 70 - 72,
Update the failure condition and the "Required Visible Completion Note" examples
in SKILL.md.j2 so they reference both `${EVOLVE_DIR:-.evolve}/entities/` and
`${EVOLVE_DIR:-.evolve}/public/` instead of only `entities/`; specifically edit
the failure condition around the existing text that mentions
`${EVOLVE_DIR:-.evolve}/entities/` and the sample completion notes (lines that
list required visible files) to include `${EVOLVE_DIR:-.evolve}/public/` as an
additional root so an agent that only checks `entities/` will be marked
incomplete and the completion note records both roots.
tests/platform_integrations/test_retrieve.py (1)

146-159: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

real_file.write_text() bypasses the file_assertions fixture, violating the test guidelines.

Line 151 writes a file directly rather than through file_assertions.write_text(). The symlink creation on line 152 is fine since file_assertions likely has no symlink API, but the regular file write should go through the fixture.

📝 Proposed fix
 def test_skips_symlinked_markdown_entities(self, temp_project_dir, retrieve_script, expected_header, platform_name):
     d = temp_project_dir / ".evolve"
     gdir = d / "entities" / "subscribed" / "alice" / "guideline"
-    gdir.mkdir(parents=True)
-    real_file = gdir / "real.md"
-    real_file.write_text("---\ntype: guideline\ntrigger: when testing\n---\n\nReal content.\n")
+    real_file = gdir / "real.md"
+    file_assertions.write_text(real_file, "---\ntype: guideline\ntrigger: when testing\n---\n\nReal content.\n")
     (gdir / "link.md").symlink_to(real_file)

Add file_assertions to the test's parameter list if it isn't already there. As per coding guidelines, all file operations in platform integration tests must use file_assertions — do not manually create files.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/platform_integrations/test_retrieve.py` around lines 146 - 159, The
test function test_skips_symlinked_markdown_entities is directly calling
real_file.write_text(), bypassing the file_assertions fixture; add
file_assertions to the test signature and replace the direct write with
file_assertions.write_text(...) to create the markdown file (keep the subsequent
symlink creation via (gdir / "link.md").symlink_to(real_file) as-is), ensuring
all file writes in platform integration tests go through the file_assertions
API.
platform-integrations/claw-code/plugins/evolve-lite/skills/evolve-lite/recall/SKILL.md (1)

39-40: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Same stale public/ omission as the Claude and Codex SKILL.md files.

Lines 39–40 (Completion Note templates) and line 54 (Failure Condition) still only reference entities/. Apply the same fix.

Also applies to: 54-54

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@platform-integrations/claw-code/plugins/evolve-lite/skills/evolve-lite/recall/SKILL.md`
around lines 39 - 40, Update the Completion Note templates and the Failure
Condition in SKILL.md to include the missing public/ path the same way as the
Claude and Codex SKILL.md fixes: change the two completion templates that
currently mention only "entities/" (`Recall complete: searched
${EVOLVE_DIR:-.evolve}/entities/, read <files>, applicable guidance: <summary>`
and `Recall complete: searched ${EVOLVE_DIR:-.evolve}/entities/, no relevant
entities found`) to reference both "entities/" and "public/" (e.g.
`${EVOLVE_DIR:-.evolve}/entities/ and ${EVOLVE_DIR:-.evolve}/public/`), and make
the same update to the Failure Condition line that currently references only
`entities/` so it also includes `public/`.
platform-integrations/bob/evolve-lite/skills/evolve-lite-recall/SKILL.md (1)

39-40: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Same stale public/ omission as the other SKILL.md files.

Lines 39–40 (Completion Note templates) and line 54 (Failure Condition) still only reference entities/. Apply the same fix from the Claude SKILL.md comment.

Also applies to: 54-54

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@platform-integrations/bob/evolve-lite/skills/evolve-lite-recall/SKILL.md`
around lines 39 - 40, The Completion Note templates and Failure Condition in
SKILL.md (the lines that render the completion messages like "Recall complete:
searched ${EVOLVE_DIR:-.evolve}/entities/..." and the failure text) still omit
the public/ prefix; update those templates to reference
${EVOLVE_DIR:-.evolve}/public/entities/ (or include both paths if intended) so
they match the other SKILL.md files (apply the same change you made in the
Claude SKILL.md to the Completion Note templates and the Failure Condition).
platform-integrations/claude/plugins/evolve-lite/skills/evolve-lite/recall/SKILL.md (1)

40-41: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Failure Conditions and Completion Note templates don't mention public/.

Lines 40–41 and line 55 still only reference ${EVOLVE_DIR:-.evolve}/entities/, but the updated Completion Rule (line 31) and Minimum Acceptable Procedure (line 45) now require inspecting both entities/ and public/. An agent that skips public/ will not trigger the Failure Condition and would produce a completion note that doesn't acknowledge searching public/.

📝 Proposed fix
-`Recall complete: searched ${EVOLVE_DIR:-.evolve}/entities/, quoted <files> verbatim below`
-`Recall complete: searched ${EVOLVE_DIR:-.evolve}/entities/, no relevant entities found`
+`Recall complete: searched ${EVOLVE_DIR:-.evolve}/entities/ and ${EVOLVE_DIR:-.evolve}/public/, quoted <files> verbatim below`
+`Recall complete: searched ${EVOLVE_DIR:-.evolve}/entities/ and ${EVOLVE_DIR:-.evolve}/public/, no relevant entities found`
-- You did not inspect `${EVOLVE_DIR:-.evolve}/entities/`
+- You did not inspect `${EVOLVE_DIR:-.evolve}/entities/` or `${EVOLVE_DIR:-.evolve}/public/`

The same fix applies to the Codex, Claw-code, and Bob SKILL.md files.

Also applies to: 55-55

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@platform-integrations/claude/plugins/evolve-lite/skills/evolve-lite/recall/SKILL.md`
around lines 40 - 41, Update the Failure Conditions and Completion Note
templates so they reference both the entities and public directories; replace
occurrences of `${EVOLVE_DIR:-.evolve}/entities/` in the Failure Condition
strings and Completion Note templates (the lines containing `Recall complete:
searched ${EVOLVE_DIR:-.evolve}/entities/, quoted <files> verbatim below` and
`Recall complete: searched ${EVOLVE_DIR:-.evolve}/entities/, no relevant
entities found`) with wording that includes `${EVOLVE_DIR:-.evolve}/public/`
(e.g., `searched ${EVOLVE_DIR:-.evolve}/entities/ and
${EVOLVE_DIR:-.evolve}/public/`), and apply the same change to the equivalent
SKILL.md files for Codex, Claw-code, and Bob so the Completion Rule and Minimum
Acceptable Procedure align with the Failure Condition.
platform-integrations/codex/plugins/evolve-lite/skills/evolve-lite/recall/SKILL.md (1)

39-40: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Same stale public/ omission as the Claude SKILL.md.

Lines 39–40 (Completion Note templates) and line 54 (Failure Condition) still only reference entities/. Apply the same fix described for the Claude SKILL.md.

Also applies to: 54-54

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@platform-integrations/codex/plugins/evolve-lite/skills/evolve-lite/recall/SKILL.md`
around lines 39 - 40, Update the Completion Note and Failure Condition templates
to include the public entities path in addition to the existing entities path:
replace references to `${EVOLVE_DIR:-.evolve}/entities/` in the two completion
templates (`Recall complete: searched ${EVOLVE_DIR:-.evolve}/entities/, read
<files>, applicable guidance: <summary>` and `Recall complete: searched
${EVOLVE_DIR:-.evolve}/entities/, no relevant entities found`) and the
failure-condition template so they mention both
`${EVOLVE_DIR:-.evolve}/entities/` and `${EVOLVE_DIR:-.evolve}/public/entities/`
(or otherwise include `public/entities/`) to mirror the fix applied in the
Claude SKILL.md.
platform-integrations/claw-code/plugins/evolve-lite/skills/evolve-lite/recall/scripts/retrieve_entities.py (1)

1-96: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Add claw-code to test coverage for the updated retrieve script.

The PR adds test_claude_retrieve_manifest.py and test_codex_retrieve_manifest.py, but test_retrieve.py's SCRIPT_VARIANTS covers only claude and codex. The claw-code retrieve_entities.py script was updated to manifest-first behavior but appears in no test file—it's currently out of scope for smoke tests. Consider adding claw-code to SCRIPT_VARIANTS or documenting why it's intentionally excluded.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@platform-integrations/claw-code/plugins/evolve-lite/skills/evolve-lite/recall/scripts/retrieve_entities.py`
around lines 1 - 96, The test matrix misses the "claw-code" variant so the
updated retrieve_entities.py isn't exercised; update the test_retrieve.py
constant SCRIPT_VARIANTS to include a "claw-code" entry that maps the variant
name used by the new script (retrieve_entities.py) into the existing test
harness (the same way "claude" and "codex" are defined), then ensure the test
runner picks up that variant so test_claude_retrieve_manifest.py and
test_codex_retrieve_manifest.py behavior is mirrored for "claw-code".
🧹 Nitpick comments (3)
plugin-source/skills/evolve-lite/recall/SKILL.md.j2 (1)

153-158: 💤 Low value

“On-Demand Expansion” section is bob-only — confirm intentional.

Manifest-first recall is the new default for claude / claw-code / codex too, but the explicit "use read_file to expand the entity" guidance is gated to platform == "bob". The non-bob How It Works step 4 mentions on-demand reading briefly, so this may be by design — but consider whether non-bob agents would benefit from the same explicit instruction (especially for the rationale-section reminder).

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugin-source/skills/evolve-lite/recall/SKILL.md.j2` around lines 153 - 158,
The "On-Demand Expansion" block is currently gated by the template condition
platform == "bob" but the guidance to "use `read_file` to load the full entity"
(and the `## Rationale` reminder) may be relevant to other agents referenced in
the docs; confirm intent and either (a) remove the platform conditional around
the "On-Demand Expansion" section so the `read_file` guidance and rationale
reminder appear for all platforms, or (b) explicitly duplicate or adapt the text
for non-bob platforms (e.g., under the existing "How It Works" step 4) so agents
like claude/claw-code/codex receive the same expansion instructions; update the
template surrounding the "On-Demand Expansion" header and the `read_file`
mention accordingly.
plugin-source/lib/entity_io.py (1)

267-278: 💤 Low value

_manifest_path fallback to absolute path may surface in edge configs.

get_evolve_dir().resolve().parent is the project root only when EVOLVE_DIR is unset (or points inside the project). If a user sets EVOLVE_DIR to e.g. /tmp/evolve-cache, the parent is /tmp, so most repo files happen to fall outside it and the relative_to raises ValueError → fallback emits an absolute path in the manifest. Probably fine for now since the manifest is consumed line-by-line by the agent, but worth keeping in mind if any downstream consumer relies on relative paths.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugin-source/lib/entity_io.py` around lines 267 - 278, _manifest_path
currently uses get_evolve_dir().resolve().parent as the project root which can
be outside the real repo when EVOLVE_DIR is set; change the project-root
determination in _manifest_path to fall back to a more appropriate repo root
(e.g. detect the VCS/root by walking parents for a .git or similar marker or use
Path.cwd().resolve()) when the evolve dir parent is not an ancestor of the
provided path, then call path.resolve().relative_to(found_project_root); keep
the existing ValueError catch to return str(path) only as a last resort and
reference _manifest_path and get_evolve_dir to locate the change.
plugin-source/skills/evolve-lite/recall/scripts/retrieve_entities.py.j2 (1)

41-46: 💤 Low value

Bob markdown format is fine, but consider trigger sanitation.

The bullet line interpolates e['trigger'] raw into a markdown bullet. If a trigger ever contains a newline or stray markdown (e.g. unbalanced backticks), the manifest renders poorly in Cline. Triggers are meant to be short single-line strings, so this is unlikely in practice — but flattening newlines defensively (e.g. e['trigger'].replace('\n', ' ')) would harden the UI rendering without behavior changes for well-formed entities.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugin-source/skills/evolve-lite/recall/scripts/retrieve_entities.py.j2`
around lines 41 - 46, The Bob markdown branch currently injects e['trigger'] raw
into the bullet lines which can break rendering; in the platform == "bob" branch
where lines = [f"- `{e['path']}` [{e['type']}] — {e['trigger']}" for e in
entities], sanitize the trigger first by flattening newlines
(e['trigger'].replace('\n', ' ')) and escaping backticks (e.g., replace '`' with
'\`') or otherwise escaping markdown before interpolating into lines, then use
that sanitized_trigger when building the list so header + "\n".join(lines)
remains unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@platform-integrations/bob/evolve-lite/skills/evolve-lite-recall/SKILL.md`:
- Around line 85-88: The fenced code block containing the two list lines
starting with "-
`.evolve/entities/guideline/use-context-managers-for-file-operations.md`" should
include a language specifier to satisfy MD040; update the opening fence from ```
to ```text so the block becomes a text-fenced code block in SKILL.md, preserving
the existing content and closing fence.

---

Outside diff comments:
In `@platform-integrations/bob/evolve-lite/skills/evolve-lite-recall/SKILL.md`:
- Around line 39-40: The Completion Note templates and Failure Condition in
SKILL.md (the lines that render the completion messages like "Recall complete:
searched ${EVOLVE_DIR:-.evolve}/entities/..." and the failure text) still omit
the public/ prefix; update those templates to reference
${EVOLVE_DIR:-.evolve}/public/entities/ (or include both paths if intended) so
they match the other SKILL.md files (apply the same change you made in the
Claude SKILL.md to the Completion Note templates and the Failure Condition).

In
`@platform-integrations/claude/plugins/evolve-lite/skills/evolve-lite/recall/SKILL.md`:
- Around line 40-41: Update the Failure Conditions and Completion Note templates
so they reference both the entities and public directories; replace occurrences
of `${EVOLVE_DIR:-.evolve}/entities/` in the Failure Condition strings and
Completion Note templates (the lines containing `Recall complete: searched
${EVOLVE_DIR:-.evolve}/entities/, quoted <files> verbatim below` and `Recall
complete: searched ${EVOLVE_DIR:-.evolve}/entities/, no relevant entities
found`) with wording that includes `${EVOLVE_DIR:-.evolve}/public/` (e.g.,
`searched ${EVOLVE_DIR:-.evolve}/entities/ and ${EVOLVE_DIR:-.evolve}/public/`),
and apply the same change to the equivalent SKILL.md files for Codex, Claw-code,
and Bob so the Completion Rule and Minimum Acceptable Procedure align with the
Failure Condition.

In
`@platform-integrations/claw-code/plugins/evolve-lite/skills/evolve-lite/recall/scripts/retrieve_entities.py`:
- Around line 1-96: The test matrix misses the "claw-code" variant so the
updated retrieve_entities.py isn't exercised; update the test_retrieve.py
constant SCRIPT_VARIANTS to include a "claw-code" entry that maps the variant
name used by the new script (retrieve_entities.py) into the existing test
harness (the same way "claude" and "codex" are defined), then ensure the test
runner picks up that variant so test_claude_retrieve_manifest.py and
test_codex_retrieve_manifest.py behavior is mirrored for "claw-code".

In
`@platform-integrations/claw-code/plugins/evolve-lite/skills/evolve-lite/recall/SKILL.md`:
- Around line 39-40: Update the Completion Note templates and the Failure
Condition in SKILL.md to include the missing public/ path the same way as the
Claude and Codex SKILL.md fixes: change the two completion templates that
currently mention only "entities/" (`Recall complete: searched
${EVOLVE_DIR:-.evolve}/entities/, read <files>, applicable guidance: <summary>`
and `Recall complete: searched ${EVOLVE_DIR:-.evolve}/entities/, no relevant
entities found`) to reference both "entities/" and "public/" (e.g.
`${EVOLVE_DIR:-.evolve}/entities/ and ${EVOLVE_DIR:-.evolve}/public/`), and make
the same update to the Failure Condition line that currently references only
`entities/` so it also includes `public/`.

In
`@platform-integrations/codex/plugins/evolve-lite/skills/evolve-lite/recall/SKILL.md`:
- Around line 39-40: Update the Completion Note and Failure Condition templates
to include the public entities path in addition to the existing entities path:
replace references to `${EVOLVE_DIR:-.evolve}/entities/` in the two completion
templates (`Recall complete: searched ${EVOLVE_DIR:-.evolve}/entities/, read
<files>, applicable guidance: <summary>` and `Recall complete: searched
${EVOLVE_DIR:-.evolve}/entities/, no relevant entities found`) and the
failure-condition template so they mention both
`${EVOLVE_DIR:-.evolve}/entities/` and `${EVOLVE_DIR:-.evolve}/public/entities/`
(or otherwise include `public/entities/`) to mirror the fix applied in the
Claude SKILL.md.

In `@plugin-source/skills/evolve-lite/recall/SKILL.md.j2`:
- Around line 70-72: Update the failure condition and the "Required Visible
Completion Note" examples in SKILL.md.j2 so they reference both
`${EVOLVE_DIR:-.evolve}/entities/` and `${EVOLVE_DIR:-.evolve}/public/` instead
of only `entities/`; specifically edit the failure condition around the existing
text that mentions `${EVOLVE_DIR:-.evolve}/entities/` and the sample completion
notes (lines that list required visible files) to include
`${EVOLVE_DIR:-.evolve}/public/` as an additional root so an agent that only
checks `entities/` will be marked incomplete and the completion note records
both roots.

In `@tests/platform_integrations/test_retrieve.py`:
- Around line 146-159: The test function test_skips_symlinked_markdown_entities
is directly calling real_file.write_text(), bypassing the file_assertions
fixture; add file_assertions to the test signature and replace the direct write
with file_assertions.write_text(...) to create the markdown file (keep the
subsequent symlink creation via (gdir / "link.md").symlink_to(real_file) as-is),
ensuring all file writes in platform integration tests go through the
file_assertions API.

---

Nitpick comments:
In `@plugin-source/lib/entity_io.py`:
- Around line 267-278: _manifest_path currently uses
get_evolve_dir().resolve().parent as the project root which can be outside the
real repo when EVOLVE_DIR is set; change the project-root determination in
_manifest_path to fall back to a more appropriate repo root (e.g. detect the
VCS/root by walking parents for a .git or similar marker or use
Path.cwd().resolve()) when the evolve dir parent is not an ancestor of the
provided path, then call path.resolve().relative_to(found_project_root); keep
the existing ValueError catch to return str(path) only as a last resort and
reference _manifest_path and get_evolve_dir to locate the change.

In `@plugin-source/skills/evolve-lite/recall/scripts/retrieve_entities.py.j2`:
- Around line 41-46: The Bob markdown branch currently injects e['trigger'] raw
into the bullet lines which can break rendering; in the platform == "bob" branch
where lines = [f"- `{e['path']}` [{e['type']}] — {e['trigger']}" for e in
entities], sanitize the trigger first by flattening newlines
(e['trigger'].replace('\n', ' ')) and escaping backticks (e.g., replace '`' with
'\`') or otherwise escaping markdown before interpolating into lines, then use
that sanitized_trigger when building the list so header + "\n".join(lines)
remains unchanged.

In `@plugin-source/skills/evolve-lite/recall/SKILL.md.j2`:
- Around line 153-158: The "On-Demand Expansion" block is currently gated by the
template condition platform == "bob" but the guidance to "use `read_file` to
load the full entity" (and the `## Rationale` reminder) may be relevant to other
agents referenced in the docs; confirm intent and either (a) remove the platform
conditional around the "On-Demand Expansion" section so the `read_file` guidance
and rationale reminder appear for all platforms, or (b) explicitly duplicate or
adapt the text for non-bob platforms (e.g., under the existing "How It Works"
step 4) so agents like claude/claw-code/codex receive the same expansion
instructions; update the template surrounding the "On-Demand Expansion" header
and the `read_file` mention accordingly.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: dcf4fdfd-c7f1-457e-b77c-c455454140e4

📥 Commits

Reviewing files that changed from the base of the PR and between 369f2da and da2adbc.

📒 Files selected for processing (24)
  • platform-integrations/bob/evolve-lite/lib/entity_io.py
  • platform-integrations/bob/evolve-lite/skills/evolve-lite-recall/SKILL.md
  • platform-integrations/bob/evolve-lite/skills/evolve-lite-recall/scripts/retrieve_entities.py
  • platform-integrations/claude/plugins/evolve-lite/lib/entity_io.py
  • platform-integrations/claude/plugins/evolve-lite/skills/evolve-lite/recall/SKILL.md
  • platform-integrations/claude/plugins/evolve-lite/skills/evolve-lite/recall/scripts/retrieve_entities.py
  • platform-integrations/claw-code/plugins/evolve-lite/lib/entity_io.py
  • platform-integrations/claw-code/plugins/evolve-lite/skills/evolve-lite/recall/SKILL.md
  • platform-integrations/claw-code/plugins/evolve-lite/skills/evolve-lite/recall/scripts/retrieve_entities.py
  • platform-integrations/codex/plugins/evolve-lite/lib/entity_io.py
  • platform-integrations/codex/plugins/evolve-lite/skills/evolve-lite/recall/SKILL.md
  • platform-integrations/codex/plugins/evolve-lite/skills/evolve-lite/recall/scripts/retrieve_entities.py
  • plugin-source/lib/entity_io.py
  • plugin-source/skills/evolve-lite/recall/SKILL.md.j2
  • plugin-source/skills/evolve-lite/recall/scripts/retrieve_entities.py.j2
  • tests/platform_integrations/conftest.py
  • tests/platform_integrations/test_bob_sharing.py
  • tests/platform_integrations/test_claude_retrieve_manifest.py
  • tests/platform_integrations/test_codex_retrieve_manifest.py
  • tests/platform_integrations/test_codex_sharing.py
  • tests/platform_integrations/test_entity_io_core.py
  • tests/platform_integrations/test_retrieve.py
  • tests/platform_integrations/test_subscribe.py
  • tests/platform_integrations/test_sync.py
✅ Files skipped from review due to trivial changes (3)
  • tests/platform_integrations/conftest.py
  • tests/platform_integrations/test_entity_io_core.py
  • tests/platform_integrations/test_bob_sharing.py
🚧 Files skipped from review as they are similar to previous changes (6)
  • tests/platform_integrations/test_sync.py
  • platform-integrations/claude/plugins/evolve-lite/lib/entity_io.py
  • tests/platform_integrations/test_subscribe.py
  • tests/platform_integrations/test_codex_retrieve_manifest.py
  • tests/platform_integrations/test_codex_sharing.py
  • tests/platform_integrations/test_claude_retrieve_manifest.py

Comment thread platform-integrations/bob/evolve-lite/skills/evolve-lite-recall/SKILL.md Outdated
@visahak visahak requested a review from illeatmyhat May 6, 2026 01:32
coderabbitai[bot]

This comment was marked as resolved.

visahak and others added 3 commits May 7, 2026 11:01
Rewrite the recall hook output from full entity bodies to a minimal
manifest of {path, type, trigger}, so the agent reads entity files on
demand rather than loading every stored entity into every turn.

- plugin-source/lib/entity_io.py: add load_manifest,
  dedupe_manifest_entries, frontmatter-only parser; include public/ in
  find_recall_entity_dirs so published entities participate in recall;
  _manifest_path now resolves relative to the evolve root's parent so
  paths stay stable regardless of caller cwd.
- plugin-source/skills/evolve-lite/recall/scripts/retrieve_entities.py
  renamed to .py.j2 with platform-aware format_entities (bob emits
  human-readable markdown; claude/claw-code/codex emit JSON Lines).
- plugin-source/skills/evolve-lite/recall/SKILL.md.j2: describe
  manifest emission per platform; cover public/ in the manual
  fallback; note the injected manifest supersedes directory scanning
  when present.
- tests/platform_integrations: add test_entity_io_core.py,
  test_claude_retrieve_manifest.py, test_codex_retrieve_manifest.py;
  update test_retrieve.py, test_bob_sharing.py and the sharing/sync
  suites for manifest-first assertions.
- platform-integrations/*: regenerated from plugin-source via
  build_plugins.py render.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@visahak visahak force-pushed the feat/codex-recall-manifest-224 branch from 3be24a6 to a3b61cf Compare May 7, 2026 15:04
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@visahak
Copy link
Copy Markdown
Collaborator Author

visahak commented May 7, 2026

Change tested in claude code.

@visahak
Copy link
Copy Markdown
Collaborator Author

visahak commented May 7, 2026

Change tested in codex.

@visahak
Copy link
Copy Markdown
Collaborator Author

visahak commented May 7, 2026

Tested in IBM bob as well.

@visahak visahak requested a review from vinodmut May 7, 2026 17:28
@visahak
Copy link
Copy Markdown
Collaborator Author

visahak commented May 7, 2026

@vinodmut @illeatmyhat this PR is ready for review and merge

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (5)
platform-integrations/bob/evolve-lite/skills/evolve-lite-recall/SKILL.md (1)

30-44: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Completion criteria text is now inconsistent with manifest/public search requirements.

The updated workflow (Line 30, Line 44) correctly requires injected manifest or both entities/ + public/, but the completion templates and failure condition still validate only entities/. That allows a “Recall complete” message even when required sources were skipped.

Suggested doc patch
- - `Recall complete: searched ${EVOLVE_DIR:-.evolve}/entities/, read <files>, applicable guidance: <summary>`
- - `Recall complete: searched ${EVOLVE_DIR:-.evolve}/entities/, no relevant entities found`
+ - `Recall complete: checked injected manifest or searched ${EVOLVE_DIR:-.evolve}/entities/ and ${EVOLVE_DIR:-.evolve}/public/, read <files>, applicable guidance: <summary>`
+ - `Recall complete: checked injected manifest or searched ${EVOLVE_DIR:-.evolve}/entities/ and ${EVOLVE_DIR:-.evolve}/public/, no relevant entities found`

- - You did not inspect `${EVOLVE_DIR:-.evolve}/entities/`
+ - You did not inspect injected manifest (if present) or both `${EVOLVE_DIR:-.evolve}/entities/` and `${EVOLVE_DIR:-.evolve}/public/`
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@platform-integrations/bob/evolve-lite/skills/evolve-lite-recall/SKILL.md`
around lines 30 - 44, The completion templates and failure check in SKILL.md are
inconsistent: the procedure requires using an injected manifest or searching
both `${EVOLVE_DIR:-.evolve}/entities/` and `${EVOLVE_DIR:-.evolve}/public/`,
but the visible completion note and "no relevant entities" template only mention
`entities/`; update these templates and any validation logic to require and
reflect both sources (or the injected manifest) — specifically change the
required completion note examples (`Recall complete: searched
${EVOLVE_DIR:-.evolve}/entities/, read <files>, applicable guidance: <summary>`
and the "no relevant entities" variant) to reference both
`${EVOLVE_DIR:-.evolve}/entities/` and `${EVOLVE_DIR:-.evolve}/public/` (or the
injected manifest alternative), and adjust any failure-condition text that
currently validates only `entities/` so it enforces the joint check.
platform-integrations/codex/plugins/evolve-lite/skills/evolve-lite/recall/SKILL.md (2)

54-54: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Update failure condition to include both directories.

The failure condition only mentions ${EVOLVE_DIR:-.evolve}/entities/ but the workflow now requires inspecting both /entities/ and /public/ directories (as stated throughout the document). This could mislead users into thinking they only need to check one directory.

📝 Proposed fix to include both directories
-- You did not inspect `${EVOLVE_DIR:-.evolve}/entities/`
+- You did not inspect `${EVOLVE_DIR:-.evolve}/entities/` and `${EVOLVE_DIR:-.evolve}/public/`
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@platform-integrations/codex/plugins/evolve-lite/skills/evolve-lite/recall/SKILL.md`
at line 54, Update the failure message that currently reads "You did not inspect
`${EVOLVE_DIR:-.evolve}/entities/`" so it explicitly references both directories
required by the workflow: `${EVOLVE_DIR:-.evolve}/entities/` and
`${EVOLVE_DIR:-.evolve}/public/`; locate the string in SKILL.md and change the
wording to mention both directories (and scan the surrounding text in SKILL.md
for any other occurrences to ensure consistency with the rest of the document).

39-40: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Update completion note examples to include both directories.

The completion note examples only mention ${EVOLVE_DIR:-.evolve}/entities/ but the workflow now scans both /entities/ and /public/ directories (as stated in lines 30 and 44). Users following these examples would omit the /public/ directory from their completion notes.

📝 Proposed fix to include both directories
-- `Recall complete: searched ${EVOLVE_DIR:-.evolve}/entities/, read <files>, applicable guidance: <summary>`
-- `Recall complete: searched ${EVOLVE_DIR:-.evolve}/entities/, no relevant entities found`
+- `Recall complete: searched ${EVOLVE_DIR:-.evolve}/entities/ and ${EVOLVE_DIR:-.evolve}/public/, read <files>, applicable guidance: <summary>`
+- `Recall complete: searched ${EVOLVE_DIR:-.evolve}/entities/ and ${EVOLVE_DIR:-.evolve}/public/, no relevant entities found`
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@platform-integrations/codex/plugins/evolve-lite/skills/evolve-lite/recall/SKILL.md`
around lines 39 - 40, Update the completion note examples in SKILL.md to
reference both scanned directories instead of only entities: change the
templates that currently mention `${EVOLVE_DIR:-.evolve}/entities/` to include
`${EVOLVE_DIR:-.evolve}/entities/` and `${EVOLVE_DIR:-.evolve}/public/` (e.g.,
`Recall complete: searched ${EVOLVE_DIR:-.evolve}/entities/ and
${EVOLVE_DIR:-.evolve}/public/, read <files>, applicable guidance: <summary>`
and `Recall complete: searched ${EVOLVE_DIR:-.evolve}/entities/ and
${EVOLVE_DIR:-.evolve}/public/, no relevant entities found`), updating the
examples that appear in SKILL.md so they match the workflow described around
lines referencing the scan of both /entities/ and /public/.
platform-integrations/claude/plugins/evolve-lite/skills/evolve-lite/recall/SKILL.md (2)

55-55: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Update failure condition to include both recall directories.

Line 55 mentions only .evolve/entities/, but the documented behavior (lines 31, 45, 63) requires inspecting both .evolve/entities/ and .evolve/public/. Update this failure condition to be consistent.

📝 Proposed fix to include both directories
-- You did not inspect `${EVOLVE_DIR:-.evolve}/entities/`
+- You did not inspect `${EVOLVE_DIR:-.evolve}/entities/` and `${EVOLVE_DIR:-.evolve}/public/`
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@platform-integrations/claude/plugins/evolve-lite/skills/evolve-lite/recall/SKILL.md`
at line 55, Update the failure-condition sentence that currently references only
`${EVOLVE_DIR:-.evolve}/entities/` so it mentions and checks both
`${EVOLVE_DIR:-.evolve}/entities/` and `${EVOLVE_DIR:-.evolve}/public/` (to
match the documented behavior on lines 31, 45, and 63); locate the single-line
failure condition in SKILL.md (the line that starts "You did not inspect ...")
and rewrite it to include both directories explicitly and consistently.

40-41: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Update completion note examples to include both recall directories.

The completion note examples still reference only .evolve/entities/, but lines 31, 45, and 63 document that both .evolve/entities/ and .evolve/public/ should be searched. Update these examples to match.

📝 Proposed fix to include both directories
-- `Recall complete: searched ${EVOLVE_DIR:-.evolve}/entities/, quoted <files> verbatim below`
-- `Recall complete: searched ${EVOLVE_DIR:-.evolve}/entities/, no relevant entities found`
+- `Recall complete: searched ${EVOLVE_DIR:-.evolve}/entities/ and ${EVOLVE_DIR:-.evolve}/public/, quoted <files> verbatim below`
+- `Recall complete: searched ${EVOLVE_DIR:-.evolve}/entities/ and ${EVOLVE_DIR:-.evolve}/public/, no relevant entities found`
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@platform-integrations/claude/plugins/evolve-lite/skills/evolve-lite/recall/SKILL.md`
around lines 40 - 41, Update the completion note examples that currently
reference only `${EVOLVE_DIR:-.evolve}/entities/` so they list both directories;
replace instances of the strings like "Recall complete: searched
${EVOLVE_DIR:-.evolve}/entities/, quoted <files> verbatim below" and "Recall
complete: searched ${EVOLVE_DIR:-.evolve}/entities/, no relevant entities found"
with versions that include both paths (e.g. "Recall complete: searched
${EVOLVE_DIR:-.evolve}/entities/ and ${EVOLVE_DIR:-.evolve}/public/, quoted
<files> verbatim below" and "Recall complete: searched
${EVOLVE_DIR:-.evolve}/entities/ and ${EVOLVE_DIR:-.evolve}/public/, no relevant
entities found") so the examples match the documented search behavior referenced
elsewhere in SKILL.md (the examples near the existing completion notes).
🧹 Nitpick comments (2)
plugin-source/skills/evolve-lite/recall/SKILL.md.j2 (1)

124-137: ⚡ Quick win

Manifest examples should include a public/ entry to match the new behavior

Both example outputs only show .evolve/entities/..., which weakens the new dual-root guidance and can bias readers away from public/.

Suggested example tweak
 ```text
 - `.evolve/entities/guideline/use-context-managers-for-file-operations.md` [guideline] — When processing files or managing resources
+- `.evolve/public/guideline/review-checklist.md` [guideline] — When performing code review
 - `.evolve/entities/subscribed/alice/guideline/error-handling.md` [guideline] — When writing error handlers

@@

{"path": ".evolve/entities/guideline/use-context-managers-for-file-operations.md", "type": "guideline", "trigger": "When processing files or managing resources"}
+{"path": ".evolve/public/guideline/review-checklist.md", "type": "guideline", "trigger": "When performing code review"}
</details>

<details>
<summary>🤖 Prompt for AI Agents</summary>

Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @plugin-source/skills/evolve-lite/recall/SKILL.md.j2 around lines 124 - 137,
Update the manifest examples in SKILL.md.j2 so they include a representative
.evolve/public/... entry alongside the existing .evolve/entities/...
entries; specifically modify both the human-readable (platform == "bob") block
and the JSON manifest block to add a public guideline (e.g., a path like
.evolve/public/guideline/review-checklist.md with an appropriate "type" and
"trigger") so the examples reflect the new dual-root behavior implemented around
the platform conditional.


</details>

</blockquote></details>
<details>
<summary>platform-integrations/codex/plugins/evolve-lite/skills/evolve-lite/recall/SKILL.md (1)</summary><blockquote>

`87-87`: _💤 Low value_

**Capitalize "Markdown" for proper noun.**

The word "markdown" should be capitalized as "Markdown" when referring to the formatting language. As per coding guidelines, proper nouns should be capitalized.




<details>
<summary>✏️ Proposed fix</summary>

```diff
-Each file still uses markdown with YAML frontmatter:
+Each file still uses Markdown with YAML frontmatter:
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@platform-integrations/codex/plugins/evolve-lite/skills/evolve-lite/recall/SKILL.md`
at line 87, The phrase "Each file still uses markdown with YAML frontmatter:"
uses a lowercase "markdown"; update it to "Markdown" (capitalize the proper
noun) in SKILL.md by replacing "markdown" with "Markdown" and check for any
other occurrences of the lowercase term in the same file (e.g., within the YAML
frontmatter example or headings) to ensure consistency.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@platform-integrations/claw-code/plugins/evolve-lite/skills/evolve-lite/recall/SKILL.md`:
- Around line 30-33: Update the completion-note examples in SKILL.md to reflect
the manifest-or-dual-root discovery described in the steps: when a manifest
exists this should be used to choose entity files, otherwise fall back to
inspecting `${EVOLVE_DIR:-.evolve}/entities/` and
`${EVOLVE_DIR:-.evolve}/public/`; adjust the “required note” examples so at
least one shows the manifest-aware form (e.g., mentions using the injected
manifest to select files) and/or shows both roots
`${EVOLVE_DIR:-.evolve}/entities/` and `${EVOLVE_DIR:-.evolve}/public/` so the
examples match the runtime `manifest-or-dual-root` behavior described in the
numbered steps.

In `@plugin-source/skills/evolve-lite/recall/SKILL.md.j2`:
- Line 33: The completion/failure text in SKILL.md.j2 still only checks
`${EVOLVE_DIR:-.evolve}/entities/`, causing recall to be marked complete even
when `${EVOLVE_DIR:-.evolve}/public/` (or an injected manifest) should be
considered; update the mandatory completion-note templates and failure condition
checks in SKILL.md.j2 to reference both `${EVOLVE_DIR:-.evolve}/entities/` and
`${EVOLVE_DIR:-.evolve}/public/` (and allow for an injected manifest if
present), ensuring functions/sections that generate the "completion" message or
evaluate "failure" consult both paths (or the injected manifest) before deciding
recall success.

---

Outside diff comments:
In `@platform-integrations/bob/evolve-lite/skills/evolve-lite-recall/SKILL.md`:
- Around line 30-44: The completion templates and failure check in SKILL.md are
inconsistent: the procedure requires using an injected manifest or searching
both `${EVOLVE_DIR:-.evolve}/entities/` and `${EVOLVE_DIR:-.evolve}/public/`,
but the visible completion note and "no relevant entities" template only mention
`entities/`; update these templates and any validation logic to require and
reflect both sources (or the injected manifest) — specifically change the
required completion note examples (`Recall complete: searched
${EVOLVE_DIR:-.evolve}/entities/, read <files>, applicable guidance: <summary>`
and the "no relevant entities" variant) to reference both
`${EVOLVE_DIR:-.evolve}/entities/` and `${EVOLVE_DIR:-.evolve}/public/` (or the
injected manifest alternative), and adjust any failure-condition text that
currently validates only `entities/` so it enforces the joint check.

In
`@platform-integrations/claude/plugins/evolve-lite/skills/evolve-lite/recall/SKILL.md`:
- Line 55: Update the failure-condition sentence that currently references only
`${EVOLVE_DIR:-.evolve}/entities/` so it mentions and checks both
`${EVOLVE_DIR:-.evolve}/entities/` and `${EVOLVE_DIR:-.evolve}/public/` (to
match the documented behavior on lines 31, 45, and 63); locate the single-line
failure condition in SKILL.md (the line that starts "You did not inspect ...")
and rewrite it to include both directories explicitly and consistently.
- Around line 40-41: Update the completion note examples that currently
reference only `${EVOLVE_DIR:-.evolve}/entities/` so they list both directories;
replace instances of the strings like "Recall complete: searched
${EVOLVE_DIR:-.evolve}/entities/, quoted <files> verbatim below" and "Recall
complete: searched ${EVOLVE_DIR:-.evolve}/entities/, no relevant entities found"
with versions that include both paths (e.g. "Recall complete: searched
${EVOLVE_DIR:-.evolve}/entities/ and ${EVOLVE_DIR:-.evolve}/public/, quoted
<files> verbatim below" and "Recall complete: searched
${EVOLVE_DIR:-.evolve}/entities/ and ${EVOLVE_DIR:-.evolve}/public/, no relevant
entities found") so the examples match the documented search behavior referenced
elsewhere in SKILL.md (the examples near the existing completion notes).

In
`@platform-integrations/codex/plugins/evolve-lite/skills/evolve-lite/recall/SKILL.md`:
- Line 54: Update the failure message that currently reads "You did not inspect
`${EVOLVE_DIR:-.evolve}/entities/`" so it explicitly references both directories
required by the workflow: `${EVOLVE_DIR:-.evolve}/entities/` and
`${EVOLVE_DIR:-.evolve}/public/`; locate the string in SKILL.md and change the
wording to mention both directories (and scan the surrounding text in SKILL.md
for any other occurrences to ensure consistency with the rest of the document).
- Around line 39-40: Update the completion note examples in SKILL.md to
reference both scanned directories instead of only entities: change the
templates that currently mention `${EVOLVE_DIR:-.evolve}/entities/` to include
`${EVOLVE_DIR:-.evolve}/entities/` and `${EVOLVE_DIR:-.evolve}/public/` (e.g.,
`Recall complete: searched ${EVOLVE_DIR:-.evolve}/entities/ and
${EVOLVE_DIR:-.evolve}/public/, read <files>, applicable guidance: <summary>`
and `Recall complete: searched ${EVOLVE_DIR:-.evolve}/entities/ and
${EVOLVE_DIR:-.evolve}/public/, no relevant entities found`), updating the
examples that appear in SKILL.md so they match the workflow described around
lines referencing the scan of both /entities/ and /public/.

---

Nitpick comments:
In
`@platform-integrations/codex/plugins/evolve-lite/skills/evolve-lite/recall/SKILL.md`:
- Line 87: The phrase "Each file still uses markdown with YAML frontmatter:"
uses a lowercase "markdown"; update it to "Markdown" (capitalize the proper
noun) in SKILL.md by replacing "markdown" with "Markdown" and check for any
other occurrences of the lowercase term in the same file (e.g., within the YAML
frontmatter example or headings) to ensure consistency.

In `@plugin-source/skills/evolve-lite/recall/SKILL.md.j2`:
- Around line 124-137: Update the manifest examples in SKILL.md.j2 so they
include a representative `.evolve/public/...` entry alongside the existing
`.evolve/entities/...` entries; specifically modify both the human-readable
(platform == "bob") block and the JSON manifest block to add a public guideline
(e.g., a path like `.evolve/public/guideline/review-checklist.md` with an
appropriate "type" and "trigger") so the examples reflect the new dual-root
behavior implemented around the platform conditional.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 069af796-30d9-4f29-9b11-2ac591868dc6

📥 Commits

Reviewing files that changed from the base of the PR and between 3be24a6 and 54ef9f7.

📒 Files selected for processing (24)
  • platform-integrations/bob/evolve-lite/lib/entity_io.py
  • platform-integrations/bob/evolve-lite/skills/evolve-lite-recall/SKILL.md
  • platform-integrations/bob/evolve-lite/skills/evolve-lite-recall/scripts/retrieve_entities.py
  • platform-integrations/claude/plugins/evolve-lite/lib/entity_io.py
  • platform-integrations/claude/plugins/evolve-lite/skills/evolve-lite/recall/SKILL.md
  • platform-integrations/claude/plugins/evolve-lite/skills/evolve-lite/recall/scripts/retrieve_entities.py
  • platform-integrations/claw-code/plugins/evolve-lite/lib/entity_io.py
  • platform-integrations/claw-code/plugins/evolve-lite/skills/evolve-lite/recall/SKILL.md
  • platform-integrations/claw-code/plugins/evolve-lite/skills/evolve-lite/recall/scripts/retrieve_entities.py
  • platform-integrations/codex/plugins/evolve-lite/lib/entity_io.py
  • platform-integrations/codex/plugins/evolve-lite/skills/evolve-lite/recall/SKILL.md
  • platform-integrations/codex/plugins/evolve-lite/skills/evolve-lite/recall/scripts/retrieve_entities.py
  • plugin-source/lib/entity_io.py
  • plugin-source/skills/evolve-lite/recall/SKILL.md.j2
  • plugin-source/skills/evolve-lite/recall/scripts/retrieve_entities.py.j2
  • tests/platform_integrations/conftest.py
  • tests/platform_integrations/test_bob_sharing.py
  • tests/platform_integrations/test_claude_retrieve_manifest.py
  • tests/platform_integrations/test_codex_retrieve_manifest.py
  • tests/platform_integrations/test_codex_sharing.py
  • tests/platform_integrations/test_entity_io_core.py
  • tests/platform_integrations/test_retrieve.py
  • tests/platform_integrations/test_subscribe.py
  • tests/platform_integrations/test_sync.py
✅ Files skipped from review due to trivial changes (2)
  • tests/platform_integrations/test_entity_io_core.py
  • tests/platform_integrations/test_claude_retrieve_manifest.py
🚧 Files skipped from review as they are similar to previous changes (17)
  • tests/platform_integrations/test_subscribe.py
  • platform-integrations/bob/evolve-lite/lib/entity_io.py
  • tests/platform_integrations/test_codex_sharing.py
  • tests/platform_integrations/test_codex_retrieve_manifest.py
  • plugin-source/lib/entity_io.py
  • platform-integrations/codex/plugins/evolve-lite/skills/evolve-lite/recall/scripts/retrieve_entities.py
  • platform-integrations/claw-code/plugins/evolve-lite/lib/entity_io.py
  • tests/platform_integrations/conftest.py
  • platform-integrations/claude/plugins/evolve-lite/skills/evolve-lite/recall/scripts/retrieve_entities.py
  • platform-integrations/claude/plugins/evolve-lite/lib/entity_io.py
  • platform-integrations/claw-code/plugins/evolve-lite/skills/evolve-lite/recall/scripts/retrieve_entities.py
  • platform-integrations/bob/evolve-lite/skills/evolve-lite-recall/scripts/retrieve_entities.py
  • tests/platform_integrations/test_bob_sharing.py
  • plugin-source/skills/evolve-lite/recall/scripts/retrieve_entities.py.j2
  • tests/platform_integrations/test_retrieve.py
  • platform-integrations/codex/plugins/evolve-lite/lib/entity_io.py
  • tests/platform_integrations/test_sync.py

Comment on lines +30 to 33
1. If a manifest has already been injected for this turn, use it to pick which entity files to open. Otherwise inspect `${EVOLVE_DIR:-.evolve}/entities/` and `${EVOLVE_DIR:-.evolve}/public/` for guidance relevant to the current task.
2. Read each matching entity file that appears relevant.
3. Summarize the applicable guidance in your own words before proceeding.
4. If no relevant entities exist, state that explicitly before proceeding.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Align completion-note examples with the new workflow.

Line 30 now requires manifest-or-dual-root discovery, but the required visible completion examples still only reference ${EVOLVE_DIR:-.evolve}/entities/. Please add a manifest-aware form and/or include both roots so the “required note” can’t drift from the actual procedure.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@platform-integrations/claw-code/plugins/evolve-lite/skills/evolve-lite/recall/SKILL.md`
around lines 30 - 33, Update the completion-note examples in SKILL.md to reflect
the manifest-or-dual-root discovery described in the steps: when a manifest
exists this should be used to choose entity files, otherwise fall back to
inspecting `${EVOLVE_DIR:-.evolve}/entities/` and
`${EVOLVE_DIR:-.evolve}/public/`; adjust the “required note” examples so at
least one shows the manifest-aware form (e.g., mentions using the injected
manifest to select files) and/or shows both roots
`${EVOLVE_DIR:-.evolve}/entities/` and `${EVOLVE_DIR:-.evolve}/public/` so the
examples match the runtime `manifest-or-dual-root` behavior described in the
numbered steps.

Do not proceed to other analysis or tool use until all steps below are complete.

1. Inspect `${EVOLVE_DIR:-.evolve}/entities/` for guidance relevant to the current task.
1. If a manifest has already been injected for this turn, use it to pick which entity files to open. Otherwise inspect `${EVOLVE_DIR:-.evolve}/entities/` and `${EVOLVE_DIR:-.evolve}/public/` for guidance relevant to the current task.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Required completion/failure text still enforces legacy single-root recall

The new rule adds ${EVOLVE_DIR:-.evolve}/public/ (or injected manifest), but the mandatory completion-note templates and failure conditions below still reference only ${EVOLVE_DIR:-.evolve}/entities/. That can incorrectly mark recall as complete without checking public/.

Suggested doc alignment patch
-{% if forked_context | default(false) -%}
-- `Recall complete: searched ${EVOLVE_DIR:-.evolve}/entities/, quoted <files> verbatim below`
-- `Recall complete: searched ${EVOLVE_DIR:-.evolve}/entities/, no relevant entities found`
-{%- else -%}
-- `Recall complete: searched ${EVOLVE_DIR:-.evolve}/entities/, read <files>, applicable guidance: <summary>`
-- `Recall complete: searched ${EVOLVE_DIR:-.evolve}/entities/, no relevant entities found`
-{%- endif %}
+{% if forked_context | default(false) -%}
+- `Recall complete: checked injected manifest (or searched ${EVOLVE_DIR:-.evolve}/entities/ and ${EVOLVE_DIR:-.evolve}/public/), quoted <files> verbatim below`
+- `Recall complete: checked injected manifest (or searched ${EVOLVE_DIR:-.evolve}/entities/ and ${EVOLVE_DIR:-.evolve}/public/), no relevant entities found`
+{%- else -%}
+- `Recall complete: checked injected manifest (or searched ${EVOLVE_DIR:-.evolve}/entities/ and ${EVOLVE_DIR:-.evolve}/public/), read <files>, applicable guidance: <summary>`
+- `Recall complete: checked injected manifest (or searched ${EVOLVE_DIR:-.evolve}/entities/ and ${EVOLVE_DIR:-.evolve}/public/), no relevant entities found`
+{%- endif %}

 - You only read this `SKILL.md`
-- You did not inspect `${EVOLVE_DIR:-.evolve}/entities/`
+- You did not inspect `${EVOLVE_DIR:-.evolve}/entities/` and `${EVOLVE_DIR:-.evolve}/public/` (or check an injected manifest)
 - You did not read the relevant entity files
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugin-source/skills/evolve-lite/recall/SKILL.md.j2` at line 33, The
completion/failure text in SKILL.md.j2 still only checks
`${EVOLVE_DIR:-.evolve}/entities/`, causing recall to be marked complete even
when `${EVOLVE_DIR:-.evolve}/public/` (or an injected manifest) should be
considered; update the mandatory completion-note templates and failure condition
checks in SKILL.md.j2 to reference both `${EVOLVE_DIR:-.evolve}/entities/` and
`${EVOLVE_DIR:-.evolve}/public/` (and allow for an injected manifest if
present), ensuring functions/sections that generate the "completion" message or
evaluate "failure" consult both paths (or the injected manifest) before deciding
recall success.

Copy link
Copy Markdown
Collaborator

@illeatmyhat illeatmyhat left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approving — manifest-first recall delivers what #224 asks for.

Verified end-to-end against the kept smoke workspace: the hook emits {path, type, trigger} JSON-lines for Claude/Codex and a bullet markdown list for Bob; full bodies stay in the entity files and are only read on demand. The platform_integrations test suite pins all the data-layer claims (manifest shape, public/ discovery, dedupe determinism, symlink/missing-field skip), and the live smoke run was clean across all three CLIs (learn → recall → publish all green).

One non-blocking nit for follow-up: in plugin-source/skills/evolve-lite/recall/SKILL.md.j2, the Required Visible Completion Note templates (~lines 47–53) and the Failure Conditions entry (~line 71) still hard-code searched ${EVOLVE_DIR:-.evolve}/entities/. Step 1 and the Minimum Acceptable Procedure already include public/ and the injected manifest, so just bringing those two laggards into line keeps the prescribed agent self-report honest. The drift propagates to all four rendered platform copies — happy to file a follow-up.

@visahak visahak merged commit 003bd53 into AgentToolkit:main May 11, 2026
17 checks passed
@visahak visahak deleted the feat/codex-recall-manifest-224 branch May 11, 2026 19:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants