Skip to content

v0.49.0

Choose a tag to compare

@jmc-wander jmc-wander released this 14 Oct 21:05
· 57 commits to main since this release

Added

  • code_ingest.exclude in .kin/config lists fnmatch globs that kin ingest code leaves out, on top of the built-in and Unity excludes rather than in
    place of them. Patterns match each file's path relative to the git
    repository root, so client/Assets/Licensed/* names the same files whether
    the ingest targets the root or client/. A single string is read as one
    pattern and an empty exclude: as none. The next full ingest retires nodes for files a new pattern covers
    and restores them if the pattern is removed; nodes archived by hand stay
    archived, and a run cut short by --limit retires nothing.
  • Optional known-secret masking. secret_mask: {files: [~/.profile]} in the
    user config makes every value of a selected NAME=VALUE line become $NAME
    wherever Kindex stores or shows text: all store writes, ingestion, MCP tools,
    hooks, FTS and embedding inputs, and every output path, so older rows come
    out masked too. keys selects names (case-insensitive substring, * glob;
    default: names containing KEY, TOKEN, SECRET, PASSWORD and similar) and
    min_length (default 8) skips short values. A project's .kin/config
    cannot set it. kin mask scan (MCP mask_scan) counts stored occurrences
    per key name and location without printing values; --apply snapshots each
    database, rewrites them, rebuilds FTS and requeues embeddings. kindex-lite
    reads this one setting from the user config.
  • kin setup-muse-mcp registers kin-mcp as an optional stdio server in Muse's
    ~/.config/muse/settings.json (--uninstall, --dry-run). It refuses to write
    while a legacy mcp_servers key is present, because Muse then ignores every MCP
    server, and uses the absolute kin-mcp path because Muse passes MCP children a
    small environment allowlist.
  • Turn-level conversation claims (conversations.claims, off by default).
    kin digest reads a user/assistant conversation message by message and
    records atomic claims in place of its per-conversation facts, each tied to
    the message it came from (its place in the conversation and its words).
    Dialogue between named speakers keeps its facts. kin digest --claims gives
    conversations digested earlier claims without digesting them again.
  • kin ask options, all off by default: ask.rank_order (evidence most
    relevant first), position_order, position_labels, fact_sources (a
    claim shown with the words it came from), surface_first /
    surface_first_asked (the earliest matching statement instead of the
    latest), and evidence_only (return the assembled evidence with no answer
    or verification call).
  • Reasoning effort none is accepted by ask.effort, plan_effort and
    hard_effort.

Changed

  • Supervisor health counts Kindex use by a Claude session's subagents as use by
    the session, so a session that delegates its Kindex work is no longer
    reported missing_use. A recent session's subagents/agent-*.jsonl files
    are scanned for Kindex calls only: their work does not make the session look
    active, they never form a session of their own, a row naming a different
    session than its directory is ignored. The newest 16 per session (64 in all)
    are read; older ones are skipped, never a reason to report Claude
    observation unavailable. A flat agent-*.jsonl beside the sessions is no
    longer read as a session.

Fixed

  • Under a bound root, kin config set --global and kin profile create no
    longer write the real $HOME/kin.yaml when the root's config directory
    cannot be created (a .config that is a file, say); they write
    <root>/kin.yaml. kin profile create --config resolves its path beneath
    the bound root, as kin config set --config already did.
  • kin setup-codex-hooks says that Codex runs new or changed hooks only once
    they are trusted, at its startup review prompt or in /hooks; until then
    they do not run, SessionStart included.
  • Supervisor health no longer raises observation_unavailable for a healthy
    Claude session whose first prompt (a pasted image, say) is larger than the
    64 KiB the checker reads from the start of a transcript. It takes the
    session's project and id from the latest rows instead, if they match.
  • A model that rejects a low reasoning effort (minimal, none) keeps the
    higher efforts it accepts. The rejection used to mark the model as taking no
    effort at all, so every later call on it, high-effort ones included, was
    sent without one.
  • An ignored reminder no longer re-notifies every 20 minutes forever. Each
    consecutive automatic snooze doubles the last (15 min, 30 min, 1 h, ...) up
    to reminders.auto_snooze_max (default 24 h). A manual snooze, or a
    recurring reminder's next occurrence, starts the backoff over.
  • Packaged Claude plugin hooks expand ${CLAUDE_PLUGIN_ROOT}. The generated
    commands single-quoted it, so bash ran the literal path relative to the
    session's cwd and every hook failed with "No such file or directory".