Skip to content

Releases: iblameandrew/open-deepthink

0.1.12 — Skill code entrypoints for QNN + QDAD

Choose a tag to compare

@iblameandrew iblameandrew released this 23 Jul 17:11

Skills run real code

Portable /qnn and /qdad skills now point harnesses at executable pipelines with a full parameter contract.

Library APIs

  • deepthink.qnn.run_qnn_pipeline(llm, prompt, params=…) — topology, seeds, span, epochs, self-attention, Mirror Descent, Solution-Space Report
  • deepthink.qdad.run_qdad_pipeline(llm, params=…, user_prompt=…) — App Slot Machine / Qualitative Diffusion LangGraph engine

Skill package (each zip)

  • SKILL.md — procedure + Run the code section
  • CODE_REFERENCE.md — params, Python API, return shape
  • run_qnn.py / run_qdad.py — CLI for shells
  • INSTALL.md

Examples

export OPEN_DEEPTHINK_ROOT=/path/to/open-deepthink
python skills/qnn/run_qnn.py --prompt "explore this deadlock" --qnn-mode auto
python skills/qdad/run_qdad.py --prompt "cozy night writing app…" --n 3 --denoising-steps 2

Assets: qnn-skill-0.1.12.zip, qdad-skill-0.1.12.zip

0.1.11 — Qualitative Self-Attention in Brainstorm

Choose a tag to compare

@iblameandrew iblameandrew released this 23 Jul 16:26

Qualitative Self-Attention in Brainstorm

Brainstorm QNN neurons no longer only see graph neighbors (the previous layer). Each forward pass runs a colony-style self-attention step over past / non-local neurons.

How it works

  1. Collect candidates: earlier non-adjacent layers this epoch + other agents' multi-epoch memory
  2. Heuristic pair score (shared persona/content lexicon → strength + distance buckets)
  3. Top-k edges inject an attended-value block into the agent prompt
  4. Store edges in state['attention_edges']; log as [QNN ATTEND]

Inspired by colony Qualitative Self-Attention (AttentionAgent / Social Playbook).

Files

  • deepthink/self_attention.py
  • app.py brainstorm agent forward path
  • tests/phase_self_attention.py
  • README + RELEASE_NOTES

See RELEASE_NOTES.md for full detail.

0.1.10 — Vortex side panels + Slot Machine debug mode

Choose a tag to compare

@iblameandrew iblameandrew released this 23 Jul 16:11

Diffusion Vortex side panels

Canvas whirlpool (from spirits VortexAnimation) now lives as a side panel next to chat — not fullscreen.

  • App Slot Machine and Brainstorm each get a Diffusion Vortex panel
  • Spins when a run starts; idle placeholder when quiet
  • Shared mode-workspace layout (panel + chat)

App Slot Machine simulation / debug mode

  • Simulation Mode runs the full QDAD pipeline with CoderMockLLM
  • No OpenRouter API key required in debug
  • Fixed foundation / noise / critic / synthesizer mock matchers

Files

  • js/components/vortex-animation.js
  • css/theme.css · index.html · app.py
  • Tests in phase7_mocks / phase11_regression

See RELEASE_NOTES.md for full detail.

0.1.9 — Portable /qdad skill (Qualitative Diffusion)

Choose a tag to compare

@iblameandrew iblameandrew released this 20 Jul 22:36

Portable /qdad skill

Qualitative Diffusion is now a drop-in skill for Grok Build and any agentic coder — no open-deepthink server required.

Technique (analysis embedded in the skill)

Classical diffusion Qualitative Diffusion
Continuous noise High-temperature qualitative noise
Denoiser Critic agents (reverse diffusion / score matching)
Latent basis Nouns × verbs (orthogonal language basis)
Caption → image App vibe → App Build Prompt

Procedure: foundation → grid → noise → denoise⟲ → synthesize → handoff

Install (Grok Build)

mkdir -p ~/.grok/skills/qdad
cp skills/qdad/SKILL.md ~/.grok/skills/qdad/SKILL.md
# or:
unzip qdad-skill-0.1.9.zip -d ~/.grok/skills
/qdad a cozy productivity app for writers who work at night, soft dark mode, offline-first

Assets

  • qdad-skill-0.1.9.zip — new
  • qnn-skill-0.1.9.zip — repackaged companion

Also in repo

  • App Slot Machine Mode UI + deepthink/qdad/ LangGraph engine (0.1.8)
  • Full skill bodies: skills/qdad/, skills/qnn/

See README sections Qualitative Diffusion and Portable Skills.

0.1.8 — Qualitative Diffusion (App Slot Machine Mode)

Choose a tag to compare

@iblameandrew iblameandrew released this 20 Jul 22:32

Qualitative Diffusion (QDAD)

Diffusion, re-implemented at a purely qualitative scale.

Algorithm Design Mode is replaced by App Slot Machine Mode — the Qualitative Diffusion App Designer.

Technique

Classical diffusion Qualitative Diffusion
Continuous noise Controlled qualitative noise at high temperature
Denoising network Critic agents (reverse diffusion / score matching)
Latent basis Nouns × verbs as orthogonal basis directions
Image from a prompt Buildable agentic coding prompt from an aesthetic app prompt

Pipeline (LangGraph)

foundation → grid → noise → denoise⟲ → synthesize

  1. Foundation — N nouns + N verbs (shared qualitative basis)
  2. Grid — N×N FeatureAgents bound to noun[i] × verb[j]
  3. Forward diffusion — parallel noisy features at Temperature Scale
  4. Reverse diffusion — CriticAgents clean the matrix over Denoising Steps
  5. Decode — Synthesizer emits a structured App Build Prompt + transparent matrix

Philosophy

  • Language is the computational medium
  • Nouns and verbs act as orthogonal basis directions
  • High temperature = controlled qualitative noise
  • Critic agents = qualitative reverse diffusion / score matching
  • Vague Midjourney-style prompt → concrete, buildable app specification

Package

  • deepthink/qdad/ — state, nodes, graph, pipeline, utils
  • deepthink/chains/qdad_chains.py
  • Brainstorming-identical frontend shell + QDAD controls (N, temps, steps)
  • Tests: tests/phase_qdad.py

See README section New in 0.1.8 — Qualitative Diffusion and RELEASE_NOTES.md.

0.1.7 — QNN skill: verb/noun problem-space spanning

Choose a tag to compare

@iblameandrew iblameandrew released this 09 Jul 17:17

Tagline: QNN skill + brainstorm panel — personas span from problem-space verbs and nouns (same method as Algorithm Mode)

Skill rewrite (import this zip)

Personas are not flat expert labels. They use Algorithm Mode DNA:

  1. Seed a pool of linguistically loaded verbs + nouns (problem-related + far semantic fields)
  2. Sample per-column guiding_words word-vectors
  3. Input-span career / attributes / skills from those words
  4. Layered epochs → epoch maps → Mirror Descent → reframe → Solution-Space Report

Install

Download qnn-skill-0.1.7.zip below:

unzip qnn-skill-0.1.7.zip -d ~/.grok/skills
# Windows PowerShell:
# Expand-Archive qnn-skill-0.1.7.zip -DestinationPath C:\Users\def78\.grok\skills -Force

Or from the repo:

cp skills/qnn/SKILL.md ~/.grok/skills/qnn/SKILL.md

Also in this release

  • Brainstorm expert panel runs the full QNN deepthink algorithm (layered forward pass fixed, epoch maps, reframe)
  • Algorithm seed generation mixes nouns with verbs

Docs

0.1.6 — Portable /qnn skill for agentic coders

Choose a tag to compare

@iblameandrew iblameandrew released this 09 Jul 16:47

Tagline: Portable /qnn skill — import anytime an agentic coder is stuck or a feature needs wider depth

What's new

Portable QNN skill

Ship an agent-agnostic Qualitative Neural Network brainstorm procedure as a drop-in skill for any coding agent (Grok, Claude Code, Cursor, Codex, custom harnesses).

Use it when:

  • You're stuck — deadlock, race, perf cliff, circular local fixes
  • A feature needs wider depth — richer metrics, APIs, UX options, research framing

What it does:

  1. Builds an unstick or enrich brief
  2. Picks topology (auto or manual L×W×epochs)
  3. Seeds guiding concepts and materializes layered personas
  4. Runs multi-epoch forward passes with Mirror Descent + reframing
  5. Delivers a Solution-Space Report (strategies + falsifiers + first probes)
  6. Hands off to the normal edit → run → debug loop — does not ship the patch itself

Install from this release

Download qnn-skill-0.1.6.zip below, then:

unzip qnn-skill-0.1.6.zip -d ~/.grok/skills
# Windows: Expand-Archive qnn-skill-0.1.6.zip -DestinationPath C:\Users\def78\.grok\skills

Or from the repo:

mkdir -p ~/.grok/skills/qnn
cp skills/qnn/SKILL.md ~/.grok/skills/qnn/SKILL.md

Then invoke:

/qnn explore this deadlock / performance regression
/qnn richer metrics for the training dashboard

Docs

v0.1.5 — Attach entire repositories as context

Choose a tag to compare

@iblameandrew iblameandrew released this 05 Jul 21:53

Attach entire local project folders as human input in Brainstorming and Algorithm Design modes. Skips vendor/build/cache paths, prioritizes README and entry files, preserves relative paths, and caps context at 50k chars.

0.1.4 — Unified Flux UI theme

Choose a tag to compare

@iblameandrew iblameandrew released this 18 Jun 00:22

Unified Flux UI theme — app chrome adapts to NodeChat

Tagline: The rest of the app now matches the NodeChat aesthetic. The chat component itself is unchanged.

Features

  • *New \css/theme.css* — glass surfaces, purple/cyan accents, pill controls, and dark luxury styling aligned with NodeChat
  • NodeChat left untouched — \css/node-chat.css\ and \js/components/node-chat.js\ are unchanged
  • Isolated chat mounts — brainstorm and diagnostic chat use transparent .section--chat-mount\ frames
  • Updated surfaces — settings, mode tabs, forms, attachments, memory estimator, logs, graph viewer, distillation console, perplexity chart
  • Scoped form styles — global inputs/buttons exclude .node-chat\ internals

Files changed

  • \css/theme.css\ (new)
  • \index.html\
  • \js/components/memory-calculator.js\
  • \deepthink/init.py\ (version bump)

Full details in RELEASE_NOTES.md.

v0.1.3 — Code file attachments

Choose a tag to compare

@iblameandrew iblameandrew released this 16 Jun 21:28

Release Notes — 0.1.3

Tag: 0.1.3
Date: 2026-06-16
Tagline: "Attach source code files as context in Brainstorming and Algorithm Design"

✨ Features

Code file attachments

  • Brainstorming — New Attach Code button alongside PDF attachments, plus a paperclip button in the NodeChat input bar. Supports .py, .js, .ts, .java, .go, .rs, and 30+ other text/code extensions.
  • Algorithm Design — Attach code files above the prompt; their contents are injected into the graph run as context.
  • Backend — New POST /upload_code_files endpoint reads uploaded source files (UTF-8 with fallback), caps total context at 50k chars, and returns fenced code blocks for the LLM.

Files

  • app.py/upload_code_files endpoint; algorithm mode merges attached code into prompt
  • index.html — attachment UI for both modes
  • js/components/node-chat.js — paperclip attach button in chat input
  • css/node-chat.css — attach button styles

Release Notes — 0.1.2

Tag: 0.1.2
Date: 2026-06-15
Tagline: "Unlimited QNN dimensions with a live memory estimator for 8 GB laptops"

✨ Features

Unlimited agent spanning (width × height)

  • Algorithm Design — CoT trace depth is no longer capped at 32. New
    Manual width (unlimited) mode lets you set any number of agents per
    layer; MBTI archetypes cycle when width exceeds the checkbox count.
  • Brainstorming — Manual/Massive topology layers and width inputs no longer
    cap at 10,000. Backend accepts any positive integer the user enters.

QNN Memory Estimator

A live calculator panel in both Algorithm Design and Brainstorming
modes shows:

  • Total agents (width × height) and estimated total state size in MB/GB
  • Per-agent RAM at the selected epoch count
  • 8 GB laptop fit check with headroom / overflow warning and a suggested
    max agent count
  • Expandable single-agent growth table (epochs 1–10) as an educated guess
    based on runtime constants: ~30 KB persona, ~5–8 KB/epoch memory append,
    ~450 KB summarization cap per agent

Users can adjust the laptop RAM input (default 8 GB); local LlamaCpp reserves
~1.5 GB for the model automatically.

Files

  • js/components/memory-calculator.js — estimator module
  • index.html — calculator UI, unlimited dimension inputs, algorithm manual width toggle
  • app.py — removed 10k backend caps; algorithm manual width with MBTI cycling

Release Notes — 0.1.1

Tag: 0.1.1
Date: 2026-06-10
Tagline: "Perplexity chart no longer accumulates duplicate points across anchors / modes"

🐛 Bug Fixes

Perplexity chart accumulation (BUG-12)

The "Average Perplexity per Epoch" chart could keep adding duplicate data points
every time a new run (or new anchor within a multi-anchor distillation) emitted
a perplexity value, because the frontend blindly pushed onto a parallel-arrays
state and the chart instance was destroy()-and-recreated on every update.
Compounding the issue:

  1. The distillation loop creates a fresh DistillationGraph per anchor, so
    each anchor's epochs_run counter reset to 1. The frontend received the
    same epoch label (e.g. epoch=1) from multiple anchors and treated each
    one as a new data point.
  2. The main-graph calculate_metrics_node (used by both Algorithm and
    Brainstorming modes) was broadcasting {"epoch": ..., "perplexity": ...}
    as a bare JSON, but the frontend SSE filter only routed distillation_update
    events to the chart, so algorithm/brainstorm perplexity was silently dropped.
  3. The chart code itself was a destroy() + new Chart(...) anti-pattern
    that flickered on every update, and the labels variable was misspelled
    (allLbelsData) — a footgun for future fixes.

Fix

  • Backend (app.py):

    • calculate_metrics_node now broadcasts a typed
      {"type": "perplexity_update", "source": "graph", "session_id": ..., "epoch": ..., "perplexity": ...}
      event so algorithm and brainstorm runs feed the chart.
    • The distillation loop now tracks a cumulative_step counter that
      strictly increases across both epochs and anchors, and includes it in
      the distillation_update payload as step.
  • Frontend (index.html):

    • Chart state rewritten from parallel arrays (allLbelsData/allPerplexityValues)
      to a single Map keyed by step, with values stored as {value, label}.
    • updatePerplexityChart(step, value, label) now replaces an existing
      entry instead of appending a duplicate.
    • renderPerplexityChart uses Chart.js v4's idiomatic
      chart.data.datasets[0].data = ...; chart.update('none') for in-place
      updates instead of destroying and recreating the chart.
    • resetPerplexityChart resets state and clears the chart on every new
      algorithm or distillation run.
    • SSE handler now recognizes the new perplexity_update event type in
      addition to distillation_update.
    • The misspelled allLbelsData is gone.
  • Tests (tests/phase11_regression.py):

    • New BUG-12a regression: directly invokes the metrics node and asserts
      the broadcast JSON includes type: "perplexity_update", source: "graph",
      session_id, and a numeric perplexity.
    • New BUG-12b regression: source-checks the distillation loop for the
      cumulative_step counter and "step": field in the broadcast.
    • New BUG-12c regression: source-checks index.html for the dedup-by-step
      contract (no legacy allLbelsData/allPerplexityValues, presence of
      perplexityByStep/resetPerplexityChart/SSE listener for
      perplexity_update) and asserts the dedup invariant against a Python
      mirror of the JS algorithm.

Verification

All previously-passing tests still pass (158/158 across phases 1–9). The
4 unrelated pre-existing failures in phase 10/11 are due to a stale
local-deepthink path in the test file and are out of scope for this
release.


Release Notes — 0.1.0

Tag: 0.1.0
Date: 2026-06-06
Tagline: "Official release out of beta"

This marks the first official non-beta release of open-deepthink. The core QNN engine, Mirror Descent loops, three operating modes, export/import, and full test suite are considered stable.

See the new "Future Directions" section in the README for thoughts on integrating QNN-style evolutionary exploration into practical coding agent workflows (e.g. a /qnn command for large-scale structured brainstorming on sticky problems).


Release Notes — beta-0.0.3

Tag: beta-0.0.3
Date: 2026-06-05
Tagline: "The hard-fought quality release — 11 bugs fixed, 195/195 tests passing"

"A week of debugging is better than a month of 'works on my machine'."

This release is the result of a complete, exhaustive test suite of the entire
codebase (11 phases × 195 checks). Every previously-known failure path was
either fixed or pinned with a regression test. No known malfunctions remain.


🐛 Bug Fixes

Critical (broke core flows)

  1. DistillationMockLLM had stale prompt patterns (app.py)
    The chains in distillation_chains.py had been rewritten ("Socratic Task
    Master…", "Seed Creator (The Dialectic Synthesizer)", "deepening our
    inquiry in a new Epoch") but the mock LLM still matched the OLD text.
    In debug mode, every distillation epoch silently failed to evolve
    topics or generate new questions. Fixed by re-aligning the patterns.

  2. CoderMockLLM hardcoded 4 sub-problems (app.py)
    The mock decomposer returned the same static 4-item list regardless of
    the requested count, so reframe_and_decompose always failed for
    non-4-agent QNNs. Fixed by reading the requested count from the prompt.

  3. Missing grandalf dependency (requirements.txt)
    graph.get_graph().draw_ascii() requires grandalf; without it, the
    entire /build_and_run_graph endpoint crashed with a confusing error.
    Added grandalf to requirements.txt.

  4. synthesis_node returned "no inputs" in brainstorm mode (app.py)
    The empty-agent_outputs check fired before the brainstorm branch,
    but brainstorm synthesis reads from memory, not agent_outputs.
    Reordered the checks so brainstorm mode can synthesize.

Medium (data/UX quality)

  1. Duplicate get_opinion_synthesizer_chain (chains/init.py)
    Two modules defined functions with the same name; the import order
    silently shadowed the synthesis version with the brainstorm version.
    Renamed the brainstorm one to get_brainstorming_opinion_synthesizer_chain.

  2. app.GraphState missing brainstorm fields (app.py)
    app.GraphState was missing brainstorm_document_context,
    brainstorm_prior_conversation, and brainstorm_problem_summary that
    the code accesses. Runtime worked because of state.get(...), but
    the type was lying. Added the fields.

  3. clean_and_parse_json couldn't repair Windows backslash paths (utils.py)
    Strings like {"path": "C:\\Users\\foo"} (single backslashes, as an
    LLM would write) were returned as None. Fixed the regex to not
    double-escape already-escaped backslash pairs (needed non-capturing
    group (?:\\) to make the lookbehind work in Python's re module).

Low (hygiene)

  1. Stray print() statements in TokenUsageTracker,
    RAPTOR._cluster_nodes, and both chat endpoints — all converted to
    log_stream.put(...) so logs flow through the SSE broadcast.

  2. Typo "Sesion" in /chat and /diagnostic_chat print statements —
    fixed to "Session" and routed through log_stream.

  3. .gitignore missed venv/, tests/, distillation_output/,
    test_results/. Updated.

  4. No __version__ or pyproject.toml — release tracking was
    impossible. Added `__vers...

Read more