Skip to content

Harvest skill's mandatory Step 7 depends on unpublished _HARVEST skill + private Arbol backend — unusable on public installs #1577

Description

@elhoim

Summary

The public Harvest skill has a mandatory final step (Step 7) that invokes a skill which is not part of the public release. Any user who runs Harvest on a clean LifeOS install hits an unsatisfiable step, and — by the skill's own rules — the harvest can never report completion.

Where it breaks

Harvest/Workflows/Harvest.md, Step 7 — Ingest into the Knowledge Archive (ALWAYS the final step):

bun ~/.claude/skills/_HARVEST/Tools/harvest.ts "<original input>"
  • LifeOS/install/skills/Harvest/Workflows/Harvest.md L84 — the invocation
  • L87 — "Runs the canonical Arbol pipeline (_F_HARVEST classify → HarvestExecutor.ts write). Never write to MEMORY/KNOWLEDGE/ by hand."
  • L89 — "A harvest is not complete until the note is written or the failure is surfaced."

And it is reinforced as non-optional in Harvest/SKILL.md:

  • L10 — "always as the final step, ingest … via the _HARVEST pipeline"
  • L28 — "Harvest calls it as its mandatory final step"
  • L39 — "KB ingestion is not optional and not skippable on a thin harvest."
  • L46 — the Examples block repeats the _HARVEST/Tools/harvest.ts call.

Why it can't run on a public install

  1. skills/_HARVEST/ is not published. It is a private, underscore-prefixed skill, and the release tooling excludes every _-prefixed skill by design. Confirmed: skills/_HARVEST/Tools/harvest.ts returns 404 on main, and there are zero _-prefixed skills anywhere under LifeOS/install/skills/. So the Step 7 path does not exist for any public user.

  2. The shipped fallback isn't a drop-in either. LIFEOS/TOOLS/HarvestExecutor.ts does ship, but it is only the downstream write half of the pipeline. It fetches already-classified items from a private Arbol endpoint and throws immediately without it:

    const HARVEST_API_BASE = process.env.ARBOL_HARVEST_API_BASE ?? "";
    // ...
    if (!HARVEST_API_BASE) { throw new Error(...) }

    LifeOS/install/LIFEOS/TOOLS/HarvestExecutor.ts L29, L153. The _HARVEST wrapper is what owns and threads that URL; without the wrapper and a running Arbol harvest service, there is no ingestion path.

Net effect: the public Harvest skill depends on two unpublished pieces — the _HARVEST skill and a private Arbol backend — for a step it declares mandatory.

Reproduction

On a public install, run Harvest on any source. Mining Steps 1–6 complete normally; Step 7 fails because ~/.claude/skills/_HARVEST/Tools/harvest.ts does not exist. Per L89 ("a harvest is not complete until the note is written or the failure is surfaced"), the run can only ever end in a surfaced failure, never a success. Observed first-hand twice while running the skill.

Suggested fixes (any one resolves it)

  1. Ship a public ingestion path. Provide a self-contained Harvest ingestion tool that writes a KNOWLEDGE note directly to MEMORY/KNOWLEDGE/ with the documented typed-related: schema — no Arbol, no _HARVEST. This is the highest-value fix; it makes the skill actually usable end to end.
  2. Make Step 7 gracefully degrade. Keep the Arbol path when ARBOL_HARVEST_API_BASE and _HARVEST are present, but fall back to a local note-writer (or a clearly-labelled "ingestion skipped — no public backend configured") otherwise, instead of mandating a private skill.
  3. At minimum, document the dependency. State in Harvest/SKILL.md that Step 7 requires private infrastructure (_HARVEST + an Arbol harvest endpoint) and is a no-op on public installs, so users aren't left with a skill that can't complete.

Affected files

  • LifeOS/install/skills/Harvest/Workflows/Harvest.md (Step 7, L84–L91)
  • LifeOS/install/skills/Harvest/SKILL.md (L10, L28, L39, L46)
  • LifeOS/install/LIFEOS/TOOLS/HarvestExecutor.ts (Arbol dependency, L29 / L153)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions