announcements

Kathleen Davis 2026-01-28T18:55:56.696199Z

Hi folks - Check out the https://www.clojuriststogether.org/news/annually-funded-developers-update-november-and-december-2025/ from the 5 developers receiving annual funding from Clojurists Together in 2025 (Dragan Djuric, Eric Dallo, Michiel Borkent, Oleksandr Yakushev, and Peter Taoussanis). Toby Crawley also issued his https://www.clojuriststogether.org/news/clojars-maintenance-and-support-november/december-2025-update/ on Clojars support and maintenance.

πŸ’™ 8
9
2
Ingy dΓΆt Net 2026-01-28T19:11:31.208919Z

Some announcements I made in #yamlscript and shared in #clj-yaml https://clojurians.slack.com/archives/C05HQFMTURF/p1769627265283389

2
❀️ 2
🍠 3
πŸŽ‰ 5
2026-01-28T19:16:36.850819Z

oh shit, i never put it together that you created yaml, no wonder you're such a wiz at yaml

🀯 2
🍠 1
Ingy dΓΆt Net 2026-01-28T19:21:31.428949Z

> HEY EVERYONE!!! I CREATED YAML!!! HOLY SHIT!!! Not really my style. Maybe it should be 🀷

Ingy dΓΆt Net 2026-01-28T19:22:57.135569Z

I got some recruiter spam a while back that said I was in the top 1% of Clojure code authors in the world.

πŸ† 5
Ingy dΓΆt Net 2026-01-28T19:23:38.599119Z

If it's true, it's gotta be because I write so much bad Clojure. πŸ™‚

πŸ˜‚ 2
2026-01-28T19:23:58.156029Z

hah you have it in your profile so it's on me for not noticing before

lread 2026-01-28T19:24:13.486119Z

You mean "bad ass" Clojure, I'm sure.

Ingy dΓΆt Net 2026-01-28T19:24:22.888079Z

aww

lread 2026-01-28T19:26:06.706399Z

We were a bit red-faced in #clj-yaml... we were getting into a bit of a YAML-diss session when @ingy dropped in... you were very cool about it, Ingy! ❀️

Ingy dΓΆt Net 2026-01-28T19:26:55.873249Z

I recall that. I never even bothered to read your disses. I've seen my share.

❀️ 1
Ingy dΓΆt Net 2026-01-28T19:31:06.788149Z

btw I don't think there were any Clojure YAMLs on https://yaml.org/libraries/ Now we have 3 πŸ™‚

❀️ 1
πŸŽ‰ 2
Ingy dΓΆt Net 2026-01-28T19:37:07.654249Z

YAMLScript ships its Clojure and Java assets to Clojars. But YAMLStar ships its Java to Maven Central... That was a bit of a pain, but all sorted/automated now. I recall asking about how to do this once in #clojure and iirc we ended up realizing that (likely) of all the Clojurists here, only @alexmiller does that. Now there are 2! πŸ˜„

Ingy dΓΆt Net 2026-01-28T19:43:03.256929Z

Oh. YAMLStar works on Windows (YAMLScript doesn't yet)

Ingy dΓΆt Net 2026-01-28T19:43:18.929399Z

And also on Fortran πŸ˜„

πŸ”₯ 1
Ingy dΓΆt Net 2026-01-28T19:46:48.377329Z

Also check out this new YAML parser comparison site: https://play.yaml.com/

BuddhiLW 2026-01-28T02:14:49.227019Z

https://github.com/hive-agi/hive-mcp, release https://github.com/hive-agi/hive-mcp/releases/tag/v0.10.0 Now with Knowledge Graph support, using Datalevin to persist associations and frequent co-accessed memories. Your AI learning to learn on it's own! PS: sorry the screenshot line glitches. gshot and picom (compositor) clashing πŸ˜†

πŸ”₯ 5
Mateusz Mazurczak 2026-01-28T12:05:35.111369Z

Hi, I'm using eca-emacs and want to stay with it, I need only memory function (chroma) so that I don't have to repeat myself again and again, is there a way to setup just the memory part?

βœ… 1
BuddhiLW 2026-01-28T12:26:18.777119Z

Hello, Mateusz!

BuddhiLW 2026-01-28T12:35:29.788539Z

Yes, you could. In the docker-compose.yaml there are multiple dependencies. One of them is chroma. You could just up that one or milvus. Start an emacs session (could be deamon mode) -- you won't be using the multi-agent setup. E.g., you don't need to touch emacs if you want. Then, start hive-mcp using start-mcp.sh the start-bb-mcp.sh would need you to clone somewhere the bb-cmp (which would enable multiplexing the JVM cost down on new claude sessions). But if you are strictly using an agent, you could use start-mcp.sh as entrypoint. It's the setup where you spawn the heavy-JVM etc. I would advise cloning the bb-mcp anyway and then using:

# Required: Paths to repositories (adjust to your clone locations)
export HIVE_MCP_DIR="$HOME/projects/hive-mcp"
export BB_MCP_DIR="$HOME/projects/bb-mcp"

# Register hive-mcp as "hive" MCP server
claude mcp add hive --scope user -- \
  $HIVE_MCP_DIR/start-bb-mcp.sh
In your emacs init etc:
;;; hive-mcp minimal configuration

;; 1. Add hive-mcp to load-path (REQUIRED)
;; The order matters: elisp/ BEFORE elisp/addons/
(add-to-list 'load-path "/path/to/hive-mcp/elisp")
(add-to-list 'load-path "/path/to/hive-mcp/elisp/addons")

;; 2. Install required packages (if not present)
(unless (package-installed-p 'websocket)
  (package-refresh-contents)
  (package-install 'websocket))

;; 3. Load core module (REQUIRED)
(require 'hive-mcp)

;; 4. Enable the global minor mode (REQUIRED)
(hive-mcp-mode 1)

;; 5. Start Emacs server for emacsclient (REQUIRED)
;; Idempotent: safe to call multiple times
(unless (server-running-p)
  (server-start))
Run chroma
docker compose up chroma -d
Then, you are good to go... Just ask claude to make a memory using hive-mcp and it will do it. Even telling make a memory may already be enough, in my experience. It will find the tool in the tool registry.

BuddhiLW 2026-01-28T12:39:53.189929Z

You could also ask her, of couse, lookup memory for. When I explicitly want her to explore something, but use memory first, currently I do:

<so and so> (lookup memories)
With the knowledge graph + priming, eventually she will understand to do that, and which memories to lookup, on her on

BuddhiLW 2026-01-28T14:01:50.889069Z

Oh, I forgot. But, you either/or need to run ollama nomic-embed-text:latest model, or setup the OPENROUTER_API_KEY and use it.

When using OpenRouter, the default embedding model is qwen/qwen3-embedding-8b (4096 dimensions, 33k context, free tier).

  Supported OpenRouter Embedding Models
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚             Model              β”‚ Dimensions β”‚       Notes        β”‚
  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
  β”‚ qwen/qwen3-embedding-8b        β”‚ 4096       β”‚ Default, free tier β”‚
  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
  β”‚ openai/text-embedding-3-small  β”‚ 1536       β”‚ Paid               β”‚
  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
  β”‚ openai/text-embedding-3-large  β”‚ 3072       β”‚ Paid               β”‚
  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
  β”‚ cohere/embed-english-v3.0      β”‚ 1024       β”‚ Paid               β”‚
  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
  β”‚ cohere/embed-multilingual-v3.0 β”‚ 1024       β”‚ Paid               β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
  Configuration

  From src/hive_mcp/embeddings/openrouter.clj:110-129:

  ;; Default (uses OPENROUTER_API_KEY env var)
  (openrouter/->provider)

  ;; Explicit model
  (openrouter/->provider {:model "openai/text-embedding-3-small"})

  The API key is read from OPENROUTER_API_KEY environment variable by default.

BuddhiLW 2026-01-28T14:04:48.083269Z

I use a split solution, for memories I use nomic-embed-text:latest (4K context) and for presets (bigger sized text, in general) I use the qwen/qwen3-embedding-8b (supports up to 32K context) It's not free, btw. It's just cheap to use the embedding qwen model - the information above is inaccurate, regarding this.

BuddhiLW 2026-01-28T02:27:35.123049Z

I created #hive-mcp because I will be updating it frequently there. May even hook a way to auto-release notes on what was worked on through versions eventually. Anyone that have questions or need help setting it up. We can schedule a call and record it to share with others interested. I'm up for it. 😁

BuddhiLW 2026-01-28T02:35:20.740079Z

https://github.com/BuddhiLW/clojure-elisp first minor release https://github.com/BuddhiLW/clojure-elisp/releases/tag/v0.1.0 One of the projects I'm working, to test out hive-mcp. Eventually the Elisp parts of hive-mcp will all be implemented in clel. E.g., pure clojure syntax.

πŸš€ 3
😎 1
πŸŽ‰ 1
whilo 2026-01-28T03:58:43.271349Z

Announcing Yggdrasil - Unified Copy-on-Write Protocols for Heterogeneous Storage We're excited to introduce Yggdrasil, a protocol stack that unifies Git-like branching semantics of many storage systems - filesystems, databases, containers, ... In Norse mythology, Yggdrasil is the World Tree connecting all realms. This library connects different storage backends under one unified API. Key Features: β€’ Unified protocols - Snapshotable, Branchable, Graphable, Mergeable, Watchable β€’ 11 adapters - Git, ZFS, Btrfs, OverlayFS, Podman, Datahike, LakeFS, Dolt, Scriptum, IPFS, Apache Iceberg β€’ PSI consistency - Parallel Snapshot Isolation guarantees across systems β€’ Zero-copy branching - COW semantics on supported filesystems β€’ Compliance test suite - Verify any adapter implementation

(require '[yggdrasil.adapters.git :as git])
(require '[yggdrasil.protocols :as p])

(def sys (git/init! "/tmp/repo" {:system-name "my-project"}))

;; Git-like operations via protocols
(p/branch! sys :experiment)
(p/checkout sys :experiment)
;; ... make changes ...
(p/merge! sys :experiment)

;; Time-travel
(p/history sys {:limit 10})
(p/as-of sys "abc123")
Perfect for agent sandboxing, reproducible pipelines, or composing versioned storage across heterogeneous backends. Install:
org.replikativ/yggdrasil {:mvn/version "0.1.5"}
Links: β€’ GitHub: https://github.com/replikativ/yggdrasil β€’ Docs: See README for adapter-specific setup (ZFS, Btrfs, etc.) Works with https://github.com/replikativ/proximum and https://github.com/replikativ/scriptum for versioned vector and fulltext search. Feedback welcome! 🌱

πŸ†’ 9
πŸš€ 19
πŸŽ‰ 5
whilo 2026-01-28T03:59:42.058189Z

I am happy to discuss this in #datahike, including how to expose it through its versioning bindings.