Skip to content

Instantly share code, notes, and snippets.

View possibilities's full-sized avatar

Mike Bannister possibilities

  • AI Life
  • Portland East
  • 23:14 (UTC -04:00)
View GitHub Profile
@possibilities
possibilities / qmd-benchmark-after-20260320T070514Z.yaml
Created March 20, 2026 07:06
QMD Search Engine Upgrade Report: embeddinggemma-300M -> Qwen3-Embedding-0.6B
label: after
timestamp: 20260320T070514Z
host: artbird.taile9945f.ts.net
query_count: 13
error_count: 0
queries:
- category: keyword
label: click group commands
endpoint: search
latency_ms: 484
@possibilities
possibilities / qmd-benchmark-after-20260320T065406Z.yaml
Created March 20, 2026 06:55
QMD Embedding Model Upgrade Report (2026-03-20)
label: after
timestamp: 20260320T065406Z
host: artbird.taile9945f.ts.net
query_count: 13
error_count: 3
queries:
- category: keyword
label: click group commands
endpoint: search
latency_ms: 383
@possibilities
possibilities / original-plan.md
Created March 20, 2026 01:09
Original (wrong) plan: Fix QMD content-topics sync via GitHub deploy key

Fix QMD content-topics collection sync on artbird

Context

qmdctl-watch-collections on artbird calls qmd update which runs git operations against GitHub for the content-topics collection. The artbird user's SSH key is missing or not registered as a deploy key, causing git@github.com: Permission denied (publickey). Syncthing is also retrying failed deletes in the same folder - a secondary symptom that should resolve once sync recovers.

Plan

All steps are remote ops via SSH to artbird. No code changes.

@possibilities
possibilities / syncthing-folders-plan.md
Created March 19, 2026 23:45
Plan: Ingest Claude Session Markdown into qmd on Artbird

Ingest Claude Session Markdown into qmd on Artbird

Context

On greybird, claudectl sync-sessions chunks session markdown, embeds it via vectorctl, and stores in ChromaDB for semantic search. Separately, claudectl mirror-sessions renders sessions to ~/code/content/sessions/ as plain markdown files. Two other content directories (content/links, content/topics) already sync to artbird via Syncthing and get indexed by qmd. Sessions are the missing piece — the markdown exists, it just isn't syncing or indexed.

Plan

Step 1: Create qmd.yaml in sessions directory

@possibilities
possibilities / chromadb-to-qmd-migration-plan.md
Created March 18, 2026 19:03
ChromaDB → QMD Migration: Meta Plan

ChromaDB → QMD Migration: Meta Plan

Executive Summary

The arthack codebase has a centralized vector daemon (vectorctl) that manages all ChromaDB operations via ZMQ IPC. Two major consumers — knowctl and claudectl — delegate all embedding, ingestion, and search through this daemon. The QMD server on artbird is a completely different system: a Bun/TypeScript search engine (@tobilu/qmd) with BM25 + vector + HyDE search, file-based collections, and its own GGUF embedding model. knowctl still uses vectorctl's ChromaDB backend for embeddings and search. The migration means replacing the vectorctl daemon + local ChromaDB stack with QMD as the universal search backend.


Current Architecture

Manifest Description Audit

Goal: Every project should have a description in its pyproject.toml or package.json so choosectl list-project-descriptions returns real descriptions instead of CLAUDE.md fallbacks.


Executive Summary

10 projects across ~/code/ and ~/experiment/ have manifest files but are missing proper descriptions. 3 have no description field at all in pyproject.toml, 4 have the placeholder "Add your description here", and 3 package.json projects are missing the field entirely. Many other directories (banking, dotfiles, email, etc.) have no manifest file and are out of scope.

@possibilities
possibilities / codectl-agent-transcript.yaml
Created March 16, 2026 20:33
codectl agent transcript (file selection) — raw session a23a7fd6
- type: queue-operation
operation: enqueue
timestamp: '2026-03-16T20:32:05.258Z'
sessionId: a23a7fd6-46c0-4c4c-bddd-1d7ada3546f7
content: "Task: add a new CLI flag\n\nBudget: 24000 tokens\n\n<FileTree>\n<FileTree>\ncodectl/\n __init__.py\n api.py\n\
\ bands.py\n cli.py\n context.py\n formatting.py\n git_context.py\n ignore.py\n kit_adapter.py\n probe.py\n selection.py\n\
tests/\n __init__.py\n test_api.py\n test_bands.py\n test_context.py\n test_formatting.py\n test_git_context.py\n\
\ test_ignore.py\n test_kit_adapter.py\n test_probe.py\n test_selection.py\n.gitignore\n.pre-commit-config.yaml\n\
README.md\ncodectl-v1.md\npyproject.toml\nuv.lock\nv1-epic-brief.md\nv1-epic.md\n</FileTree>\n</FileTree>\n\n<Outline>\n\
<Outline>\ntests/test_ignore.py:\n - def _clear_lru_cache():\n - class TestLoadPatterns:\n - def test_reads_patterns(self,\
{
"description": "contextctl hooks — inject codebase context via codectl",
"hooks": {
"SessionStart": [
{
"matcher": "startup",
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/session-start.py"
},
{
"matcher": "clear",
@possibilities
possibilities / gist-capture_env.md
Created March 16, 2026 06:22
claudehooks config schema — items 8-13 (no changes needed)

capture_env — current config

capture_env:
  - TMUX_PANE
  - CLAUDECODE
  - ARTHACK_TMUX_SESSION_ID

Simple list of strings. Already fine — no migration needed.

@possibilities
possibilities / assistctl-classifier-prompt.md
Created March 14, 2026 23:51
assistctl classifier prompt (generated 2026-03-14)

assistctl classifier prompt

Generated 2026-03-14 19:51 EDT with example message: "remind me to check the deploy tomorrow at 3pm"

System Prompt

You are a command router. Given a user message and a list of available bot commands, determine which command (if any) the user wants to execute, and extract the required arguments from the message.

Evaluate commands in the order listed. If a message could match multiple commands, pick the first match — earlier commands take priority.