Discourse-based Zettelkasten in Aisystant

We’ve seen in practice that regularly writing notes — both private and public — helps shape thinking and preserve knowledge. We follow in the spirit of Niklas Luhmann, Sönke Ahrens, and other researchers who view writing as a fundamental tool for thought.

One of the core goals of Aisystant is to provide users with a reliable tool for thinking through writing and maintaining a public blog, where feedback is always tied to context — such as referenced literature or surrounding ideas.

To support practices like exocortex building, Zettelkasten-style note-taking, and public knowledge management, we use Discourse as the core platform. We’ve used Discourse for years to support our students, publish posts, and run our learning community. It offers:

  • a convenient Markdown editor,

  • support for internal linking and backlinks between notes,

  • simple publishing and sharing workflows,

  • a clean and pleasant web interface.

Current implementation of the exocortex

We’ve built several mechanisms on top of Discourse to enable exocortex-like workflows:

  • Inbox notes (ephemeral notes) are quick, disposable thoughts that aren’t meant for long-term storage — they’re either deleted or processed shortly after capture. These are implemented as private messages from a special user, Aisystant Inbox Bot. All inbox messages are stored in the user’s message inbox within the community forum.

  • Each user is assigned:

    • a private “drafts” category for working notes,

    • a public “blog” category, which serves as their personal writing space. It’s intended for publishing anything — including raw, unpolished thoughts.

  • We also provide a Telegram bot that allows users to quickly send inbox notes on the go.

Integration with the LMS and its limitations

To connect Discourse with our LMS, we developed a custom adapter that proxies requests to the Discourse API and secures them using our internal authentication system. While this solution is functional and in production, it has proven difficult to scale:

  • It doesn’t implement semantic or domain-level logic — only low-level forwarding of Discourse objects.

  • For example, retrieving a list of inbox notes required calling the message list API and filtering messages from the Inbox Bot on the client side.

  • The logic for interpreting Discourse structures (e.g. distinguishing inbox from drafts) was implemented entirely on the client.

  • We couldn’t expose this API to external developers due to:

    • the lack of domain abstractions,

    • custom authentication mechanisms,

    • and the need to deeply understand Discourse internals to build anything useful.

New architecture: functional API

We’re now transitioning to a new architecture based on a dedicated Exocortex API, which exposes clean domain-level concepts and encapsulates the underlying storage implementation. Instead of working with Discourse primitives like posts or categories, the API deals with actual user-facing concepts:

  • inbox — quick, ephemeral notes;

  • draft — private notes still in progress;

  • blog — the user’s open space for publishing anything, including rough or unpolished material;

  • public post — polished entries published to shared feeds or front pages.

There’s no longer any need for client-side logic to transform raw data into meaning — everything is expressed through a consistent, high-level interface.

This change enables:

  • custom client apps tailored for different devices and workflows;

  • integration with AI agents for parsing inbox notes, drafting responses, refactoring content, or extracting structure;

  • integration with external systems like Obsidian, Logseq, or other PKM tools;

  • support for LLM interaction via MCP (Message → Context → Prompt) — a unified protocol for large language model agents to operate within the user’s knowledge context;

  • seamless ingestion of notes from multiple sources: Telegram, email, voice commands, and more.

Platform structure

API Draft
  • This is not official or final service documentation — just a rough outline before development begins.
  • Scope
    • exocortex:read
    • exocortex:write
  • Methods
    • status
      • GET /status
        • Get exocortex activation status
        • Response (based on current implementation via the community forum):
          • ready: bool, true if ready
          • details
            • Not registered — no forum account
            • Not activated — account exists, but required sections are missing
            • Activated
    • search
      • GET /search
    • inbox
      • GET /inbox
        • Get inbox list
        • Params:
          • pagination
      • GET /inbox/{id}
        • Get specific inbox note
      • POST /inbox
        • Create inbox note
        • Params:
          • body — content of the ephemeral note
          • url — (optional) context page URL
          • context — selected text, quote, or relevant content from the page
        • Response:
          • status
      • DELETE /inbox/{id}
        • Delete inbox note
    • drafts
      • GET /drafts
        • Get list of drafts
        • Params:
          • pagination
      • GET /drafts/{id}
        • Get specific draft
      • POST /drafts
        • Create draft
        • Params:
          • title
          • body
      • PATCH /drafts/{id}
        • Edit draft
      • DELETE /drafts/{id}
        • Delete draft
      • POST /drafts/{id}/publish
        • Publish draft
    • blogs
      • GET /blog
        • Get list of blog posts
      • GET /blog/{id}
        • Get specific post
      • POST /blog
        • Create post
      • PATCH /blog/{id}
        • Edit post
    • public
      • Not implemented yet

Flexibility and future directions

By separating business logic from backend infrastructure, we can easily replace or extend Discourse with other storage solutions. In the future, this opens the door to:

  • embedding-based semantic search,

  • meaningful knowledge navigation through graph structures,

  • ontology-aware note structuring,

  • and advanced agent collaboration within the user’s knowledge space.