🚀 Install

Codelux AI ships as a single signed binary: the public Free build, or one personalized for your account on Multi and Team. No Docker, no config files, no dependencies.

1. Download your binary

Free: get the public build from the download page and sign up (or sign in) inside the app on first launch. No time limit, no credit card. Multi and Team: download your personal build from the Console (My account › Downloads). Available for Windows (amd64), macOS (Apple Silicon / Intel) and Linux (amd64 / arm64).

2. Run it — install as a service (recommended)

We strongly recommend installing Codelux AI as a background service: it starts automatically with the machine, stays running so your AI can always reach it, and survives reboots. A single start is fine for a quick try, but the service is the right way to run it day to day.

Windows

# From the folder with the binary (personal builds come as a ZIP: extract it first), as Administrator: codelux.exe install-service # install + start as a Windows service (recommended) codelux.exe uninstall-service # remove the service # or just run it in the foreground for a quick try: codelux.exe start

Linux / Unix

chmod +x codelux# installs a systemd unit, enables it and starts it (may prompt for sudo): ./codelux install-service # recommended ./codelux uninstall-service # stop, disable and remove the unit # or a one-off foreground run: ./codelux start

On first launch Codelux AI validates your account, then starts the MCP + HTTP server on localhost:8766 with the web dashboard — whether you ran start or installed the service.

3. Add your project

Add your project in the app — Codelux AI indexes it on first start and keeps the index up to date with the file watcher. From that moment every memory, note, lock, commit and code_edit write on the project lands on its timeline.

4. Connect your agent

Claude Code: install the plugin — it brings the MCP server and the hooks (memory at session start, lock around edits, reminder at the end). Any other editor or agent: one line of MCP config. Codex and Gemini CLI: the plugin ships hook configuration files for both (experimental).

Privacy: memory, notes, timeline, index and the dashboard run on your machine. Routine network traffic is the licence check. Codelux AI keeps no log of your AI requests: the agent talks to the model provider you chose, not through us. Your account identity and device token are sealed to this machine so they cannot be reused elsewhere.

🔌 Claude Code plugin & hooks

The plugin connects Claude Code to the Codelux AI daemon on your machine: the MCP server with the 8 tools, three slash commands, and five hooks that make memory and the file lock happen without the model having to remember to call anything.

Install

claude plugin marketplace add codeluxai/codelux claude plugin install codelux@codelux

Or inside Claude Code: /plugin marketplace add codeluxai/codelux, then /plugin install codelux@codelux. The hooks need bash and curl (on Windows, Git Bash). If the daemon is not running every hook is silent — Claude Code works as if the plugin were not there.

The five hooks

HookWhat it doesRule
SessionStartPuts the newest project memory in context (memory_get with no parameters: the last memory plus what changed in its files since) and refreshes the Codelux AI block in AGENTS.md.Never blocks; at most 12,000 characters.
UserPromptSubmitPasses the prompt to a local memory_get query: when a codemap, a fact or a decision is relevant, adds up to three lines of context.Adds nothing when nothing is found. Local search only.
PreToolUse Edit · Write · MultiEdit · NotebookEditTakes the file lock (code_lock acquire): a per-file mutex between the agents on your machine, plus the Team lock when the project is shared.Refuses the edit only when someone else holds the file (with the holder's name and the expiry) or, on a shared project, when the realtime service is unreachable.
PostToolUse same toolsReleases the lock (code_lock release). A lock that is not released expires on its own.Never blocks.
StopReminds the model to close the session with memory_set if it has not done so.A message, never a block.
PreToolUse · PostToolUse · PostToolUseFailure every tool (.*)Procedure trace: the start (PreToolUse), the row (PostToolUse) and the failure (PostToolUseFailure) of every tool call, in the main session and in subagents: essential arguments, response size, duration, outcome. Before a Read or a Grep, rarely, one hint for the agent.Never blocks; never contents or outputs; local only.

The AGENTS.md / CLAUDE.md block

At every session start and every memory_set, Codelux AI rewrites the block between <!-- codelux:start --> and <!-- codelux:end --> in <project>/AGENTS.md (created if missing) and, when the file exists, in <project>/CLAUDE.md: status, next step, traps and recent decisions, at most 60 lines. Text outside the markers is never touched. Agents that read no hooks still read this file.

Slash commands

CommandWhat it does
/codelux:statusDaemon, plan, project and newest memory.
/codelux:memory [since] [topic]Recalls the recent work on the project: memories, timeline, open todos.
/codelux:checkpoint [topic]Writes the memory of the session (memory_set) for the next one.

Codex and Gemini CLI (experimental)

The same scripts run from any agent that supports command hooks. The plugin folder ships two ready-made files: hooks/codex.hooks.json for Codex (copy to <repo>/.codex/hooks.json) and hooks/gemini.settings.json for Gemini CLI (merge its hooks object into <repo>/.gemini/settings.json). The MCP server is the same URL for every agent. What the hooks do not carry, the AGENTS.md block does.

🤖 Set up your AI agent

Codelux AI reaches every agent through two channels: the MCP server (the tools) and the hooks (what happens without the model having to ask). Below is the complete, copyable configuration for each provider.

What the hooks give you

WhatWith hooksWithout hooks (MCP only)
Project memory In context at session start and with every prompt, with no call. Only when the agent calls memory_get or reads the AGENTS.md block.
File lock Taken before and released after every edit the agent makes with its own tools: between the agents on the machine and, on a shared project, on the Team. Only for writes made through code_edit. Two agents editing with their own tools can overwrite each other.
Author and diff in the Timeline Every edit is recorded with who made it (session and agent) and its diff. Only the edits made through code_edit appear; the ones made with the agent's own tools are not seen.
Usage One session code per conversation, the files read (path and hash, never the text), the tokens of each turn and a report at the end. Not tracked: the MCP calls only get one code per connection.
Procedure Every tool call of the main session and of its subagents: tool, essential arguments, response size, duration, outcome — in the app's Procedure view, with what could have been saved. Only the Codelux calls themselves: the agent's own reads, searches and commands are not seen.
Hooks never get in the way. If the daemon is not running they stay silent; the only thing that blocks an edit is an explicit refusal of the lock (another agent holds the file).

The whole procedure, step by step

The providers' apps must have the Codelux hooks active: the main session and its subagents send everything. With the hooks on every tool (PreToolUse + PostToolUse + PostToolUseFailure for Claude Code, PreToolUse/PostToolUse for Codex, BeforeTool/AfterTool for Gemini CLI) Codelux records one row per tool call, native or Codelux, for the session and for each subagent, under the agent's name.

What a row holds: provider, session or subagent, tool, the essential arguments (Read: file and lines; Grep/Glob: pattern, path, glob; Edit/Write: file and lines or bytes touched; Bash: the command cut to 200 characters; Agent: type and description; MCP: tool and key arguments), the size of the response in bytes and lines, the duration and the outcome. Never a file's content, an output or the text of an edit; keys, tokens and passwords in commands and arguments become [redacted]. Everything stays on your machine (the project's local store, 30 days): nothing is sent to the server, nothing goes into the Team's events.

The app's Procedure view (per project, per agent, per day) shows the sequence with times, the files read again although unchanged, the big files read whole when one symbol was enough, the share of Codelux calls, the tokens estimated per read and the rounds that could be saved, with the concrete alternative (code_context X instead of 2,000 lines). Export it as Markdown, or read it with GET /api/project/{id}/procedure?from=&to=&who=&format=md or codelux procedure <projectid>.

Hints to the running agent: only when the saving is clear, one sober line in its context ("you already read X at 10:59 (lines 1-200) and it has not changed since", "X is an indexed symbol: code_context X"), at most 2 a turn, never blocking. They can be turned off per project in the Procedure view.

Reading only what is needed: GET /api/project/{id}/read?file=&from=&to= (REST), codelux read <projectid> <file> <from> <to> (CLI) and, on MCP, code_context with name="<file>:<from>-<to>" answer the lines asked (at most 400), numbered, with the file's total, the estimated tokens and the next range; code_context name="<file>" answers the file's outline (symbols with their lines). Every Codelux read is in the same Procedure.

Cost. One short process per tool call before and after it (bash + curl; the one after runs in the background). With the daemon stopped the hooks do nothing.

At a glance

ProviderInstruction fileHooks fileMCP
Claude Code CLAUDE.md: the plugin writes the Codelux AI block in AGENTS.md and makes CLAUDE.md import it Installed plugin (hooks.json) Server codelux, brought by the plugin
Codex AGENTS.md .codex/hooks.json Codex MCP servers (~/.codex/config.toml)
Gemini CLI GEMINI.md, or contextFileName set to AGENTS.md hooks block in .gemini/settings.json mcpServers · .gemini/settings.json
Cursor Rule in .cursor/rules None .cursor/mcp.json

Before you start

  • Codelux AI is running and the project is added in the app. The MCP address is http://localhost:8766/mcp; if Codelux AI runs on another port, use yours.
  • The hooks need bash and curl; on Windows, Git Bash.
  • Codex and Gemini CLI: get the plugin folder from github.com/codeluxai/codelux and, in the files below, replace CODELUX_PLUGIN with the full path of the folder that holds scripts/. On another port, start the agent with the variable CODELUX_PORT set.

The AGENTS.md block

Every agent reads the same block between <!-- codelux:start --> and <!-- codelux:end -->: a few fixed lines saying which Codelux AI tools to use and that the memory arrives by itself or with memory_get. It carries no date and no status, so it is identical in every session and does not invalidate the provider's prompt cache. The session-start hook keeps it up to date; without hooks, run this once from the project folder:

bash "CODELUX_PLUGIN/scripts/agents-md.sh"

It creates AGENTS.md with the block when missing (and CLAUDE.md with the single line @AGENTS.md); text outside the markers is never touched. If the folder is not a project registered in Codelux AI, nothing is written.

Claude Code

Full support. The plugin brings everything: the MCP server, the hooks and the slash commands. There is nothing to copy by hand.

  1. Install the plugin:
    claude plugin marketplace add codeluxai/codelux claude plugin install codelux@codelux
    or, inside Claude Code, /plugin marketplace add codeluxai/codelux and then /plugin install codelux@codelux. On another port: claude plugin install codelux@codelux --config port=<port>, then restart Claude Code.
  2. Restart Claude Code in the project folder and type /codelux:status to check that it is connected.
  3. Instruction file: at session start the plugin writes the block in AGENTS.md and, if CLAUDE.md does not exist, creates it with one line that imports it. An existing CLAUDE.md that does not import AGENTS.md gets the block appended.
    @AGENTS.md
  4. Hooks: the file is hooks/hooks.json inside the plugin, already wired. This is the part that takes and releases the lock (the other hooks are in Claude Code plugin & hooks):
    "PreToolUse": [ { "matcher": "Edit|Write|MultiEdit|NotebookEdit", "hooks": [ { "type": "command", "command": "bash \"${CLAUDE_PLUGIN_ROOT}/scripts/edit-lock.sh\" acquire", "timeout": 10 } ] } ], "PostToolUse": [ { "matcher": "Edit|Write|MultiEdit|NotebookEdit", "hooks": [ { "type": "command", "command": "bash \"${CLAUDE_PLUGIN_ROOT}/scripts/edit-lock.sh\" release", "timeout": 10 } ] } ], "PostToolUseFailure": [ { "matcher": "Edit|Write|MultiEdit|NotebookEdit", "hooks": [ { "type": "command", "command": "bash \"${CLAUDE_PLUGIN_ROOT}/scripts/edit-lock.sh\" release-failed", "timeout": 10 } ] } ]
    And the part that sends the procedure (every tool, matcher .*):
    "PreToolUse": [ { "matcher": ".*", "hooks": [ { "type": "command", "command": "bash \"${CLAUDE_PLUGIN_ROOT}/scripts/session-track.sh\" pre", "timeout": 5 } ] } ], "PostToolUse": [ { "matcher": ".*", "hooks": [ { "type": "command", "command": "bash \"${CLAUDE_PLUGIN_ROOT}/scripts/session-track.sh\" post", "timeout": 5 } ] } ], "PostToolUseFailure": [ { "matcher": ".*", "hooks": [ { "type": "command", "command": "bash \"${CLAUDE_PLUGIN_ROOT}/scripts/session-track.sh\" post-fail", "timeout": 5 } ] } ]
  5. MCP: the plugin registers the server codelux. Without the plugin, see IDE Setup (MCP).
You get: memory at session start and with every prompt, the lock around Edit and Write, author and diff of every edit in the Timeline, usage (tokens per turn, files read, report at the end).
Without the hooks (MCP only): no automatic memory, no lock around the agent's own edits, no author on them, no usage report.

Codex

Experimental. The hooks format comes from Codex's documentation of 28/09/2026; a few fields are not confirmed (see below).

  1. Add the MCP server in Codex's configuration, ~/.codex/config.toml:
    [mcp_servers.codelux] url = "http://localhost:8766/mcp"
    This form is taken from Codex's MCP documentation and not verified by us on every version: if Codex does not list the tools, check the exact syntax there.
  2. Instruction file: AGENTS.md. The block is written by the session-start hook, or by hand with the command above.
  3. Copy this file to <project>/.codex/hooks.json (or to ~/.codex/hooks.json for every project), replacing CODELUX_PLUGIN:
    { "description": "Codelux hooks for Codex. Copy to <repo>/.codex/hooks.json (or ~/.codex/hooks.json) and replace CODELUX_PLUGIN with the absolute path of the folder that holds scripts/. Same scripts as the Claude Code plugin; plain stdout is added as context, exit 2 on acquire blocks the edit with the stderr reason. PreToolUse/PostToolUse on every tool (.*) feed the procedure trace (377). See hooks/OTHER-AGENTS.md for the fields we could not verify.", "hooks": { "SessionStart": [ { "matcher": "startup|resume|clear|compact", "hooks": [ { "type": "command", "command": "bash \"CODELUX_PLUGIN/scripts/session-start.sh\" --agent=codex", "timeout": 10, "additionalContextLimit": 12500 } ] }, { "matcher": "startup|resume|clear|compact", "hooks": [ { "type": "command", "command": "bash \"CODELUX_PLUGIN/scripts/session-track.sh\" start --agent=codex", "timeout": 5 } ] } ], "UserPromptSubmit": [ { "hooks": [ { "type": "command", "command": "bash \"CODELUX_PLUGIN/scripts/prompt-memory.sh\" --agent=codex", "timeout": 5 }, { "type": "command", "command": "bash \"CODELUX_PLUGIN/scripts/session-track.sh\" prompt --agent=codex", "timeout": 5 } ] } ], "PreToolUse": [ { "matcher": "Edit|Write|MultiEdit|apply_patch", "hooks": [ { "type": "command", "command": "bash \"CODELUX_PLUGIN/scripts/edit-lock.sh\" acquire --agent=codex", "timeout": 10 } ] }, { "matcher": ".*", "hooks": [ { "type": "command", "command": "bash \"CODELUX_PLUGIN/scripts/session-track.sh\" pre --agent=codex", "timeout": 5 } ] } ], "PostToolUse": [ { "matcher": "Edit|Write|MultiEdit|apply_patch", "hooks": [ { "type": "command", "command": "bash \"CODELUX_PLUGIN/scripts/edit-lock.sh\" release --agent=codex", "timeout": 10 } ] }, { "matcher": ".*", "hooks": [ { "type": "command", "command": "bash \"CODELUX_PLUGIN/scripts/session-track.sh\" post --agent=codex", "timeout": 5 } ] } ], "Stop": [ { "hooks": [ { "type": "command", "command": "bash \"CODELUX_PLUGIN/scripts/session-track.sh\" stop --agent=codex", "timeout": 5 } ] } ] } }
  4. Restart Codex.

Not confirmed

  • The names of the edit tools: the documentation's example is Edit|Write (file edits through apply_patch); we match Edit|Write|MultiEdit|apply_patch to be safe.
  • The field that carries the edited path for apply_patch. The script looks for file_path, notebook_path or path; if Codex sends only the patch text, the lock does nothing (it never blocks).
  • The unit of timeout (we assume seconds) and a project-folder variable (the scripts use the working directory, or CODEX_PROJECT_DIR if set).
  • Whether Codex sends a session_id to the hooks. Without it the session tracking is skipped, and the MCP calls get one code per connection.
You get: memory at session start and with every prompt; lock, author and diff for the edits Codex makes with a tool the matcher recognises; usage when the session id arrives.
Without the hooks: no automatic memory (only the AGENTS.md block and memory_get), no lock or author on Codex's own edits, no usage report.

Gemini CLI

Experimental. The hooks format comes from Gemini CLI's reference of 28/09/2026; a few fields are not confirmed (see below). Everything goes in <project>/.gemini/settings.json (or ~/.gemini/settings.json).

  1. Add the MCP server:
    { "mcpServers": { "codelux": { "httpUrl": "http://localhost:8766/mcp" } } }
    This form is taken from Gemini CLI's MCP documentation and not verified by us on every version: if the tools do not appear, check the exact syntax there.
  2. Instruction file: Gemini reads GEMINI.md, not AGENTS.md. Either point it at AGENTS.md in the same settings file, or copy the block into GEMINI.md:
    { "contextFileName": "AGENTS.md" }
    The setting is called contextFileName in our plugin notes; if your version of Gemini CLI names or nests it differently, check its settings reference.
  3. Merge this hooks object into the same file, next to the keys above, replacing CODELUX_PLUGIN. The scripts run with --json because Gemini wants only JSON on stdout:
    { "hooks": { "SessionStart": [ { "hooks": [ { "type": "command", "name": "codelux-memory", "description": "Codelux: project memory in context at session start; refreshes the AGENTS.md/GEMINI.md block", "command": "bash \"CODELUX_PLUGIN/scripts/session-start.sh\" --json --agent=gemini", "timeout": 10000 } ] }, { "hooks": [ { "type": "command", "name": "codelux-session", "description": "Codelux: session code and usage tracking (silent)", "command": "bash \"CODELUX_PLUGIN/scripts/session-track.sh\" start --agent=gemini", "timeout": 5000 } ] } ], "BeforeAgent": [ { "hooks": [ { "type": "command", "name": "codelux-prompt-memory", "description": "Codelux: relevant memory for this prompt as additionalContext (nothing when nothing is found)", "command": "bash \"CODELUX_PLUGIN/scripts/prompt-memory.sh\" --json --agent=gemini", "timeout": 5000 }, { "type": "command", "name": "codelux-session-prompt", "description": "Codelux: count the prompt; rarely one hint about the last turn", "command": "bash \"CODELUX_PLUGIN/scripts/session-track.sh\" prompt --json --agent=gemini", "timeout": 5000 } ] } ], "BeforeTool": [ { "matcher": "write_file|replace|edit", "hooks": [ { "type": "command", "name": "codelux-lock-acquire", "description": "Codelux: take the file lock (local + Team) before an edit; exit 2 with the reason when refused", "command": "bash \"CODELUX_PLUGIN/scripts/edit-lock.sh\" acquire --agent=gemini", "timeout": 10000 } ] }, { "matcher": ".*", "hooks": [ { "type": "command", "name": "codelux-session-pre", "description": "Codelux: start of every tool call for the procedure trace, file read (path+hash), MCP call announcement; rarely one hint as additionalContext", "command": "bash \"CODELUX_PLUGIN/scripts/session-track.sh\" pre --json --agent=gemini", "timeout": 5000 } ] } ], "AfterTool": [ { "matcher": "write_file|replace|edit", "hooks": [ { "type": "command", "name": "codelux-lock-release", "description": "Codelux: release the file lock after an edit", "command": "bash \"CODELUX_PLUGIN/scripts/edit-lock.sh\" release --agent=gemini", "timeout": 10000 } ] }, { "matcher": ".*", "hooks": [ { "type": "command", "name": "codelux-session-post", "description": "Codelux: one row of the procedure trace (tool, essential arguments, response size, duration; never contents)", "command": "bash \"CODELUX_PLUGIN/scripts/session-track.sh\" post --agent=gemini", "timeout": 5000 } ] } ], "AfterAgent": [ { "hooks": [ { "type": "command", "name": "codelux-session-stop", "description": "Codelux: read the new usage numbers (silent)", "command": "bash \"CODELUX_PLUGIN/scripts/session-track.sh\" stop --agent=gemini", "timeout": 5000 } ] } ], "SessionEnd": [ { "hooks": [ { "type": "command", "name": "codelux-session-end", "description": "Codelux: close the task and write the usage report (silent)", "command": "bash \"CODELUX_PLUGIN/scripts/session-track.sh\" end --agent=gemini", "timeout": 10000 } ] } ] } }
  4. Restart Gemini CLI.

Not confirmed

  • SessionStart does not list additionalContext among its fields in the reference; the script sends it anyway. If it is ignored, the block in AGENTS.md / GEMINI.md still carries the state.
  • The names of the built-in edit tools (we assume write_file, replace and edit) and the path field inside their input (file_path). If they differ, the lock does nothing and never blocks.
  • Whether Gemini sends a session_id to the hooks (same consequence as for Codex), and a project-folder variable: none is documented, the scripts use the working directory.
You get: memory at session start and with every prompt (as additionalContext); lock, author and diff for the edits made with the tools above; usage when the session id arrives.
Without the hooks: no automatic memory (only the block and memory_get), no lock or author on Gemini's own edits, no usage report.

Cursor

Cursor has no hooks: everything goes through the MCP server and a rule that tells the agent what to call.

  1. Add the server to .cursor/mcp.json in the project (or ~/.cursor/mcp.json for every project):
    { "mcpServers": { "codelux": { "url": "http://localhost:8766/mcp" } } }
  2. Create the rule .cursor/rules/codelux.mdc:
    --- description: Codelux project memory alwaysApply: true --- This project uses Codelux (MCP server "codelux"). - At the start of a task call memory_get with no arguments and continue from it. - Before relying on a name or a path, check it with code_query or code_context. - Write files through code_edit, so the file is locked against other agents and the edit lands on the Timeline with its diff. - When you finish, call memory_set once: summary, status, next, traps, decisions.
  3. Restart Cursor, or reload its MCP servers.
You get: the memory when the agent calls memory_get (the rule asks it to), notes, checks against the index; lock, author and diff in the Timeline for every file written through code_edit.
Missing, because there are no hooks: no automatic memory, no lock or author on the edits Cursor makes with its own tools, no usage tracking. When other agents work on the same project, ask Cursor to write through code_edit.

Say who you are: one name on every channel

Every agent gives itself a short codename (w375, tree-blocks) and passes it on every channel: MCP argument agent, REST agent= or X-Codelux-Agent, CLI --agent=. Codelux AI joins it to the host's own session (and subagent), so the edits seen by the hooks, the MCP calls and the REST or CLI calls are ONE row on the timeline: the name as the title, the host (Claude Code, Claude Code subagent, Codex, Gemini CLI, Cursor, REST, Other agent) beside it, the session id in the tooltip. A session that has not said its name yet shows as waiting for its name and takes it at its first call that gives it, also for what it did before. With the Claude Code plugin nothing else is needed; other hosts can pass the session too, see REST / cURL.

Check that it works

After a short session, the agent's memories, edits and locks are on the timeline with its name. Read them back over REST:

# events of the last two hours, with the agent that made each one curl "localhost:8766/api/project/myapp/memory?since=2h&agent=me" # the same through the MCP endpoint curl -X POST "localhost:8766/mcp" -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"memory_get","arguments":{"events":true,"since":"2h"}}}'
More on the calls: REST / cURL. What each event is: Timeline.

🖥 IDE Setup (MCP)

Codelux AI speaks native MCP. One config line connects it to any MCP-capable editor or agent. Without the Claude Code plugin there are no hooks: the agent reads its memory when it calls memory_get (or from the AGENTS.md block) and the lock is taken by code_edit instead of around its own editor.

Claude Code (without the plugin)

The plugin is the recommended way. By hand, add to .mcp.json in your project root (or ~/.claude.json for all projects):

{ "mcpServers": { "codelux": { "type": "http", "url": "http://localhost:8766/mcp" } } }

Cursor

Add to .cursor/mcp.json in your project (or ~/.cursor/mcp.json globally):

{ "mcpServers": { "codelux": { "url": "http://localhost:8766/mcp" } } }

VS Code (Copilot Chat)

Add to .vscode/mcp.json in your workspace:

{ "servers": { "codelux": { "type": "http", "url": "http://localhost:8766/mcp" } } }

Windsurf

Add to ~/.codeium/windsurf/mcp_config.json:

{ "mcpServers": { "codelux": { "serverUrl": "http://localhost:8766/mcp" } } }

JetBrains (AI Assistant)

Settings → Tools → AI Assistant → Model Context Protocol → Add server → URL http://localhost:8766/mcp.

Zed

Settings → context_servers → add Codelux AI with the same URL.

Any other MCP client

Codelux AI exposes standard MCP at http://localhost:8766/mcp (streamable HTTP; the older SSE transport stays at /sse). If your tool speaks MCP, it works. Every transport lists the 8 core tools; add ?profile=full to the URL to list the rest as well.

Tip: if your editor has no MCP support at all, use the REST / cURL API — same engine, plain HTTP.

🧰 MCP Tools

8 tools, listed by every transport by default. Once connected, your AI picks the right one; with the Claude Code plugin the first read and the file lock happen from hooks, without a call.

Why only eight. Claude Code and the other coding agents already search, read and edit files and run git on their own, and do it well, so Codelux AI leaves those jobs to them. Codelux AI adds what the agent cannot do by itself: remember, take notes, lock a file, talk to the other agents. The rest of the engine (grep, file read, outline, tree, git, file operations, codemap management) stays callable by name and is listed with /mcp?profile=full.

Memory

ToolWhat it doesUse it for
memory_setWrites a memory: a free JSON decided by the AI, saved whole and returned whole (about 16 KB at most). summary is the only required key; topic, status, next, open, traps, decisions, facts (anchored file:line), todos, codemaps and files are recognised and also filed in the dashboard; unknown keys are kept as they are. op: update | close with an id edits or closes an earlier one. report (optional, any memory_set that closes the work) is the agent's short report on Codelux AI itself: {vote 1-10, useful: [tools], bugs: [texts], saved, note}. It is not kept in the memory (memories are shared with the team): it stays on this computer, the daemon adds the calls made to each tool, and the app shows it in the Usage page (GET /reports?days=30, reports <id> [days]). Nothing is sent anywhere.Closing a task or a session, or marking a step along the way.
memory_getNo parameters = resume: the newest memory plus what changed in its files since it was written. Filters: since / until, kind, topic, id, query. events: true returns the timeline instead.First call of a session (the plugin does it for you), and "what did we do on this, and why?" at any time.

Notes

ToolWhat it doesUse it for
notes_setCreates, updates, closes or deletes a note, a todo (with checklist), a form (the AI writes the questions, a person answers from the dashboard) or a schema (Mermaid). Formats: md / text / mermaid / form.Leaving a todo, recording a decision and the why, drawing a diagram, asking the user a structured question.
notes_getNotes, open todos, forms waiting for an answer and the answers that arrived.Reading what people (or other agents) left for you.

Check against the code

ToolWhat it doesUse it for
code_queryDoes X exist, and where? Symbols from the index plus the codemaps saved in memories (by $key or by words of the label), with file and line.Checking a name or a path before using it. For text search the agent's own grep is the right tool.
code_contextOne symbol with the functions it calls.Before changing a function — see what it depends on.

Writing and agents

ToolWhat it doesUse it for
code_editA controlled write: takes the semaphore, checks the hash of what the agent read, backs the file up, applies, reindexes, records the edit on the timeline.Agents without hooks. With the Claude Code plugin the agent keeps its own Edit and the hook takes the lock.
agents_msgA short message to the other agents working on the same project, delivered with their next call and kept for one hour.Telling another agent what you are about to change, or reading what it left for you.
code_lock, hidden. Takes or releases the file semaphore — a per-file mutex on the machine plus the Team lock when the project is shared — and answers in one line: ok … or refused: agent X is editing F, expires in N s. It is not listed: the plugin's Edit/Write hooks call it. See plugin & hooks.
Installing and getting help: the machine-readable setup guide is served over HTTP at GET /first-installation and by the CLI command codelux first-installation. The full tool guide is at GET /help. Neither is an MCP tool.

A session with the plugin

  1. Session starts — the hook puts the newest memory in context: what was done, what is next, the traps
  2. You type a prompt — if a codemap, a fact or a decision matches, the hook adds it; otherwise nothing
  3. code_query / code_context — check a name or a dependency before touching it
  4. Edit with Claude Code's own tools — the hook takes the lock before and releases it after
  5. notes_set — a todo for you, a form when it needs an answer, a decision and the why
  6. memory_set — the session closes with its memory; the Stop hook reminds the model if it forgot

Every one of these steps is an event on the timeline.

🕒 Timeline

The timeline is the record of everything that happens on a project, emitted by Codelux AI itself: you never write to it, and nothing on it is lost — a delete is an event that keeps the previous content.

What lands on it

SourceEvents
Memorycreated · updated · closed · deleted, with the summary and the author (person and agent)
Notesnote, todo, form, schema: created · updated · closed · deleted · answered
Facts, todos, codemapsthe children of a memory, each with its own event
Filesfile edited through code_edit: which file, the symbols and lines that changed, the diff
Gitcommit, branch
Agentslock taken, lock released, message between agents
Teammember joined / left, key rotated

Where to read it

  • Timeline tab of the dashboard: events in order, filters by type, topic, author, period and file; a click opens the original — the note, the memory, the file diff, the commit.
  • For the agent: memory_get with events: true, with the same filters.
  • On a team: every event reaches every member's machine, encrypted with the team key, with who did it.
Memory and timeline are two different things. A memory is content the AI wrote — a JSON it will reuse. An event is the fact that something happened, emitted by Codelux AI. The timeline shows events; the memory is one of the things they point at.

🌐 REST / cURL

Every tool is also a plain HTTP endpoint. Scripts, CI pipelines, custom tooling, legacy editors: anything that can make an HTTP call can use Codelux AI.

Base URL

http://localhost:8766/api/project/{project}/

{project} is the name of an indexed project. List them with /api/projects.

Say who you are. Every call below that reads or writes the project must name the calling agent, the same way on MCP, REST and the CLI: agent=<codename> in the query or in the JSON body, or the header X-Codelux-Agent: <codename> (CLI: --agent=<codename> or the CODELUX_AGENT variable; MCP: the agent argument, filled by the client). Without it the call is refused with 400 agent required; with it, the timeline shows the agent by name. To call an MCP tool by its own name and arguments: POST /api/project/{project}/tool/{name}.

Same agent, same row. To tie a REST call to the agent's own session (the one its hooks report), add session=<host session id> and provider=claude-code|codex|gemini|cursor|other, plus subagent=<id> inside a subagent; or the headers X-Codelux-Session, X-Codelux-Provider, X-Codelux-Subagent (CLI: --session, --provider, --subagent or the variables CODELUX_SESSION, CODELUX_PROVIDER, CODELUX_SUBAGENT). With the Claude Code plugin the session start sets CODELUX_SESSION and CODELUX_PROVIDER in every Bash command, and the hook reads the name in a command that calls Codelux AI: the name alone is enough. Without any session id, the agent is one row per name, shown as Other agent.

# Claude Code with the plugin: the variables are already set curl "localhost:8766/api/project/myapp/query?q=login&agent=w375&session=$CODELUX_SESSION&provider=$CODELUX_PROVIDER"

Search & read

# search symbols curl "localhost:8766/api/project/myapp/query?q=login" # boolean search: AND (&), OR (|), NOT (!) curl "localhost:8766/api/project/myapp/query?q=login%26auth%20!admin&agent=me" # exact text / regex in raw sources curl "localhost:8766/api/project/myapp/grep?q=handle_login&kind=code&path=api/&limit=200&agent=me" # q is a regex (| = or; re=0 = literal); kind=code|docs|all, path=/exclude= prefix or glob, offset/limit; reply has total, truncated, next_offset # a path= that selects no file is a 404 with "did you mean app/src/?"; a q cut by a raw & is a 400 — let curl encode it: curl -sS -G "localhost:8766/api/project/myapp/grep" --data-urlencode "q=foo bar|baz" --data-urlencode "agent=me" # outline of a file (symbols + line numbers): the whole list; offset=/limit= page it (reply: count, truncated, more, next_offset) curl "localhost:8766/api/project/myapp/outline?file=api/auth.py&agent=me" # working in a git worktree (.claude/worktrees/<name>)? read ITS files: worktree= on outline, context and grep curl "localhost:8766/api/project/myapp/outline?file=api/auth.py&worktree=fix-login&agent=me" # read a file (raw text) curl "localhost:8766/api/project/myapp/file-raw?file=api/auth.py&agent=me"

Analyze

# symbol + its direct dependencies curl "localhost:8766/api/project/myapp/context?name=handle_login&file=api/auth.py&agent=me" # file= picks one when the name exists in several files; without it: best match + candidates # a common name (get, push, map, update…) defined in several files answers only the candidates until file= is given # unified tree: callers above (up=1) + callees below (down=2) curl "localhost:8766/api/project/myapp/tree?name=handle_login&up=1&down=2&agent=me" # all symbols of a semantic domain curl "localhost:8766/api/project/myapp/domain?d=auth&agent=me"

Memory, notes & timeline

# the MCP tools over plain HTTP: POST /mcp with a JSON-RPC tools/call curl -X POST "localhost:8766/mcp" -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"memory_get","arguments":{"events":true,"since":"today"}}}' # activity timeline of the project (notes + edits + tool calls) curl "localhost:8766/api/project/myapp/memory?since=2h&topic=Editor&agent=me" # one record by its exact id (m_… memory, ev_… journal event, n_… note, e_… timeline event) — or 404 curl "localhost:8766/api/project/myapp/memory?id=ev_1791892211156248500&agent=me" # leave a note (decision / todo / summary / schema / form…) curl -X POST "localhost:8766/api/project/myapp/note?agent=me" \ -d '{"kind":"decision","title":"Use JWT","content":"Symmetric HS256, 1h expiry"}' # facts anchored to code (fresh / to recheck) curl "localhost:8766/api/project/myapp/facts?agent=me" # leave a checkpoint for the next session or agent curl -X POST "localhost:8766/api/project/myapp/set?agent=me" \ -d '{"topic":"Editor.Print","type":"checkpoint","payload":{"status":"margins fixed","next":"PDF export"},"report":{"vote":8,"useful":["code_query","memory_get"],"bugs":["outline stops at line 300"],"saved":"60k tokens, 10 rounds"}}' # the words go in payload (fields written next to it are moved there, and the reply says so) # report (optional, in the last set of the work): your note on how Codelux served you. Same key on memory_set (MCP), POST /tool/memory_set and the CLI. # It is kept on this computer only, never sent; the daemon adds your calls per tool. # the agents' reports of the last 30 days (also: format=md for a summary to forward by hand) curl "localhost:8766/api/project/myapp/reports?days=30" # read it back — includes what changed in those files since curl "localhost:8766/api/project/myapp/get?topic=Editor.Print&brief=1&agent=me" # brief=1: at most 3 lines (status, next step, trap) — plus the last checkpoint whole when the topic has 3 or fewer; drop it for the full dossier # save a codemap shortcut for the current work area curl -X POST "localhost:8766/api/project/myapp/codemap?agent=me" \ -d '{"label":"login backend","files":["backend/auth.py"]}'

Writes & git

# the one write path — anchored edits (file-edit also takes symbol / whole-file) curl -X POST "localhost:8766/api/project/myapp/file-edit" \ -d '{"file":"editor/print.go","agent":"print-fixer","edits":[{"old":"marginTop = 10","new":"marginTop = 24"}]}' # delete / move / copy — same pipeline, backed up before anything is touched curl -X POST "localhost:8766/api/project/myapp/file-move" \ -d '{"from":"editor/print.go","to":"editor/render/print.go","agent":"print-fixer"}' # repository state, then stage + commit in one call (the commit stays local) curl "localhost:8766/api/project/myapp/git-status" curl -X POST "localhost:8766/api/project/myapp/git-commit" \ -d '{"message":"Fix print margins","agent":"print-fixer"}'

Manage

# indexed files curl "localhost:8766/api/project/myapp/files" # index stats curl "localhost:8766/api/project/myapp/stats" # (re)index a project curl -X POST "localhost:8766/api/project/myapp/bootstrap"
MCP vs REST: same engine, same results. MCP is for AI agents that pick tools on their own; REST is for everything you script yourself.

⌨️ CLI Commands

The binary doubles as a CLI — useful for quick checks without leaving the terminal.

Running codelux.exe (Windows) or ./codelux (Linux) with no arguments prints the command list — run codelux start to launch the server. The following sub-commands are available for terminal use:

Project id first. Most commands act on one project, so they take its id as the first argument: codelux query myapp "login". Run codelux projects to list the ids you can use.

Read & search

CommandWhat it does
codelux projectsLists your projects and the ids every other command expects.
codelux query <id> <term>Searches symbols by keyword or intent. Supports boolean: & AND, | OR, ! NOT.
codelux grep <id> <pattern> [glob] [--path=] [--worktree=]Exact text / regex search across raw source files, with optional file glob filter.
codelux tree <id> <symbol> [up] [down]Caller + callee tree. Default up=1 down=1.
codelux context <id> <symbol> [--file=] [--worktree=]Source code of a symbol plus its direct dependencies; --file picks one of several definitions.
codelux outline <id> <file> [--offset=N] [--limit=N] [--worktree=]Lists all symbols in a file with line numbers; --offset/--limit page a long file; --worktree reads a worktree's copy.
codelux domain <id> <name>All symbols in a semantic domain: auth, iot, ai, builder, …
codelux files <id>All indexed files with symbol counts and language.
codelux stats <id>Index statistics as JSON: files, symbols, languages.

Memory & notes

CommandWhat it does
codelux facts <id> [query]Lists what Codelux AI has learned about the project, flagged fresh or to recheck.
codelux fact <id> "<text>" --anchor <file:line>Records a fact anchored to real code, so it is rechecked when that code changes.
codelux set <id> <topic> <type> <text>Writes a checkpoint under a topic — what's done, what's open, what's next.
codelux get <id> [topic]Reads the latest checkpoint for a topic, plus what changed in those files since.
codelux journal <id> delete <event|topic> <ref>Removes a checkpoint or a whole topic. Never touches project files.
codelux memory <id> [since] [query]Recent notes, file edits and tool calls. since: 1h, 2h, today.
codelux reports <id> [days] [--format=md]Lists the reports the agents left on how Codelux AI served them (vote, tools, bugs), kept on this computer. --format=md prints the summary to forward by hand.
codelux note <id> <list|add|done|…>Read or leave typed notes: intent, decision, todo, summary and the rest.
codelux codemap <id> <list|create|delete>Manage the named shortcuts that pin a work area.

Writes & index

CommandWhat it does
codelux file <id> edit <file> @edits.json --agent=<name>The one write path, anchored mode: the edits are read from a JSON file.
codelux file <id> edit --symbol=<name> <content|@file> --agent=<name>Symbol mode: replaces one function or method with its full new source. Add --file= when the name is ambiguous.
codelux file <id> edit <file> --full <content|@file> --agent=<name>Whole-file mode: creates a new file, or replaces an existing one when --base-hash= is supplied.
codelux bootstrapScans and indexes the current project folder.
codelux watchStarts live reindex: reindexes any file that changes on disk.

Example session

$ codelux projects myapp ~/dev/myapp active api-gateway ~/dev/api-gateway $ codelux query myapp "login & auth !admin" fn login [auth] api/auth.py:42 — handles user authentication fn authenticate [auth] api/middleware.py:18 — JWT validation 3 symbols $ codelux tree myapp authenticate 2 1 callers (2): handle_request middleware.py:10 app.run app.py:5 callees (1): verify_token jwt.py:22 $ codelux facts myapp "rate limit" · login() enforces a 5/min cap api/auth.py:58 fresh · the cap is read from settings.yaml config/settings.yaml:12 to recheck $ codelux get myapp Editor.Print checkpoint · 2 days ago · "margins fixed, printing to PDF still open" ⚠ 1 file changed since: editor/print.go

📊 Web Dashboard

Codelux AI ships a built-in web dashboard at http://localhost:8766 — manage every project from the browser, even when Codelux AI runs on a remote server.

Tabs

TabWhat you see
MainFile and symbol counts, the newest memory, open todos, who holds which lock.
TimelineEvery event on the project in order — memories, notes, file edits, commits, locks, team messages — with filters by type, topic, author, period and file. A click opens the original. Read-only, plus a New note button. See Timeline.
NotesNotes, todos with checklists, forms waiting for your answer, Mermaid schemas — yours, the AI's and, on a team, your colleagues', each with its author and edit history.
JournalMemories grouped by topic: summary and meta at a glance; open one and the JSON the AI wrote is shown as a tree, with the files changed since.
CodeMapThe $key labels the AI saved in its memories — an area of the code and its files — kept in sync as memories close.
FilesThe project tree with a built-in editor.
SearchQuery & grep over the index with a Monaco editor, results with file and line, and the interactive caller/callee tree — for you; the agent uses its own grep.
GitBrowse commits, branches and diffs and stage / commit / push — without leaving the dashboard.
ManagerOnly for the Manager of a team project: tasks (list, board, Gantt), standups built from the timeline, people, usage and costs; connections to Jira, Linear, GitHub… need the company hub — see Teams.
TeamOnly on a shared project: the team chat (channel, direct messages, groups), members and who is online, file locks — see Teams.
AppsSmall tools that run beside the project, on your machine.
LogsSystem log: index activity and file-watcher events.
AccountLicense status, plan & renewal, device management, your teams and the team key, interface language and binary download.

Server / headless install

Run Codelux AI on a server and open the dashboard from any browser: web login, multi-project sidebar, per-project configuration.

Projects and plans

Codelux AI keeps watching and indexing every project you register, on every plan — the plan decides what you can act on, not what is kept up to date. On Free one project is active at a time: the others show an Activate this project action instead of their tabs, and the tools stay disabled until you switch, which you do from the app. On Multi and Team every project is active at once, with no activation limit.

👥 Teams

The Team plan shares one project between the people you invite. Memories, notes, the timeline, chat and edit history travel between machines as encrypted events; the file semaphore and who is online are coordinated live. Code and index never leave anyone's machine, and the key that protects the shared data never reaches us.

Where everything lives

WhatWhere
Code and indexEach member's machine. Never uploaded, never replicated by Codelux AI.
Memories, notes, timeline, CodeMap, edit history, chatEach member's machine, in clear — and on our server as encrypted events: ciphertext plus team, project, author, sequence number, size and key version. We cannot tell a memory from a chat message.
File locks and presenceThe realtime service, in clear, while the session is open: a path relative to the project and who holds it — never file contents.
Team keyThe owner's app and every member's app, sealed to each machine. Never on our servers; we record only its version number.
Team name, project, members, roles, share modeOur server — managed from the Console.

1. Buy the seats

The Team plan is a yearly subscription of the team owner, priced per seat with a minimum seat count — both are on the pricing page. Seats count distinct people across every team you own, the owner included: the same person in two of your teams uses one seat. Members join with their own account and need no plan of their own.

2. Create the team on the site

In the Console, open Teams → New Team: give it a name, pick one project from your account's project list, add the members' email addresses and choose how the team shares files (Git clones or Shared folder, see step 7). One team = one project; create another team for another project. Each member receives an invitation by email — without an account yet, the link takes them to registration first — and accepts it from their own Console. Nothing about the team's contents is ever visible on the site.

3. The owner's app makes the keys

The owner's Codelux AI generates, once, a master key (256 random bits) in Settings → Keys and keeps it sealed on that computer. The key of each team is derived from it, version by version; our server keeps only a public check value per team and version, which reveals nothing about the key. The owner can show and copy the master key behind a confirmation, and export it to a file (protected with a passphrase, recommended) to set up another computer. No button on the site or in the app ever sends a key to us.

Keep this key safe and never lose it: if it is lost, the team's shared data can no longer be read — not by you, not by us. Send it to every member and ask them to keep it too. This key is stored only on your computer and on your teammates' — never on Codelux AI servers.

4. Hand the key to the members

  • Copy team key — in Settings → Keys the owner copies the key of one team (it starts with cdx-t-) and sends it to that team's members over a channel they trust (in person, a message, a password manager). It opens only that team; the master key is never given to members.
  • Paste the team key — the member pastes it in the banner of the team's project; spaces, dashes and case are ignored, and the app checks it against the server's check value before keeping it (a wrong key is refused at once).

Every member keeps every key version they receive, so events written before a rotation stay readable on their machine.

5. Point each machine at the project folder

Shared projects appear in the sidebar under Shared with you, grouped by team. On the owner's machine the folder is taken from the project list; on every other machine the member chooses Set folder on this machine… and gives the path of their clone (Git clones) or of the shared folder (Shared folder). The path is recorded per machine, so the same project can live at different paths on different computers. A shared project is ready once the machine has both the folder and the key.

6. The Team tab

When the selected project belongs to a team, the dashboard gains a Team tab: the chat with its channels — the team channel, direct messages between two members and groups created by the owner or an admin — the member list with who is online, and the file locks showing who is editing what. Notes, journal, facts and CodeMap carry the author of each entry and a filter (All · Me · a member). Without the key the tab offers only Paste the team key.

Direct messages and groups are not private towards the team. They are encrypted with the same team key that every member holds, and every member's app receives every event; the separation is only in the interface. The app shows this notice on every direct-message and group conversation. Do not use them for anything you would not say in the team channel.

7. Git clones or Shared folder

Git clonesShared folder
FilesEveryone works on their own clone; changes travel with git push / pull.Everyone edits the same files on a network share or a cloud-synced folder (Dropbox, OneDrive…).
The lockTaken on write; the push is what makes the change visible to the others.Taken on write and released after the save — held a few seconds longer on a cloud-synced folder, so the bytes land before a teammate opens the file.
DatabasesIn the project's .codelux folder, as usual.Outside the shared folder, in the app's own state directory — two machines never open the same database file.
Who sets itThe owner when creating the team; the owner or an admin later, from the badge on the team card on the site. Every member's app picks the change up at its next heartbeat.

In both modes the rule is the same: writes to the shared project go through only while the realtime service that holds the locks is reachable. When it is not, edits to the shared project through the Claude Code hook on Edit and Write are refused with a clear message, never applied blindly.

8. Members on the Free plan

A member covered by the owner's seats is entitled to the Team build: My account › Downloads in the Console shows it as Team build (covered by <team>). They download it, sign in with their own account and work on the shared project with locks, presence and chat; their own projects follow their own plan (on Free, one active project per machine). The public Free build has no realtime client: with the folder and the key it can read the shared knowledge, but every write on the shared project answers Team build required.

9. Removing a member, rotating the key

Members are removed from the site; removal cuts their access to new events at once, but whatever already reached their machine stays there. When that matters, the owner presses Turn key in Settings → Keys: the version number goes up and new data is sealed with the new key; the members who stay keep reading the old data and get the new key from the owner (Paste the team key). Turn it too whenever you suspect the key has leaked.

10. Machines, offline, and when the plan lapses

  • One Codelux AI per machine. Signing in with the same account on another machine takes over; the previous one is signed out (the last login wins). This holds for every member.
  • Offline. The app checks in with the licence server every minute; after three failed checks it is offline and, until the next successful one, writes to shared projects are refused — the same fail-closed rule as a realtime outage. There is no offline grace period on any plan.
  • Plan lapsed or seats exceeded. The team goes dormant: its shared project is no longer authorised for the members, who see Plan lapsed. Nothing is deleted and no key is touched — the keys stay on every machine, the events stay on the server, and everything resumes at the renewal. Meanwhile the owner can still remove members or delete the team.
  • Deleting the team. Removes every encrypted event and all team metadata from our servers. What each member already has on their machine stays there and remains theirs.

11. Roles: Admin, Manager, Member

Admin — buys the seats and administers the organization from the Console: creates teams, invites people, assigns each person as Manager or Member of each team, names the organization Admins, sets up SSO and SCIM. Manager — coordinates a team in the app: Tasks (key, title, assignee, start and due date, status, checklist, planned and actual %) as a list, a board and a Gantt, shared end-to-end encrypted like notes; Generate reports builds one standup per member per day from the timeline only — memories, checkpoints, closed todos, file edits, locks, tasks moved — never from the chat, and the manager confirms the actual %; People of his team with agents seen, last activity and a per-member download (no chat) that is itself recorded on the timeline; usage and costs per member. Member — works with agents and sees the team plan, their own plan, usage, the timeline and the chat. A person can hold several roles. In the app the project list is grouped: personal projects, then the teams you are a member of, then the teams you manage. Hosted by us, a team has Codelux AI planning, chat, standups, timeline, memory, semaphore, usage, costs and audit — and no connector.

12. Sign-in, SSO, SCIM and organisation admins

Every account can sign in with email and password plus an email code, or with Google, GitHub or Slack. The owner of a Team plan can connect the company's identity provider over OIDC or SAML 2.0 for verified domains, require SSO for them (the owner keeps every sign-in method as the way back in), and issue a SCIM 2.0 token: a person deactivated in the provider is removed from all the owner's teams, signed out everywhere, and a key rotation is requested. In Admins the owner names organisation admins, who administer all of the owner's teams but cannot change billing or delete the organisation. The documents for your IT review are on the Security page.

13. Integrations: the company hub

Integrations are not part of our hosted service. With the company hub, codelux-hub — a program your company runs, included in Team and Enterprise — a team also gets Jira, Linear, Asana, Azure Boards, GitHub, GitLab and Slack notifications, executed by the hub and always on. The Admin connects each provider once for the organization; the Manager of a team picks, among them, the team's Jira project, repository or Slack channel, without handling any token. An organization is either entirely on our hosted service or entirely on its hub, and a migration package moves a team from one to the other. Register and download the hub from My account › Downloads › Hub in the Console. We never see your code, memories, timeline, nor your tokens.

What we do not do

  • We never receive, store or forward the team key. There is no escrow and no recovery: if every member loses it, the encrypted events are unreadable — for you and for us.
  • We cannot read memories, notes, the timeline, CodeMaps, edit history or chat. We do not know what kind of event it is or which file it refers to.
  • We do not upload code or index files, on any plan.
  • We do not make direct messages private towards the team — see step 6.
  • The planning and chat service is hosted by us and has no connector. A company that wants integrations runs its own hub, codelux-hub (included with Team): it executes Jira, Linear, Asana, Azure Boards, GitHub, GitLab and Slack notifications with tokens that stay on your side. The DPA template, the security questionnaire and the deployment guide are on the Security page; a signed DPA is available on request.