Maintainers
Pricing
Enterprise
More
More
Documentation
Try Live
Rankings
Install
Blog
Docs7
Ask
New
Add Docs
Dexio
https://dexio.wiki/llms.txt
Admin
Dexio is a hosted wiki designed for AI agents, allowing them to read, search, and edit
...
Tokens:
65,311
Snippets:
487
Trust Score:
2.5
Update:
1 month ago
Context
Chat
Benchmark
Latest
Show doc for...
Code
Info
Show Results
Tokens:
Raw
Copy
Link
Tokens:
Raw
Copy
Link
### Add Dexio wiki instructions to AGENTS.md Source: https://dexio.wiki/guides/openclaw-memory Add these instructions to ~/.openclaw/workspace/AGENTS.md (or via Settings > Agents > Files in the Control UI). OpenClaw loads AGENTS.md at the start of every session, so these rules guide how it uses the Dexio wiki. ```markdown ## Dexio wiki - Keep MEMORY.md for short personal notes; keep shared project knowledge in the Dexio wiki. - Before writing, use search_pages and read_page, and update the page that exists. - Link related pages with [[wikilinks]]. - Pass base_version when you edit, and name yourself in the agent field. ``` -------------------------------- ### SKILL.md example for release-notes skill Source: https://dexio.wiki/guides/hermes-agent-skills Example of a SKILL.md file for a release-notes skill. It includes frontmatter with name, description, and version, followed by instructions, pitfalls, and verification steps. ```markdown --- name: release-notes description: Draft release notes from merged pull requests version: 1.0.0 --- # Release notes Use when the person asks for release notes for a version. 1. List the pull requests merged since the last tag. 2. Group them into Added, Changed and Fixed. 3. Write one plain sentence per change. ## Pitfalls - Skip dependency bumps unless they change behaviour. ## Verification Every merged pull request appears once. ``` -------------------------------- ### Example CLAUDE.md for a TypeScript invoicing API Source: https://dexio.wiki/guides/claude-md Illustrates a complete CLAUDE.md that captures project-specific commands (install, dev, test, typecheck, migrations), code style (ES modules, integer cents for money), architecture (route handlers in src/routes/, SQL in src/db/), workflow (branch naming, running tests before commit), and gotchas (tests require DATABASE_URL from .env.test, src/generated/ is generated). Place this in the project root to be loaded by Claude Code. ```markdown # Tally A small invoicing API: Node 22, TypeScript, Fastify, Postgres. Product overview: @README.md ## Commands - Install: `pnpm install` - Dev server: `pnpm dev` (start the database first with `docker compose up db`) - One test file: `pnpm vitest run path/to/file.test.ts` - Typecheck: `pnpm tsc --noEmit`. Run it after a series of changes. - Migrations: `pnpm db:migrate` ## Code style - ES modules only, no `require` - Money is integer cents (`amountCents`), never floats ## Architecture - Route handlers live in `src/routes/`. SQL lives only in `src/db/`. - IMPORTANT: never edit a migration that is already on main. Add a new one. ## Workflow - Branches: `feat/<name>` or `fix/<name>` - Run the tests for the files you changed before you commit ## Gotchas - Tests need `DATABASE_URL` from `.env.test` - `src/generated/` is written by `pnpm codegen`. Do not edit it by hand. ``` -------------------------------- ### Install OpenClaw with curl Source: https://dexio.wiki/guides/hermes-agent-vs-openclaw One-line installer for OpenClaw on macOS, Linux, and WSL2. Run in terminal to install. ```bash curl -fsSL https://openclaw.ai/install.sh | bash ``` -------------------------------- ### Dexio health check report example Source: https://dexio.wiki/ Example output from Dexio's health check report for the example wiki. It lists broken links as problems, then pages named without a link and pages nothing links to as information. ```text broken links (2), the only problems: competitors/tallpine-roasters -> cafes/harbor-light-espresso sources/alder-stone-price-sheet-2026-09 -> coffees/kenya-kirinyaga for information, named without a link (2): decisions/compostable-bags names suppliers/foldright-packaging how-to/wholesale-order names cafes/loaf-and-ladle for information, nothing links to these (1): sources/cupwise-pricing-page-2026-09 ``` -------------------------------- ### Message to send to Codex for automatic setup Source: https://dexio.wiki/guides/codex-mcp Send this message to Codex to have it connect to your Dexio wiki. Codex will read the steps from the provided URL and follow them. ```text Connect yourself to my Dexio wiki. Read the steps with curl -s https://dexio.wiki/agents.md and follow them. ``` -------------------------------- ### Install Hermes Agent with curl Source: https://dexio.wiki/guides/hermes-agent-vs-openclaw One-line installer for Hermes Agent on Linux, macOS, and WSL2. Run in terminal to install. ```bash curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash ``` -------------------------------- ### Add Dexio wiki instructions to AGENTS.md Source: https://dexio.wiki/guides/hermes-agent-memory Add these lines to AGENTS.md (or .hermes.md) in the working directory to load project instructions when a session starts. For a rule that follows the profile everywhere, ask Hermes to save a line via the memory tool. ```markdown ## Dexio wiki - Keep project knowledge in the Dexio wiki. - Before writing, use search_pages and read_page, and update the page that exists. - Link related pages with [[wikilinks]]. - Pass base_version when you edit, and name yourself in the agent field. ``` -------------------------------- ### AGENTS.md example for a TypeScript monorepo Source: https://dexio.wiki/guides/agents-md A complete AGENTS.md file for a small TypeScript monorepo with a Next.js web app and Fastify API. It covers project overview, setup, tests, code style, database migrations, security, and pull request conventions. Use this as a template for your own project's agent instructions. ```markdown # AGENTS.md ## Project overview - Invoicing app. Next.js frontend in `web/`, Fastify API in `api/`, Postgres. - Shared types live in `packages/types`. Change them there, not in copies. ## Setup - Install: `pnpm install` - Run both apps: `pnpm dev` (web on port 3000, API on 4000) ## Tests - Run `pnpm test` before you finish, and fix failures rather than skipping them. - One package only: `pnpm --filter api test` - Add or update tests for the code you change. ## Code style - TypeScript strict mode. Explain any `any` in a comment. - Run `pnpm lint` and `pnpm format` before committing. ## Database - Change the schema only with a new file in `api/migrations/`. Never edit an applied migration. ## Security - Secrets live in `.env.local`, which is not committed. Never print or commit them. ## Pull requests - Title: `[web]` or `[api]`, then a short summary. ``` -------------------------------- ### Configure mcp-obsidian in Claude Desktop Source: https://dexio.wiki/guides/obsidian-mcp Claude Desktop configuration for the mcp-obsidian server. Requires the Local REST API plugin to be installed and enabled, and the API key and host/port to be set. The server runs with uvx mcp-obsidian. ```json { "mcpServers": { "mcp-obsidian": { "command": "uvx", "args": ["mcp-obsidian"], "env": { "OBSIDIAN_API_KEY": "<your API key>", "OBSIDIAN_HOST": "127.0.0.1", "OBSIDIAN_PORT": "27124" } } } } ``` -------------------------------- ### Monorepo directory structure with nested AGENTS.md files Source: https://dexio.wiki/guides/agents-md Shows a typical monorepo layout where each package has its own AGENTS.md. The root file holds install, test, and pull request rules, while subdirectories define frontend and API conventions. ```text repo/ AGENTS.md # install, test, pull request rules web/ AGENTS.md # frontend conventions api/ AGENTS.md # API and migration rules ``` -------------------------------- ### GET /api/v1/export Source: https://dexio.wiki/agents Downloads the entire wiki as a zip file with one markdown file per page. Requires authentication via Bearer token. ```APIDOC ## [GET] /api/v1/export ### Description Exports the entire wiki as a zip file containing one markdown file per page, preserving the page paths. ### Method GET ### Endpoint `/api/v1/export` ### Parameters #### Headers - **Authorization** (string) - Required - Bearer token for authentication, e.g., `Bearer $DEXIO_API_KEY`. ### Request Example ```sh curl -sS --fail-with-body -o wiki.zip -H "Authorization: Bearer $DEXIO_API_KEY" 'https://app.dexio.wiki/api/v1/export' ``` ### Response #### Success Response (200) - **file** (binary) - The zip file containing the wiki pages. #### Response Example ``` wiki.zip ``` ``` -------------------------------- ### Start Dexio sign-in with curl POST to /api/v1/device/code Source: https://dexio.wiki/agents Use this curl command to initiate the Dexio device sign-in flow. It sends a POST request with a JSON body containing a client_name (under 60 characters) to identify the agent. The response includes a device_code, user_code, and verification URIs; the request is valid for 30 minutes. ```sh curl -s -X POST https://app.dexio.wiki/api/v1/device/code \ -H 'Content-Type: application/json' \ -d '{"client_name": "Claude Code on Dana'"'"'s MacBook"}' ``` -------------------------------- ### Wiki schema template Source: https://dexio.wiki/guides/muse-llm-wiki A starting schema for the wiki, defining layout, rules, and workflows for ingest, query, and lint. Edit it whenever you repeat an instruction. ```markdown # Wiki schema ## Layout - sources/<slug>: one page per source: what it says, where it came from, when you read it. - entities/<name>: people, companies, products, places. - concepts/<name>: ideas that span several sources. - queries/<slug>: answers worth keeping. - index: every page, one line each. log: one line per ingest, query or lint. - Files such as PDFs sit beside the pages, at paths like raw/paper.pdf. - Link pages with [[wikilinks]], such as [[concepts/pricing]]. ## Rules - Run search_pages before you write, and update the page that exists. - Pass the base_version from read_page when you edit. - Name yourself in the agent field on every change: "muse". - Never put API keys or passwords in the wiki. ## Ingest 1. Read the source and tell me the key points. 2. Write sources/<slug>. 3. Update the entity and concept pages it touches. Note claims it contradicts. 4. Add new pages to index. Append to log: YYYY-MM-DD ingest | title. ## Query Read index, then search. Answer with the page paths you used. File answers worth keeping under queries/. ## Lint Fix broken links, check pages marked possibly stale against newer sources, list contradictions and concepts that have no page. ``` -------------------------------- ### Start Claude Code or Codex in the vault directory Source: https://dexio.wiki/guides/obsidian-mcp Start Claude Code or Codex from the vault directory so the agent can read and edit the markdown files. The comment shows the alternative command. ```bash cd ~/path/to/your/vault claude # or: codex ``` -------------------------------- ### LLM wiki schema (AGENTS.md) Source: https://dexio.wiki/blog/llm-wiki A short schema to start from, defining layout, ingest, query, and lint rules for the agent. It instructs the agent to read raw sources, write summaries, update pages, and maintain index and log. ```markdown # Wiki schema ## Layout - raw/ holds sources. Read them. Never edit them. - wiki/ holds the pages you write, one topic per page. - Link pages with [[page-name]]. ## Ingest 1. Read the new file in raw/ and tell me the key points. 2. Write a summary page in wiki/sources/. 3. Update the entity and concept pages it affects. Note any claim it contradicts. 4. Add new pages to wiki/index.md with a one-line summary. 5. Append to wiki/log.md: ## [YYYY-MM-DD] ingest | Source title ## Query Read wiki/index.md first, then the pages it points to. Cite the pages you used. If an answer is worth keeping, file it as a new page. ## Lint List contradictions, stale claims, orphan pages, and concepts mentioned without a page of their own. ``` -------------------------------- ### CLAUDE.md template Source: https://dexio.wiki/guides/claude-md A template for a CLAUDE.md file. Copy it into ./CLAUDE.md, fill in what applies, and delete the rest. The sections follow the 'Include' column of the guide. ```markdown # <Project name> <One line: what it is and the main stack.> ## Commands - Build: - Test (one file): - Lint and typecheck: ## Code style - <Only rules that differ from the language's defaults> ## Architecture - <Decisions Claude cannot see in the code, and why> ## Workflow - <Branch naming, commit and PR conventions> ## Gotchas - <Required env vars, generated files, things that break quietly> ``` -------------------------------- ### OAuth device sign-in for Dexio Source: https://dexio.wiki/guides/claude-memory Start the OAuth device flow by requesting a device code, then poll the token endpoint every 5 seconds until it returns an access_token. Show the user verification_uri_complete and user_code from the first response. ```http POST https://app.dexio.wiki/api/v1/device/code {"client_name": "your name"} ``` ```http POST https://app.dexio.wiki/api/v1/device/token {"device_code": "..."} ``` -------------------------------- ### Manual configuration for ~/.codex/config.toml Source: https://dexio.wiki/guides/codex-mcp Add this to your user configuration file to enable Dexio MCP server. Replace dxk_... with your actual API key. The url is the server address and http_headers sends a static header with every request. ```toml [mcp_servers.dexio] url = "https://app.dexio.wiki/mcp" http_headers = { "Authorization" = "Bearer dxk_..." } ``` -------------------------------- ### Add Dexio MCP server to ~/.cursor/mcp.json Source: https://dexio.wiki/guides/cursor-mcp Merge this into the global Cursor configuration to make Dexio available in every project. Replace dxk_... with your API key, which acts like a password for your workspace. ```json { "mcpServers": { "dexio": { "url": "https://app.dexio.wiki/mcp", "headers": { "Authorization": "Bearer dxk_..." } } } } ``` -------------------------------- ### Dexio theme initialization and management script Source: https://app.dexio.wiki/signup JavaScript that reads the user's theme preference from cookies or localStorage, applies the theme, and provides a global dexioTheme object with apply and save methods. It also listens for system theme changes and uses View Transitions when supported. ```javascript (function () { var d = document.documentElement, C = {"dexio": ["#ffffff", "#0d1117"], "aubergine": ["#3f0e40", "#2e0b30"], "jade": ["#0b4d3b", "#0a3529"], "lagoon": ["#0c5460", "#0a3a43"], "indigo": ["#312e81", "#1e1b4b"], "rose": ["#9f1239", "#650c26"], "clementine": ["#fb8b3c", "#7a2a0a"], "sunflower": ["#f4c542", "#d9a92a"], "graphite": ["#2d333b", "#1c2128"]}, dark = null, still = null; try { dark = matchMedia("(prefers-color-scheme: dark)"); } catch (e) {} try { still = matchMedia("(prefers-reduced-motion: reduce)"); } catch (e) {} function pref() { var m = /(?:^|;\s*)dexio_theme=([a-z]+)\.(system|light|dark)/.exec(document.cookie); if (m && C[m[1]]) return [m[1], m[2]]; try { var old = localStorage.getItem("dexio-theme"); if (old === "light" || old === "dark") return ["dexio", old]; } catch (e) {} return ["dexio", "system"]; } function apply() { var p = pref(), mode = p[1]; if (mode === "system") mode = dark && dark.matches ? "dark" : "light"; d.dataset.theme = p[0]; d.dataset.mode = mode; var meta = document.querySelector('meta[name="theme-color"]'); if (meta) meta.setAttribute("content", C[p[0]][mode === "dark" ? 1 : 0]); return p; } apply(); function fade(change) { if (!document.startViewTransition || (still && still.matches) || document.visibilityState !== "visible") return change(); document.startViewTransition(change); } window.dexioTheme = { pref: pref, // the graph draws on a canvas, so it is told to repaint apply: function () { fade(function () { var p = apply(); window.dispatchEvent(new CustomEvent("dexio:theme", { detail: p })); }); return pref(); }, save: function (theme, mode) { document.cookie = "dexio_theme=" + theme + "." + mode + "; path=/; max-age=31536000; samesite=lax" + (location.protocol === "https:" ? "; secure" : ""); return this.apply(); } }; if (dark && dark.addEventListener) dark.addEventListener("change", function () { if (pref()[1] === "system") window.dexioTheme.apply(); }); document.addEventListener("DOMContentLoaded", apply); })(); ``` -------------------------------- ### Fetch agents.md with curl Source: https://dexio.wiki/guides/claude-memory Fetch the agents.md instructions raw so summarizing fetch tools do not drop its commands. Use this before following the OAuth device sign-in steps. ```bash curl -s https://dexio.wiki/agents.md ``` -------------------------------- ### Add Dexio MCP server with claude mcp add Source: https://dexio.wiki/guides/claude-code-memory Manually add the Dexio MCP server to Claude Code. Replace `dxk_...` with your API key. `--scope user` stores the server in `~/.claude.json` and makes it available in every project. The API key works like a password, so keep it out of commits and the wiki. ```bash claude mcp add --transport http --scope user dexio https://app.dexio.wiki/mcp \ --header "Authorization: Bearer dxk_..." ``` -------------------------------- ### Configure Claude Code to use the Dexio wiki in CLAUDE.md Source: https://dexio.wiki/guides/claude-code-memory Add this section to `~/.claude/CLAUDE.md` (or a project's `./CLAUDE.md`) to instruct Claude Code to use the Dexio wiki. It tells the agent to search and read wiki pages before working, update existing pages, pass `base_version` from `read_page`, use [[wikilinks]], and set the `agent` field to "Claude Code" on every change. ```markdown ## Dexio wiki - Keep notes in the Dexio wiki. - Before you work on a topic, search the wiki with `search_pages` and read what is there. - When you work out something that will be needed again, write it down. Update the page that exists instead of adding a duplicate. - Pass the `base_version` from `read_page` when you change a page. - Link related pages with [[wikilinks]]. - Put "Claude Code" in the `agent` field on every change. ``` -------------------------------- ### Verify Codex loaded AGENTS.md with codex --ask-for-approval never Source: https://dexio.wiki/guides/codex-mcp Run this command to confirm Codex loaded the AGENTS.md file. Codex should quote your items back if the instructions were loaded successfully. ```bash codex --ask-for-approval never "Summarize the current instructions." ``` -------------------------------- ### POST /api/v1/upload/{path} Source: https://dexio.wiki/agents Uploads a file to the wiki at a specified path. Returns a one-time URL valid for 15 minutes for uploading the file content. ```APIDOC ## [POST] /api/v1/upload/{path} ### Description Uploads a file to the wiki at the specified path. Returns a one-time URL valid for 15 minutes that can be used to send the file content. ### Method POST ### Endpoint `/api/v1/upload/{path}` ### Parameters #### Path Parameters - **path** (string) - Required - The path where the file will be stored, e.g., `raw/deck.pdf`. ### Request Example ```sh curl -sS --fail-with-body -T ./deck.pdf 'https://app.dexio.wiki/api/v1/upload/dxu_...' ``` ### Response #### Success Response (200) - **url** (string) - A one-time URL valid for 15 minutes to upload the file content. #### Response Example ```json { "url": "https://app.dexio.wiki/api/v1/upload/dxu_..." } ``` ``` -------------------------------- ### Create schema page and update Dexio skill Source: https://dexio.wiki/guides/muse-llm-wiki Send this message to Muse to create the schema page and update its Dexio skill to read the schema before any wiki work. ```text In my Dexio wiki, write a page at schema describing how this wiki works, starting from the layout below. Then add a line to your Dexio skill: read schema before any work in the wiki. ``` -------------------------------- ### Add Dexio API key to OpenClaw .env Source: https://dexio.wiki/agents Add this line to `~/.openclaw/.env` to set the Dexio API key. Replace `dxk_...` with the actual API key. ```sh DEXIO_API_KEY=dxk_... ``` -------------------------------- ### Command to connect an agent to a Dexio wiki Source: https://dexio.wiki/guides/agents-md This message, when sent to an agent that can run commands, instructs it to connect to the user's Dexio wiki by reading the steps at the provided URL. ```text Connect yourself to my Dexio wiki. Read the steps with curl -s https://dexio.wiki/agents.md and follow them. ``` -------------------------------- ### Prompt to create schema page Source: https://dexio.wiki/guides/grok-bot-llm-wiki Send this prompt to the agent to create a schema page in the Dexio wiki. The agent should show the page before saving. ```text Write a page called schema in my Dexio wiki, based on the draft below. Show me the page before you save it. ``` -------------------------------- ### Export the whole wiki with curl Source: https://dexio.wiki/agents Downloads the entire wiki as a zip file with one markdown file per page. Requires the DEXIO_API_KEY environment variable. ```sh curl -sS --fail-with-body -o wiki.zip -H "Authorization: Bearer $DEXIO_API_KEY" \ 'https://app.dexio.wiki/api/v1/export' ``` -------------------------------- ### Connect a Hermes profile to Dexio with HERMES_HOME Source: https://dexio.wiki/guides/hermes-agent-memory Run the connect script once per profile, setting HERMES_HOME to that profile's directory. The script deletes itself after each run, so Hermes writes it again for the next profile. ```bash HERMES_HOME=~/.hermes/profiles/research python3 /tmp/dexio_connect.py ``` -------------------------------- ### Query the wiki with citations Source: https://dexio.wiki/guides/muse-llm-wiki Use this prompt to have Muse read the index, search the wiki, and answer with the paths of pages it used. Answers worth keeping are stored under queries/. ```text What does my wiki say about our pricing options? Cite the pages. ``` -------------------------------- ### Contact Dialog and Attribution Script Source: https://dexio.wiki/guides/obsidian-mcp Initializes a contact dialog with topic selection (question, enterprise, help), handles form submission, and captures UTM parameters and referrer for attribution. Includes error handling to avoid breaking links. ```javascript var e=document.getElementById(`contact-dialog`),t={question:[`Ask a question`,`Ask anything about Dexio.`],enterprise:[`Talk to us about Enterprise`,`Tell us about your team and what you need.`],help:[`Get help with Dexio`,`Tell us what went wrong.`]};if(e&&typeof e.showModal==`function`){let n=e.querySelector(`.c-title`),r=e.querySelector(`.c-intro`),i=e.querySelector(`form.contact`),a=e.querySelector(`.c-done`);i.addEventListener(`contact:topic`,(i=>{let a=t[i.detail]?i.detail:`question`;e.dataset.topic=a,[n.textContent,r.textContent]=t[a]})),document.addEventListener(`click`,t=>{let n=t.target.closest?.(`[data-contact]`);!n||t.metaKey||t.ctrlKey||t.shiftKey||(t.preventDefault(),i.hidden=!1,a.hidden=!0,i.querySelector(`.c-err`).hidden=!0,i.dispatchEvent(new CustomEvent(`contact:set`,{detail:n.dataset.contact||`question`})),e.showModal(),i.elements.namedItem(`name`).focus())}),e.querySelector(`.c-close`).addEventListener(`click`,()=>e.close()),e.querySelectorAll(`.c-side a`).forEach(t=>t.addEventListener(`click`,()=>e.close())),e.addEventListener(`click`,t=>{let n=e.getBoundingClientRect(),{clientX:r,clientY:i}=t;t.target===e&&(r<n.left||r>n.right||i<n.top||i>n.bottom)&&e.close()})} ``` ```javascript (function () { try { var KEY = "dexio_src", src = JSON.parse(sessionStorage.getItem(KEY) || "null"); if (!src) { src = {}; var q = new URLSearchParams(location.search); ["utm_source", "utm_medium", "utm_campaign"].forEach(function (k) { var v = q.get(k); if (v) src[k] = v.slice(0, 100); }); if (document.referrer) { var host = new URL(document.referrer).hostname; if (host && !/(^|\.)dexio\.wiki$/.test(host)) src.ref = host; } src.landing = location.pathname.slice(0, 100); sessionStorage.setItem(KEY, JSON.stringify(src)); } document.addEventListener("click", function (e) { var a = e.target.closest && e.target.closest('a[href^="https://app.dexio.wiki/"]'); if (!a) return; var u = new URL(a.href); Object.keys(src).forEach(function (k) { if (!u.searchParams.has(k)) u.searchParams.set(k, src[k]); }); a.href = u.toString(); }, true); } catch (err) { /* attribution is optional; never break a link */ } })(); ``` -------------------------------- ### Add Dexio wiki instructions to ~/.codex/AGENTS.md Source: https://dexio.wiki/guides/codex-mcp Add this section to ~/.codex/AGENTS.md to give Codex standing instructions for using the Dexio wiki. It tells Codex to search the wiki with search_pages, read existing pages, update rather than duplicate, pass base_version from read_page, use [[wikilinks]], and set the agent field to "Codex" on every change. ```markdown ## Dexio wiki - Keep notes in the Dexio wiki. - Before you work on a topic, search the wiki with `search_pages` and read what is there. - When you work out something that will be needed again, write it down. Update the page that exists instead of adding a duplicate. - Pass the `base_version` from `read_page` when you change a page. - Link related pages with [[wikilinks]]. - Put "Codex" in the `agent` field on every change. ``` -------------------------------- ### Upload a file with curl Source: https://dexio.wiki/agents Uploads a file to the wiki using the one-time URL returned by upload_file. The URL is valid for 15 minutes. ```sh curl -sS --fail-with-body -T ./deck.pdf 'https://app.dexio.wiki/api/v1/upload/dxu_...' ``` -------------------------------- ### Configure Dexio MCP server Source: https://dexio.wiki/guides/claude-memory Add the Dexio MCP server to your configuration using the access token from the device flow. The header must be Authorization: Bearer access_token. ```text https://app.dexio.wiki/mcp ``` ```text Authorization: Bearer access_token ``` -------------------------------- ### Signup page CSS with button system Source: https://app.dexio.wiki/signup CSS for the signup page layout, form styling, and button system. Includes responsive sizing, focus states, and disabled states. The comment notes the button system was unified across app and site with three sizes and 8px corners. ```css box-sizing:border-box; } body { margin:0; min-height:100dvh; display:grid; place-items:center; padding:24px 16px max(24px,env(safe-area-inset-bottom)); /* the page takes a tint of the theme's header colour; none in the default */ background:color-mix(in srgb,var(--chrome) 8%,var(--sunken)); color:var(--text); --line:var(--line-strong); /* these pages draw every border one step firmer */ font:15px/1.5 ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif; -webkit-text-size-adjust:100%; } .card { width:100%; max-width:360px; } .top { display:flex; align-items:center; gap:.6rem; margin-bottom:1.5rem; } .logo { display:flex; align-items:center; gap:8px; color:var(--text); margin-bottom:.3rem; } .logo svg { display:block; flex:none; } .top b { font-size:1.05rem; font-weight:600; letter-spacing:-.01em; } .top span { color:var(--muted); font-size:.85rem; } .top .sp { flex:1; } form { background:var(--panel); border:1px solid var(--line); border-radius:10px; padding:1.5rem; } label { display:block; font-size:.78rem; text-transform:uppercase; letter-spacing:.06em; color:var(--muted); margin-bottom:.35rem; } input { width:100%; padding:.65rem .7rem; margin-bottom:1rem; min-height:44px; background:var(--field); color:var(--text); border:1px solid var(--line); border-radius:6px; font-size:16px; /* 16px or iOS Safari zooms the page on focus */ } input:focus { outline:none; border-color:var(--accent); box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 22%,transparent); } /* ---- buttons: one system for the app and the site (Forrest, 2026-09-28, option A of four). Three sizes: 44px (sign-in, a button beside a 44px input, a step's main action), 38px (settings forms, plan cards, the connect steps' Back and Next) and 32px (row actions, copy, the pager, Sign out). 8px corners. Primary darkens on hover and further when pressed. Outline buttons take a faint fill and a firmer border, never red; danger is an outline that turns solid red on hover. A 2px accent ring on keyboard focus, half opacity when disabled, and the page's font. They were five heights with 6px corners here and 8px on the site, four different hovers (Sign out went red), and no pressed, focus or disabled look. Colours: themes.py. */ button { font-family:inherit; } button[type=submit], a.button, a.cta, button.cta, button.copy, .social, button.quiet, button.danger { transition:background-color .12s ease,border-color .12s ease,color .12s ease; } button[type=submit] { width:100%; min-height:44px; border:1px solid transparent; border-radius:8px; background:var(--btn); color:var(--btn-text); font-size:15px; font-weight:600; cursor:pointer; } button[type=submit]:hover { background:var(--btn-hover); } button[type=submit]:active { background:var(--btn-press); } button:focus-visible, a.button:focus-visible, a.cta:focus-visible, .social:focus-visible { outline:2px solid var(--accent); outline-offset:2px; } button:disabled { opacity:.5; cursor:default; pointer-events:none; } .error { background:var(--bad-bg); border:1px solid var(--bad-line); color:var(--bad-text); border-radius:6px; padding:.55rem .7rem; margin-bottom:1rem; font-size:.88rem; } .foot { margin-top:1rem; text-align:center; color:var(--muted); font-size:.78rem; } .social { display:flex; align-items:center; justify-content:center; gap:.6rem; width:100%; min-height:44px; margin-bottom:.6rem; border:1px solid var(--btn-line); border-radius:8px; background:var(--panel); color:var(--text); font-size:15px; font-weight:600; text-decoration:none; } .social:hover { background:var(--btn-fill-hover); border-color:var(--btn-line-hover); } .social:active { background:var(--btn-fill-press); } .social svg { width:18px; height:18px; flex:none; } .or { display:flex; align-items:center; gap:.7rem; margin:.9rem 0 1rem; color:var(--muted); font-size:.75rem; text-transform:uppercase; letter-spacing:.06em; } .or:before, .or:after { content:""; flex:1; border-top:1px solid var(--line); } .terms { margin:.2rem 0 0; color:var(--muted); font-size:.75rem; text-align:center; } .terms a { color:var(--accent); } .foot a { color:var(--accent); text-decoration:none; } .foot a:hover { text-decoration:underline; } .ok { background:color-mix(in srgb,var(--accent) 10%,transparent); border:1px solid color-mix(in srgb,var(--accent) 40%,transparent); border-radius:6px; padding:.55rem .7rem; margin-bottom:1rem; font-size:.88rem; } .who { margin:0 0 1rem; color:var(--muted); font-size:.88rem; overflow-wrap:anywhere; } .who b { color:var(--text); font-weight:600; } h2 { font-size:1rem; margin:1.6rem 0 .6rem; } h2:first-child { margin-top:0; } p { margin:.4rem 0 .8rem; } .muted { color:var(--muted); font-size:.88rem; } .panel { background:var(--panel); border:1px solid var(--line); border-radius:10px; padding:1.25rem 1.5rem; margin-bottom:1rem; } form.inline { display:inline; background:none; border:0; padding:0; } form.inline button[type=submit], a.button { display:inline-flex; align-items:center; justify-content:center; ``` -------------------------------- ### Attribution tracking script for Dexio links Source: https://dexio.wiki/guides/hermes-agent-memory Stores UTM parameters, referrer, and landing path in sessionStorage under key 'dexio_src', then appends them to links pointing to app.dexio.wiki. Fails silently if storage or URL parsing errors occur. ```javascript (function () { try { var KEY = "dexio_src", src = JSON.parse(sessionStorage.getItem(KEY) || "null"); if (!src) { src = {}; var q = new URLSearchParams(location.search); ["utm_source", "utm_medium", "utm_campaign"].forEach(function (k) { var v = q.get(k); if (v) src[k] = v.slice(0, 100); }); if (document.referrer) { var host = new URL(document.referrer).hostname; if (host && !/(^\.)dexio\.wiki$/.test(host)) src.ref = host; } src.landing = location.pathname.slice(0, 100); sessionStorage.setItem(KEY, JSON.stringify(src)); } document.addEventListener("click", function (e) { var a = e.target.closest && e.target.closest('a[href^="https://app.dexio.wiki/"]'); if (!a) return; var u = new URL(a.href); Object.keys(src).forEach(function (k) { if (!u.searchParams.has(k)) u.searchParams.set(k, src[k]); }); a.href = u.toString(); }, true); } catch (err) { /* attribution is optional; never break a link */ } })(); ``` -------------------------------- ### Run Hermes Dexio connection script Source: https://dexio.wiki/agents Run this shell command to execute the Python script that connects Hermes to Dexio. The script saves the API key to the profile's `.env` as `MCP_DEXIO_API_KEY`, runs `hermes mcp add dexio`, and then deletes itself. Replace `SECRET` in the script with the API key or device code before running. ```sh python3 /tmp/dexio_connect.py ``` -------------------------------- ### Contact dialog with topic selection Source: https://dexio.wiki/blog/llm-wiki-broken-links Initializes a contact dialog using the <dialog> element. Sets titles and intros based on the selected topic (question, enterprise, help), handles opening via [data-contact] links, closes on backdrop click or close button, and focuses the name field. ```javascript var e=document.getElementById(`contact-dialog`),t={question:[`Ask a question`,`Ask anything about Dexio.`],enterprise:[`Talk to us about Enterprise`,`Tell us about your team and what you need.`],help:[`Get help with Dexio`,`Tell us what went wrong.`]};if(e&&typeof e.showModal==`function`){let n=e.querySelector(`.c-title`),r=e.querySelector(`.c-intro`),i=e.querySelector(`form.contact`),a=e.querySelector(`.c-done`);i.addEventListener(`contact:topic`,(i=>{let a=t[i.detail]?i.detail:`question`;e.dataset.topic=a,[n.textContent,r.textContent]=t[a]})),document.addEventListener(`click`,t=>{let n=t.target.closest?.(`[data-contact]`);!n||t.metaKey||t.ctrlKey||t.shiftKey||(t.preventDefault(),i.hidden=!1,a.hidden=!0,i.querySelector(`.c-err`).hidden=!0,i.dispatchEvent(new CustomEvent(`contact:set`,{detail:n.dataset.contact||`question`})),e.showModal(),i.elements.namedItem(`name`).focus())}),e.querySelector(`.c-close`).addEventListener(`click`,()=>e.close()),e.querySelectorAll(`.c-side a`).forEach(t=>t.addEventListener(`click`,()=>e.close())),e.addEventListener(`click`,t=>{let n=e.getBoundingClientRect(),{clientX:r,clientY:i}=t;t.target===e&&(r<n.left||r>n.right||i<n.top||i>n.bottom)&&e.close()})} ``` -------------------------------- ### Test Dexio MCP API key with curl Source: https://dexio.wiki/guides/codex-mcp Use this curl command to test the API key. Set DEXIO_TOKEN to your API key. A JSON-RPC result listing your pages (even none) means it works. ```bash curl -s https://app.dexio.wiki/mcp \ -H "Authorization: Bearer $DEXIO_TOKEN" \ -H 'Content-Type: application/json' \ -H 'Accept: application/json, text/event-stream' \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"list_pages","arguments":{}}}' ``` -------------------------------- ### Obsidian CLI commands for search, backlinks, unresolved, and daily notes Source: https://dexio.wiki/guides/obsidian-mcp Use these commands with the Obsidian CLI to control the desktop app from a terminal. Requires Obsidian 1.12.7 or later and the command line interface enabled in Settings. The app must be running; if not, the first command launches it. ```shell obsidian search query="meeting notes" obsidian backlinks file="Project Atlas" obsidian unresolved obsidian vault="Work" daily:append content="- [ ] Review the agent's notes" ``` -------------------------------- ### Probe Dexio MCP connection with openclaw mcp doctor Source: https://dexio.wiki/guides/openclaw-memory Run this command from a terminal to open a live MCP connection to Dexio and list what it offers. A result listing your pages (even none yet) means it works; HTTP 401 means the API key is wrong or was revoked. ```bash openclaw mcp doctor dexio --probe ``` -------------------------------- ### Ingest a source into the wiki Source: https://dexio.wiki/guides/muse-llm-wiki Use this prompt to have Muse read a source article, write a page under sources/, update related entity and concept pages, note contradictions, and update index and log. ```text Ingest this article into my wiki and follow the schema: <link> ``` -------------------------------- ### Share skills across profiles with external_dirs and create_dir Source: https://dexio.wiki/guides/hermes-agent-skills Configure a Hermes profile's config.yaml to share skills across profiles on one machine. Skills in external_dirs appear in the skill list and as slash commands; local skills override external ones with the same name. create_dir sends new agent-written skills to the shared folder so other profiles can find them. ```yaml skills: external_dirs: - ~/.agents/skills # read by every profile that lists it create_dir: ~/.agents/skills # where new agent-written skills go ``` -------------------------------- ### Add Dexio MCP server to OpenClaw openclaw.json Source: https://dexio.wiki/agents Add this JSON5 configuration to `~/.openclaw/openclaw.json` to register the Dexio MCP server. The `transport: "streamable-http"` is required because OpenClaw defaults to SSE, which Dexio does not serve. The gateway picks it up without a restart. ```json5 mcp: { servers: { dexio: { url: "https://app.dexio.wiki/mcp", transport: "streamable-http", headers: { Authorization: "Bearer ${DEXIO_API_KEY}" }, }, }, }, ``` -------------------------------- ### Contact dialog with topic selection and attribution tracking Source: https://dexio.wiki/guides/claude-memory Handles a contact dialog with predefined topics (question, enterprise, help). Tracks attribution parameters (utm_source, utm_medium, utm_campaign) and referrer, storing them in sessionStorage. Appends these parameters to links pointing to app.dexio.wiki. ```javascript var e=document.getElementById(`contact-dialog`),t={question:[`Ask a question`,`Ask anything about Dexio.`],enterprise:[`Talk to us about Enterprise`,`Tell us about your team and what you need.`],help:[`Get help with Dexio`,`Tell us what went wrong.`]};if(e&&typeof e.showModal==`function`){let n=e.querySelector(`.c-title`),r=e.querySelector(`.c-intro`),i=e.querySelector(`form.contact`),a=e.querySelector(`.c-done`);i.addEventListener(`contact:topic`,(i=>{let a=t[i.detail]?i.detail:`question`;e.dataset.topic=a,[n.textContent,r.textContent]=t[a]})),document.addEventListener(`click`,t=>{let n=t.target.closest?.(`[data-contact]`);!n||t.metaKey||t.ctrlKey||t.shiftKey||(t.preventDefault(),i.hidden=!1,a.hidden=!0,i.querySelector(`.c-err`).hidden=!0,i.dispatchEvent(new CustomEvent(`contact:set`,{detail:n.dataset.contact||`question`})),e.showModal(),i.elements.namedItem(`name`).focus())}),e.querySelector(`.c-close`).addEventListener(`click`,()=>e.close()),e.querySelectorAll(`.c-side a`).forEach(t=>t.addEventListener(`click`,()=>e.close())),e.addEventListener(`click`,t=>{let n=e.getBoundingClientRect(),{clientX:r,clientY:i}=t;t.target===e&&(r<n.left||r>n.right||i<n.top||i>n.bottom)&&e.close()})} (function () { try { var KEY = "dexio_src", src = sessionStorage.getItem(KEY) || "null"; if (!src) { src = {}; var q = new URLSearchParams(location.search); ["utm_source", "utm_medium", "utm_campaign"].forEach(function (k) { var v = q.get(k); if (v) src[k] = v.slice(0, 100); }); if (document.referrer) { var host = new URL(document.referrer).hostname; if (host && !/(^\.)dexio\.wiki$/.test(host)) src.ref = host; } src.landing = location.pathname.slice(0, 100); sessionStorage.setItem(KEY, JSON.stringify(src)); } document.addEventListener("click", function (e) { var a = e.target.closest && e.target.closest('a[href^="https://app.dexio.wiki/"]'); if (!a) return; var u = new URL(a.href); Object.keys(src).forEach(function (k) { if (!u.searchParams.has(k)) u.searchParams.set(k, src[k]); }); a.href = u.toString(); }, true); } catch (err) { /* attribution is optional; never break a link */ } })(); ``` -------------------------------- ### OAuth Device Sign-in: Request Device Code Source: https://dexio.wiki/privacy POST to https://app.dexio.wiki/api/v1/device/code with JSON body {"client_name": "your name"} to initiate the OAuth device sign-in flow. The response contains verification_uri_complete and user_code to show the user. ```http POST https://app.dexio.wiki/api/v1/device/code Content-Type: application/json {"client_name": "your name"} ``` -------------------------------- ### Configure MCPVault in Claude Code Source: https://dexio.wiki/guides/obsidian-mcp Claude Code configuration for the MCPVault server in ~/.claude.json. Requires Node.js 20 or later and the vault path. The server runs as a local process and does not require Obsidian to be open. ```json { "mcpServers": { "obsidian": { "command": "npx", "args": ["@bitbonsai/mcpvault@latest", "/path/to/your/vault"], "env": {} } } } ```