English · Français
Projects Long threads Continuity Private Memory Local-first
NiakGPT keeps the ChatGPT experience you already know — and adds the organization, resilience and continuity power users keep missing.
Why NiakGPT? · Features · Private Memory · Install · Architecture · Testing
NiakGPT is a power workspace layer for ChatGPT.
It is built for the moment when a few chats turn into dozens of Projects, conversations grow into thousands of messages, context has to survive across threads, and the native sidebar stops being enough.
NiakGPT does not replace ChatGPT. It extends it carefully: better Project navigation, long-thread ergonomics, continuity tools, local diagnostics and an optional private Project Memory — while keeping the native ChatGPT flow in control.
Important
NiakGPT is local-first. No NiakGPT account, analytics service or NiakGPT cloud is required. Optional Project Memory writes only to a private GitHub repository selected by the user.
ChatGPT is excellent at the conversation itself. NiakGPT focuses on everything around it that becomes painful when the work gets bigger.
| What NiakGPT changes | |
|---|---|
| 📁 Projects that scale | Browse Projects and their conversations directly from the sidebar, search locally and keep navigation stable through SPA changes and React remounts. |
| 🧵 Long-thread control | Reduce non-essential work on heavy conversations and keep navigation, outline and status usable when a thread becomes huge. |
| 🔁 Continuity | Carry work forward when a task spans several turns or a conversation reaches its limit, without throwing away the user's current draft. |
| 🧠 Private Project Memory | Optionally archive Project conversations and compact continuity state in a user-owned private GitHub repository. |
| ⚡ Fast navigation | Quick Open, breadcrumb navigation, current-thread outline and Project-aware route handling. |
| 🛡️ Native-first stability | NiakGPT is designed to yield to ChatGPT instead of fighting it: bounded observers, explicit ownership and fail-safe degradation. |
| 🔒 Local-first privacy | No NiakGPT telemetry, no analytics SDK, no advertising layer and no mandatory backend. |
Tip
The goal is simple: keep ChatGPT feeling like ChatGPT, but make it usable as a real long-term workspace.
NiakGPT turns the left sidebar into something closer to a real project navigator:
- expand a Project and browse its conversations in place;
- search locally inside large Project histories;
- keep current chat, dates, counts and attention state visible;
- preserve order, focus and scroll through route changes and rerenders;
- keep manual organization authoritative over automatic classification.
Heavy threads should not make the whole workspace feel heavy. NiakGPT progressively reduces non-essential work, keeps status surfaces compact and uses bounded/event-driven updates instead of permanent whole-document polling.
NiakGPT distinguishes parallel additions, long-running task recovery and conversation-limit handoff. When ChatGPT requires a new thread, NiakGPT can carry a compact continuity capsule forward and keep the Project relationship intact.
Project Memory is optional and disabled by default. When enabled, NiakGPT can persist full conversation archives and compact Project state in a private GitHub repository you choose. The full archive stays there; normal prompts receive only bounded continuity context when needed.
NiakGPT deliberately avoids becoming a second application wrapped around ChatGPT. UI surfaces are compact, native-first and removable; the architecture separates ownership so multiple modules do not compete for the same DOM or state.
0.9.124 focus: Project Memory now converges cleanly when the server inventory and local cache disagree. Stable inventory gaps stop re-queuing forever, quarantined conversations no longer hold the automatic pass below 100%, and the regression is covered by Chromium release gates.
0.9.113 restores the last field-proven startup boundary instead of adding another React-internal heuristic. NiakGPT styles are again declared by the manifest at document_start, exactly as in 0.9.81–0.9.103, while all JavaScript remains at document_idle.
The boot gate waits for the ChatGPT shell, stable nav/main/composer identities, a 1.2 s quiet window, two bounded idle scheduler turns, frames, and a final host-identity stability check. It does not inspect __reactContainer$…, __reactFiber$…, HostRoot state or isDehydrated, and the service worker no longer owns deferred CSS injection. A real unpacked-MV3 regression now verifies that the rail loads after late MessageChannel host replacements without manufacturing any private React markers.
- complete Project catalogue inside the verified native left sidebar;
- expandable Project rows with their conversations directly underneath;
- clicking a Project name opens/closes its drawer instead of unexpectedly navigating away;
- stable order, DOM identity, focus and scroll across cache refreshes, React remounts, SPA navigation and BFCache restores;
- direct-once Pins mounting: when ChatGPT replaces the sidebar or reveals a better native slot after late hydration, the old NiakGPT node is retired in place and a fresh block is mounted directly in the authoritative location instead of moving a live node between React branches;
- placement is anchored below ChatGPT's visible primary navigation; hidden/inert native Project surfaces or Project containers located above the primary controls cannot pull the NiakGPT catalogue to the top of the sidebar;
- current conversation, dates, counts and attention state kept visible;
- local search for large Projects;
- Project/chat action menus kept outside sidebar clipping and usable with mouse or keyboard;
- manual moves and continuity locks take priority over automatic classification.
NiakGPT deliberately separates responsibilities:
sidebar-projects-authority-v112.jsowns native Projects visibility;sidebar-projects-v121.jsowns the NiakGPT catalogue and placement;ux-v131.jsverifies the real sidebar and applies final UX/hit-testing guards.
This avoids multiple modules fighting over the same surface.
- Alt+K — Quick Open for Projects and conversations;
- canonical Home → Project → conversation breadcrumb;
- current-thread outline;
- compact local status;
- Project-aware navigation across ChatGPT route changes.
NiakGPT reduces non-essential work when conversations become large:
- cold-history containment and incremental rendering helpers;
- reduced decoration during heavy activity;
- event-driven updates instead of permanent whole-document polling;
- Safe Mode to disable non-essential surfaces quickly;
- load guards that back off when native ChatGPT content is not ready.
NiakGPT does not globally replace window.fetch. The MAIN-world surface is intentionally limited to page-bridge.js.
NiakGPT distinguishes three different cases instead of treating every continuation the same way:
- Parallel addition — a message sent while work is already active can receive the compact
↳ Suite en parallèlemarker so it complements the current task. - Long-run recovery — after the bounded watchdog window (currently 6 min 30), NiakGPT may send a short
↻ Reprise NiakGPTturn only when a real Send control is available and the composer is safe to use. - Conversation-limit continuity — when ChatGPT requires a new thread, NiakGPT can carry the continuity capsule into the new conversation and preserve the exact Project relationship when known.
User text always wins: modified drafts are never erased merely because they still contain a NiakGPT marker.
Since 0.9.83, NiakGPT can attach a user-selected private GitHub repository to Project continuity from the Control Center, with a normal Sign in with GitHub flow and repository picker.
- connection is explicit and disabled by default;
- the GitHub App manifest starter opens in a normal extension tab and returns through the exact HTTPS
chromiumapp.orgcallback;launchWebAuthFlowis used only with HTTP(S) GitHub URLs; - the normal path is Sign in with GitHub → GitHub permission screen → repository selection; no PAT copy/paste is required;
- NiakGPT creates a private, per-browser-profile GitHub App through GitHub's manifest flow, with only Contents: write and Metadata: read;
- GitHub's own installation screen controls which repositories are accessible; the NiakGPT picker lists only authorized private, non-archived repositories;
- a newly created zero-commit private repository is initialized automatically on first connection;
- the selected repository is verified as private before initialization and again before reads/writes;
- first connection creates a persistent bootstrap queue immediately; a WORKER tab owns the actual sync and can resume it after tab-role changes, hides, reloads or a later browser session;
- a connected vault with no recorded successful sync automatically recreates that queue on 0.9.83 startup, so an already-initialized repository does not require reconnecting GitHub;
- the Control Center shows queued Projects, last sync and sync errors instead of reporting a bare “connected” state;
- Project description/instructions, conversation history snapshots, task/decision/architecture signals and a compact
PROJECT_STATE.mdcheckpoint are stored under a dedicated memory root; - after bootstrap, only conversations whose update timestamp changed are reread;
- full history remains in GitHub and is not injected into every prompt;
- on a new Project thread, NiakGPT can prepend the bounded compact checkpoint once to the first user message;
- sync pauses while ChatGPT is generating, waiting, executing or showing a verification state, and an interrupted sync queue can resume later.
The public niakw/NiakGPT repository is never used as a user-memory destination and its GitHub Actions never receive the vault name or credentials. GitHub App credentials and refresh material stay in the local browser profile. A fine-grained PAT remains available only as an advanced fallback for environments where GitHub App installation is restricted.
The v131 UX layer removes the old “second application around ChatGPT” feeling:
- no permanent right-side layout reservation;
- right tools are a small reveal-on-demand dock;
- the full-width status bar is replaced by a passive capsule;
- the prompt coach is opt-in and compact;
- home/utility surfaces hide non-essential NiakGPT chrome;
- focus-visible and reduced-motion behavior are part of the contract;
- selecting/copying text from the live Diagnostic panel no longer loses the browser selection when metrics update; refresh resumes after the selection is released.
NiakGPT's core remains local-first. Version 0.9.83 declares:
storage
scripting
identity
https://chatgpt.com/*
https://api.github.com/*
https://github.com/login/*
https://lopeiincnbjihmoahcbogokeniojgobk.chromiumapp.org/*
There is no NiakGPT telemetry, advertising SDK, analytics endpoint or NiakGPT cloud account. GitHub endpoints are used only after an explicit Project Memory connection action. The identity permission drives the interactive GitHub authorization window; github.com/login/* is limited to OAuth token exchange, and the exact chromiumapp.org host is only the extension's HTTPS callback. No broad tabs permission is requested. Preferences, indexes, governance and recovery state remain local, while the optional memory repository is controlled by the user.
See Privacy and Security for the exact data, token and network model.
- Download or clone this repository.
- Open
chrome://extensionsin Chrome, Brave or another compatible Chromium browser. - Enable Developer mode.
- Choose Load unpacked.
- Select the repository root containing
manifest.json. - Reload any ChatGPT tabs that were already open.
The packaging script builds a clean extension ZIP from the runtime declared by the manifest and background injector:
node tools/package-extension.mjsDevelopment labs, historical runtime and test artifacts are excluded from the installable ZIP.
| Action | Shortcut |
|---|---|
| Quick Open | Alt+K |
| Local prompt optimizer | Alt+P |
| Control Center | Alt+, |
NiakGPT is a Manifest V3 extension with a deliberately small privilege surface.
- MAIN world:
page-bridge.jsonly. - Isolated world: cache, metadata, governance, classification, sidebar, navigation, continuity, UI and diagnostics.
- Hydration barrier: all
document_startpre-runtime modules wait for the host-hydrated signal before observers, timers or DOM mutation. - Boot barrier: metadata sanitation completes before downstream cache consumers.
- Projects: one visibility authority, one catalogue/placement owner, one final UX guard.
- Multi-tab: WORKER/CLIENT coordination via local browser primitives.
- Recovery: bounded native recovery paths; no challenge bypass and no automatic page reload loop.
- Project Memory: optional post-core runtime; backend/content-script failures cannot block Projects, Pins or their action menus. Private-repository verification is mandatory and normal prompt flow uses only a compact checkpoint.
For the runtime order, ownership invariants and failure model, read ARCHITECTURE.md.
NiakGPT treats evidence levels explicitly:
- static/runtime/package invariants;
- deterministic browser fixtures in Chromium, Firefox and WebKit;
- real MV3 extension loaded in browser processes against controlled ChatGPT-shaped fixtures;
- authenticated live ChatGPT evidence only when a real authenticated session is actually used.
The CI matrix includes Linux, Windows and macOS coverage, Chromium/Firefox/WebKit experience gates, real MV3 Chromium runs, focused continuity/recovery tests and a macOS Brave stable gate.
A fixture passing does not override a contradictory real user screenshot. See TESTING_TRUTH.md and the Visual Lab.
- installable packages are assembled from declared runtime files only;
- obsolete runtime is forbidden from leaking into release ZIPs;
- repository hygiene rejects generated junk and unreferenced top-level runtime files;
- historical regression labs are intentionally retained;
- GitHub Actions history is purged automatically once a week while keeping a short recent diagnostic window.
| Document | Purpose |
|---|---|
| README.fr.md | French README |
| ARCHITECTURE.md | Runtime architecture and ownership invariants |
| CHANGELOG.md | Detailed release history |
| RELEASE_NOTES_0.9.124.md | Current release summary |
| TROUBLESHOOTING.md | Diagnosis and recovery |
| PRIVACY.md | Local data and network behavior |
| SECURITY.md | Security model and reporting |
| CONTRIBUTING.md | Contribution rules |
| TESTING_TRUTH.md | What each test level actually proves |
NiakGPT depends on the ChatGPT web UI and on a bounded set of internal web endpoints used by that UI. Those surfaces can change without notice. The project therefore favors safe degradation, explicit ownership and reproducible regressions over broad DOM interception.
NiakGPT is an independent community project and is not affiliated with or endorsed by OpenAI.
NiakGPT is licensed under the GNU General Public License v3.0 (GPL-3.0). See LICENSE.