Skip to content

Releases: eyelock/ynm

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 30 Oct 14:59
3527745
  • #106 345e5f4 Thanks @eyelock! - A new sync.auto setting (off by default) syncs distributed memory in the background from the agent's Stop hook. When it is on and a distributed mount has writes the remote has not seen, the hook starts ynm sync --quiet detached: a full fetch, merge and push, never the personal store, and the turn does not wait for it. It runs at most once per sync.intervalMinutes per repository (default and minimum 5, because the Stop hook opens the store once per 5 minutes per session; at most 1440), and a write made inside the interval goes out at the first Stop after it. Errors never reach the session.

    A successful ynm sync now records what the remote holds in the remote-tracking refs for the notes and documents it pushed, so unpushed writes can be detected locally with no network.

Patch Changes

  • #107 bc22cd3 Thanks @eyelock! - A --mount naming a mount that does not exist is now refused with exit 2 and the mounts there are: no mount "projet" (have: personal, project, team). Before, recall, context, list, export, review, reindex, sync and wiki build matched nothing and exited 0, so a typo, or --mount project run outside an initialised repository, looked like an empty store.

Install: see https://eyelock.github.io/ynm/#/how-to/install (Homebrew ynm standalone or ynm-slim, direct download, Docker).

What's Changed

  • Back-merge release 0.4.2 into develop by @eyelock in #105
  • feat: sync distributed memory from the Stop hook when sync.auto is on by @eyelock in #106
  • fix: an unknown --mount is refused, not read as an empty store by @eyelock in #107
  • Release 0.5.0 by @eyelock in #108

Full Changelog: v0.4.2...v0.5.0

v0.4.2

Choose a tag to compare

@github-actions github-actions released this 30 Oct 12:09
d16fb50
  • #83 9774b45 Thanks @eyelock! - ynm client install ynh now adds ynm's store, identity and configuration variables (YNM_HOME, YNM_USER and the like) to the harness's env_passthrough. ynh hides every other variable from a worker, so without them the MCP server and hooks silently used ~/.ynm, your real personal store. ynm client status and ynm doctor report a harness without YNM_HOME as not fully configured, and ynm doctor warns in a ynh worker where YNM_HOME is unset.

  • #101 679df43 Thanks @eyelock! - remember's note about similar memories now compares a new memory only with memories in its own namespace. A namespace has one owner, so a memory in another one is never a duplicate to supersede; before, two seats writing alike records in their own namespaces were each told to supersede the other's.

    ynm remember now says the memory's level and namespace as well as its mount: remembered <id> in project, level distributed, namespace common. The mount's name (project) read like a level, and the only levels are personal and distributed. A write's JSON result has namespace and level too.

  • #103 688845c Thanks @eyelock! - ynm sync counts only what it moved. fetched is the number of refs the fetch brought something new for, and pushed lists the refs the push changed on the remote, so a sync with nothing to move reports fetched 0, merged 0, pushed 0. Before, it reported every ref the remote had as fetched and every local ref as pushed, so a run couldn't show whether anything changed.

    A command whose output is cut short, such as ynm sync --json | head, now exits 0 quietly. Before, it exited 13 with Node's "unsettled top-level await" warning on stderr.

Install: see https://eyelock.github.io/ynm/#/how-to/install (Homebrew ynm standalone or ynm-slim, direct download, Docker).

What's Changed

  • chore: back-merge release 0.4.1 into develop by @eyelock in #82
  • fix: ynh harnesses pass ynm's environment; derived folders ignore themselves by @eyelock in #83
  • ci: scan agent skills with eyelock/actions/skillspector by @eyelock in #86
  • deps: Bump @modelcontextprotocol/client from 2.2.0 to 2.3.0 by @dependabot[bot] in #87
  • deps: Bump @modelcontextprotocol/server from 2.2.0 to 2.3.0 by @dependabot[bot] in #88
  • deps: Bump the terraform group across 5 directories with 2 updates by @dependabot[bot] in #89
  • deps: Bump the minor-and-patch group across 1 directory with 26 updates by @dependabot[bot] in #90
  • fix: patch vite and launch-editor in the test toolchain by @eyelock in #91
  • fix: a git-notes store reads shards with non-ASCII text by bytes by @eyelock in #93
  • fix: the hosted function logs why its process went away by @eyelock in #92
  • fix: the provisioner profile can read the stores' logs by @eyelock in #94
  • deps: Bump the minor-and-patch group with 16 updates by @dependabot[bot] in #95
  • deps: Bump the terraform group across 4 directories with 1 update by @dependabot[bot] in #96
  • deps: OpenTelemetry 3 across the telemetry package by @eyelock in #102
  • fix: remember compares within a namespace and says the level and namespace by @eyelock in #101
  • fix: sync counts only what it moved; a cut-off pipe exits quietly by @eyelock in #103
  • Release 0.4.2 by @eyelock in #104

Full Changelog: v0.4.1...v0.4.2

v0.4.1

Choose a tag to compare

@github-actions github-actions released this 08 Oct 06:47
c16392e
  • #80 1e1263c Thanks @eyelock! - - For Claude Code, a project with no instruction file now gets CLAUDE.md, not AGENTS.md, and a project with only an AGENTS.md keeps the block there and gets a CLAUDE.md that imports it.

    • ynm init always excludes personal files (.claude/settings.local.json, CLAUDE.local.md) in .git/info/exclude, even when a global ignore file already covers them.
    • The dream report's fallback now means a no-model path was used; an uncalibrated judge is reported separately as uncalibrated, and a reflection the Writer wrote is no longer a fallback.
    • The claude Writer and the claude --version probe run in a dedicated temp directory with --no-session-persistence, so the project's CLAUDE.md, hooks and session history are not touched.
  • #80 1e1263c Thanks @eyelock! - ynm dream --dry-run no longer calls a model; add --judge to see the model's verdicts.

  • #80 1e1263c Thanks @eyelock! - ynm remember warns when similar memories already exist, as the MCP tool does: a note: line
    after remembered ..., and a guidance string in the JSON. It never refuses.

Install: see https://eyelock.github.io/ynm/#/how-to/install (Homebrew ynm standalone or ynm-slim, direct download, Docker).

What's Changed

  • fix: infra/github defaults to public, matching the live repository by @eyelock in #77
  • chore: back-merge release 0.4.0 into develop by @eyelock in #79
  • fix: tutorial findings for 0.4.1 by @eyelock in #80
  • release: 0.4.1 by @eyelock in #81

Full Changelog: v0.4.0...v0.4.1

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 07 Oct 21:58
9e6e1f6
  • #63 1c2a577 Thanks @eyelock! - OpenTelemetry. Set OTEL_EXPORTER_OTLP_ENDPOINT and ynm sends a span for each HTTP request, MCP
    tool call, CLI command, store call and dream pass, each announced by a started event and ended
    with its outcome, plus duration metrics and the server's stderr lines as log records. A request's
    traceparent header, a tool call's _meta, or TRACEPARENT in a command's environment joins the
    caller's trace. Nothing is exported that holds memory content: no bodies, summaries, queries, tool
    arguments, subjects or tags, and namespaces only with YNM_TELEMETRY_NAMESPACES=1; every string
    passes through the redaction patterns first. YNM_AUDIT={"sink":"otel"} sends audit events to the
    collector, naming the person by their sign-in id and identity provider host. Without an endpoint
    nothing is loaded and nothing changes. ynm telemetry registry --format json prints every name ynm
    emits.

  • #66 e00db04 Thanks @eyelock! - Telemetry passes the trace on and names people by login name. With telemetry on, every process
    ynm starts (git, the Claude CLI, the agent CLIs ynm client install runs) gets TRACEPARENT and
    TRACESTATE for the span it runs in, and every request to a hosted ynm through a remote mount
    carries the W3C traceparent and tracestate headers, so the work ynm calls joins its trace. No
    request to a third party, such as an identity provider or a model API, carries trace context. A
    tool call to a hosted ynm and a call to a model are now client spans of their own
    (tools/call …, model …), with started events and duration metrics. With telemetry off
    nothing changes. The otel audit sink's user.name is now the
    person's login name, the token's preferred_username, falling back to its subject, qualified by
    the identity provider's host; a value with an @ is never used. Who a person is in ynm, and what
    the other audit sinks record, is unchanged.

  • #64 9b38d8f Thanks @eyelock! - Telemetry to a ynr spool. With no OTLP endpoint set, ynm writes its spans, events and metrics as
    OTLP JSON lines into the folder YNR_SPOOL names, or into ynr's laptop spool,
    ~/.local/state/ynr/spool/local (under XDG_STATE_HOME when set), when that folder exists. An
    endpoint still wins. Each command, stdio session and function invocation puts its file on disk
    as it ends, within 2 seconds; files are capped, and what is dropped is counted in
    ynm.telemetry.spool.dropped and ynm.telemetry.spool.errors. A server started before the spool
    exists looks for it once a minute. A hosted server writes to the spool's services/ynm folder
    when its deployment sets YNR_SPOOL to it. With neither an endpoint nor a spool, nothing is
    loaded and nothing changes.

  • #75 1a3bd91 Thanks @eyelock! - ynm client install ynh now writes ynh's .agents/harness/plugin.json layout, and the ynm harness
    under integrations/ynh uses it too. A harness that still has its manifest in the deprecated
    .ynh-plugin/ directory is recognised by ynm client status and ynm doctor, and
    ynm client install ynh moves it to .agents/harness/ (saying so in its output) before merging
    ynm into it, so a harness never ends up with two manifests.

Patch Changes

  • #76 30f1650 Thanks @eyelock! - The Docker image is smaller and contains only the runtime: one bundled ynm.mjs, Node, git and
    tini, with no sources, tests, build cache or dev dependencies (770 MB to about 280 MB). It runs as
    a non-root user, uid 1001, and starts the server with ynm serve --http. A bind-mounted /data
    must be writable by uid 1001 (chown 1001:1001); a named volume needs nothing.

  • #69 1cd6046 Thanks @eyelock! - ynm telemetry registry --format json now prints the same shape as the other YN tools: the tool
    and version, the semantic-conventions release, then the attributes, standard attributes, spans,
    events and metrics. The names themselves are unchanged.

Install: see https://eyelock.github.io/ynm/#/how-to/install (Homebrew ynm standalone or ynm-slim, direct download, Docker).

What's Changed

  • chore: back-merge release 0.3.0 into develop by @eyelock in #60
  • fix: the Claude CLI writer no longer passes ANTHROPIC_API_KEY to the claude CLI by @eyelock in #61
  • feat: OpenTelemetry over OTLP, loaded only when an endpoint is set by @eyelock in #63
  • feat: write telemetry to a ynr spool when no OTLP endpoint is set by @eyelock in #64
  • chore: keep the YNR_READ_PACKAGES secret out of Terraform by @eyelock in #65
  • feat: pass trace context on, and name people by login name in telemetry by @eyelock in #66
  • fix: trace context goes only to processes ynm starts and to a hosted ynm by @eyelock in #67
  • fix: the Pi extension runs ynm from PATH, with no YNM_BIN override by @eyelock in #68
  • fix: print the telemetry registry in the shape every YN tool uses by @eyelock in #69
  • test: keep the telemetry-off test away from a real ynr laptop spool by @eyelock in #70
  • feat: bring the repository to the public-ready standard by @eyelock in #71
  • feat: read the public spool exporter with the workflow's own token by @eyelock in #74
  • deps: Bump keycloak/keycloak from 26.3 to 26.8 in /infra/keycloak by @dependabot[bot] in #72
  • deps: Bump auth0/auth0 from 1.58.0 to 1.58.1 in /infra/auth0 in the terraform group across 1 directory by @dependabot[bot] in #73
  • feat: write ynh's .agents/harness layout, moving an old .ynh-plugin by @eyelock in #75
  • feat: a slim, non-root container image by @eyelock in #76
  • release: 0.4.0 by @eyelock in #78

Full Changelog: v0.3.0...v0.4.0

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 04 Oct 23:15
13b2c4e
  • Occurrences, structured recall and clearer identities. A memory tagged occurrence records one
    event where repetition is the signal: dream never merges or supersedes it, still reflects on it,
    and keeps it out of the session-start context; after dream.occurrenceRetention (default 90
    days, null to keep them) dream retires old occurrences, except those the newest reflection on
    their subject was written from (a reflection now links only the episodes it was written from).
    Recall hits carry a memory's data, dataSchema and source. On a hosted store, a write made
    with a static token is recorded as token:static and one from an identity-provider token with no
    subject as client:<id>, never as the server's own user. The hosted function logs one line per
    request (method, path, status, duration, MCP method and tool, auth kind), answers before API
    Gateway's 30 seconds run out even after a slow cold start, and its alarms page on a sustained
    error rate rather than a single burst. The release binaries for macOS build on macos-26.

Patch Changes

Install: see https://eyelock.github.io/ynm/#/how-to/install (Homebrew ynm standalone or ynm-slim, direct download, Docker).

What's Changed

  • chore: back-merge release 0.2.0 into develop by @eyelock in #42
  • feat: a memory tagged occurrence is never merged or superseded by a dream, and still reflected on by @eyelock in #45
  • fix: a recall hit carries the memory's data, dataSchema and source by @eyelock in #49
  • fix: a write made with a static token is recorded as token:static, not as the server's user by @eyelock in #50
  • fix: an identity-provider token with no subject is recorded as its client, not as the server's user by @eyelock in #52
  • fix: the hosted function logs one line per request, and its alarms page on a sustained error rate by @eyelock in #53
  • feat: dream retires occurrences past a retention window by @eyelock in #54
  • test: the CLI workflow test gets its own three-minute timeout by @eyelock in #55
  • fix: the Lambda handler answers before API Gateway's 30 seconds run out, counting a cold start by @eyelock in #56
  • ci: release on macos-26 and the current Docker and release actions; GitHub retires macos-14 by @eyelock in #57
  • release: 0.3.0 by @eyelock in #59

Full Changelog: v0.2.0...v0.3.0

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 04 Oct 00:50
5176675
  • Hosted and team memory. A hosted ynm runs as an HTTP server or an AWS Lambda over an s3 record
    log, with sign-in through an identity provider (Auth0 on AWS, a local Keycloak to develop
    against). Hosted stores know who wrote what: person ids, nicknames, linked logins and a
    metadata-only audit log. Memory is personal by default, and a hosted store keeps a new memory
    only when sharing is chosen. A local ynm can mount a hosted ynm over MCP, so one ynm holds
    personal memory and the team's store; status and recall say why a store was left out. Hosted
    guidance lets URL-only clients remember intents. Agent integrations live under integrations/
    with one client-neutral ynm-memory skill. Distributed memory lives at
    refs/notes/ynm/distributed. Fixes: dream judges only what changed since the last run and calls
    no model when nothing has; ynm import reads piped stdin; init says what to commit and sync
    sets up fetching for a remote added later; the spend guard charges the estimate when a provider
    omits input tokens; the wiki orphan-branch target keeps deeply nested pages; an empty context
    says "no memory yet" instead of a bare heading.

Patch Changes

Install: see https://eyelock.github.io/ynm/#/how-to/install (Homebrew ynm standalone or ynm-slim, direct download, Docker).

What's Changed

  • ci: bump actions/setup-node from 4 to 7 by @dependabot[bot] in #1
  • ci: bump actions/checkout from 4 to 7 by @dependabot[bot] in #2
  • ci: bump actions/upload-artifact from 4 to 7 by @dependabot[bot] in #5
  • ci: bump actions/download-artifact from 4 to 8 by @dependabot[bot] in #3
  • deps: bump node from 24-alpine to 26-alpine by @dependabot[bot] in #4
  • deps: bump @vitest/coverage-v8 from 4.1.11 to 5.0.2 by @dependabot[bot] in #10
  • deps: bump @oclif/core from 4.14.0 to 5.1.2 by @dependabot[bot] in #9
  • ci: Gitflow like ynh by @eyelock in #12
  • ci: bump pnpm/action-setup from 4 to 6 by @dependabot[bot] in #6
  • deps: bump @changesets/cli from 2.31.1 to 3.0.3 by @dependabot[bot] in #8
  • deps: bump @changesets/changelog-github from 0.6.0 to 1.0.1 by @dependabot[bot] in #7
  • deps: bump typescript from 6.0.3 to 7.0.2 by @dependabot[bot] in #11
  • feat: integrations/ for what ynm ships to agents; one client-neutral skill by @eyelock in #13
  • refactor: refs/notes/ynm/distributed; no design-record references in user-facing text by @eyelock in #14
  • fix: init says what to commit; sync sets up fetching for a remote added later by @eyelock in #15
  • chore: Terraform state backend for infra/ by @eyelock in #17
  • chore: manage the repository's GitHub settings with Terraform by @eyelock in #18
  • test: every source file at 80% coverage; CI gates coverage of changed lines by @eyelock in #19
  • fix: wiki orphan-branch target keeps pages nested two or more folders deep by @eyelock in #21
  • fix: spend guard charges the estimate when a provider omits input tokens by @eyelock in #22
  • fix: baseline logging and mismatched entry kinds; injectable baseline and report dirs by @eyelock in #20
  • feat: s3 record log provider by @eyelock in #23
  • feat: run the MCP server as an AWS Lambda by @eyelock in #24
  • fix: ynm import reads piped stdin; optional args no longer swallow it by @eyelock in #25
  • feat: hosted guidance — remember intents from URL-only clients by @eyelock in #26
  • feat: sign in to the HTTP server through an identity provider, with a local Keycloak to develop against by @eyelock in #16
  • fix: dream judges only what changed since the last run, and calls no model when nothing has by @eyelock in #27
  • chore: hosted stores on AWS (Lambda on S3, or a server), signed in through Auth0 by @eyelock in #28
  • feat: hosted stores know who wrote what: person ids, nicknames, linked logins and a metadata-only audit log by @eyelock in #29
  • feat: memory is personal by default; a hosted store stores a new memory only when sharing is chosen by @eyelock in #30
  • feat: mount a hosted ynm over MCP: one local ynm with personal memory and the team's store by @eyelock in #31
  • fix: an empty context block says "no memory yet" instead of a bare heading by @eyelock in #34
  • fix: tutorial 10's Docker steps run from the tutorial evals, with YNM_REPO naming the checkout by @eyelock in #35
  • fix: make install warns from a worktree, and the dev launcher says how to recover when its checkout is gone by @eyelock in #38
  • ci: a release cannot merge if its frozen evals regressed against the previous release by @eyelock in #39
  • fix: a capped dream run judges each pair at its first owner's turn, so it finds duplicates again by @eyelock in #40
  • release: 0.2.0 by @eyelock in #41

New Contributors

Full Changelog: v0.1.1...v0.2.0

v0.1.1

Choose a tag to compare

@github-actions github-actions released this 30 Sep 08:28
  • Standalone single-executable binaries and a slim bundle replace the Node-dependent tarball;
    two Homebrew formulae (ynm, ynm-slim); make is the developer front door; fixes from the
    documentation pass: git push exits 0 after the hook syncs, wiki ingest re-derives summaries,
    working memory defaults its TTL, sync without a remote reports it, input validation exits 2,
    descriptions and defaults everywhere; ynm client status detects ynh.

Install: see https://eyelock.github.io/ynm/#/how-to/install (Homebrew ynm standalone or ynm-slim, direct download, Docker).

Full Changelog: v0.1.0...v0.1.1

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 30 Sep 07:00