incognide

repository·main·Indexed 19 days ago

https://github.com/npc-worldwide/incognide

A unified workspace integrating chat, code editing, document management (Office, PDF, LaTeX), web browsing, and 3D model viewing. It features intelligent context, composable automations via Jinx workflows, and support for both Cloud AI (OpenAI, Anthropic, Gemini) and Local AI providers (Ollama, LM Studio, llama.cpp, oMLX). The platform includes tools for knowledge graph exploration, agent memory management, and NPC persona customization.

Tokens
14.1K
Snippets
55
Records
69
Agent score
66%

What's inside incognide

  1. Manage AI Agents and Teams

    main

    You can control the behavior and history of your AI personas through several interfaces:

    • NPC Editor: Create and customize AI personas by defining specific directives, selecting models, and assigning capabilities.
    • Agent History: Track the actions and execution history of your agents.
    • Team Management: Manage both global and project-specific context for an entire team of agents.
  2. Use Jinx Workflows for Automation

    main

    A Jinx is a reusable automation template that combines natural language prompts with code execution.

    Key features include:

    • Jinx Editor: Create and modify workflow templates.
    • Jinx Execution: Run workflows with custom parameters.
    • SQL Jinx: Create specialized jinxes designed to query databases.
    • Agents in SQL: Use NPC personas directly within SQL models to perform advanced analyses, leveraging native graph computations provided by SQL engines.
  3. Explore Knowledge Graphs and Memory Management

    main

    Incognide provides tools for research and knowledge management:

    • Graph Explorer: Navigate and edit knowledge graphs that are automatically built from your conversations to explore connections between concepts and entities.
    • Memory Management: Review, edit, and organize what your agents remember using CRUD operations.
    • Agent Memories: Inspect the specific context and information agents have learned from past conversations.
  4. Configure Local Python Environment for Fine-tuning

    main

    Incognide uses an external Python virtual environment (venv) for heavy tasks like fine-tuning to keep the main executable small. To set this up:

    1. Open Team Management (Users icon in the right sidebar or settings screen).
    2. Navigate to the Python Env tab.
    3. Select an environment:
      • Detected: Automatically finds venvs, pyenv, conda, or uv environments.
      • Create new venv: Creates a new environment at <workspace>/.venv.
      • Custom path: Manually point to an existing Python interpreter.
    4. Click Install packages and select a bundle:
      • PyTorch (CPU): torch torchvision torchaudio
      • PyTorch (CUDA): torch torchvision torchaudio + CUDA index
      • Diffusers (Image Gen): diffusers transformers accelerate safetensors
      • Transformers (LLM): transformers accelerate safetensors sentencepiece
      • Whisper (Speech): openai-whisper
      • Or install any specific package by name.
  5. Complete the First Launch Setup Wizard

    main

    On the first launch, a five-step wizard guides you through initial configuration:

    1. Welcome: Introduction screen.
    2. Preferences: Set your theme (dark/light) and define the data directory for teams, models, and configs (default is ~/.incognide).
    3. Defaults: Select your default web search engine, default terminal shell (auto-detected: system/zsh/bash on macOS/Linux, powershell on Windows), and opt-in to local activity tracking for next-action predictions.
    4. Usage path: Choose your AI mode:
      • No AI: Workspace only (files, code, browsers, terminals, docs, maps). No model calls.
      • Cloud AI: Use OpenAI, Anthropic, Gemini, etc., via API keys.
      • Local AI: Use Ollama, LM Studio, llama.cpp, or oMLX running on your machine.
    5. Cloud keys (if Cloud AI) or Local models (if Local AI).
  6. Schedule Tasks with Cron Jobs

    main

    You can automate workflows by scheduling jinxes and agents to run via Cron jobs. Common automated tasks include:

    • Memory extraction
    • Knowledge graph evolution (using sleep/dream cycles)
    • Context compression

    You can configure guidance context to focus these extractions on specific topics. Scheduling can be initiated directly from the Memory Manager or the Knowledge Graph Editor.

  7. Install and Run Incognide (Manual Setup)

    main

    To set up Incognide manually, ensure you have the following prerequisites:

    • npcpy (Core Python library)
    • npcts (React component library, installed via npm)
    • Node.js 16+ and npm
    • Ollama (optional, for local models)

    Follow these steps to clone, install, and run the application:

    # 1. Clone and install dependencies
    git clone https://github.com/npc-worldwide/incognide.git
    cd incognide
    npm install
    
    # 2. Run the components
    python incognide_serve.py   # Start the Backend
    npm run dev                   # Start the Frontend (Vite)
    npm start                     # Start the Electron app
  8. Connect Local Model Providers

    main

    Incognide can connect to local LLM providers by probing specific ports and binary locations. The Model Manager allows you to Start/Stop these services.

    ProviderServer PortBinary / App Checks
    Ollama11434ollama in PATH; /Applications/Ollama.app on macOS
    LM Studio1234lms in PATH; /Applications/LM Studio.app on macOS
    llama.cpp8080llama-server, llama-cli, or koboldcpp in PATH
    oMLX8000omlx in PATH; /Applications/oMLX.app (macOS only)

    Starting and Stopping Providers

    • Ollama: Start with open -a Ollama (macOS) or ollama serve (Linux). Stop via pkill -f 'ollama serve' or the Windows system tray.
    • LM Studio: Use lms server start / lms server stop if the lms CLI is present; otherwise, use the Developer tab in the app.
    • llama.cpp: Incognide provides the exact command to run (e.g., llama-server -m <model.gguf> --port 8080). Stop via pkill -f llama-server.
    • oMLX: Use open -a oMLX (macOS) and manage the server via the menu-bar icon.

    Note: GGUF/GGML model files can be loaded directly without a server only if llama.cpp or koboldcpp is installed.

    # Example llama.cpp start command provided by Incognide
    llama-server -m <model.gguf> --port 8080
  9. Connect Cloud AI Providers

    main

    To use Cloud AI, add your API keys during the setup wizard's Cloud keys step. You can also add or update them later via:

    • Settings $\rightarrow$ Global Settings
    • Team Management $\rightarrow$ API keys

    Keys are stored in ~/.incogniderc using the format: export <PROVIDER>_API_KEY=....

  10. Use StudioContext to manipulate the Studio UI

    main

    The StudioContext object is passed to every action handler, allowing developers to interact with the Studio's environment. Key capabilities include:

    • Layout Management: performSplit, closeContentPane, setRootLayoutNode, and setActiveContentPaneId allow for structural changes to the workspace.
    • Content Interaction: contentDataRef provides a mutable reference to the current content data, and updateContentPane allows refreshing content.
    • Pane/Tab Navigation: handleAddTab, handleTabClose, handleTabSelect, and toggleZenMode manage the lifecycle and visibility of UI elements.
    • Utility: generateId for creating unique identifiers and findPanePath for locating specific nodes within the layout tree.
    export interface StudioContext {
      rootLayoutNode: any;
      contentDataRef: React.MutableRefObject<Record<string, any>>;
      activeContentPaneId: string;
      setActiveContentPaneId: (id: string) => void;
      setRootLayoutNode: (node: any) => void;
      performSplit: (targetPath: number[], side: string, contentType: string, contentId: string, targetPaneId?: string) => void;
      closeContentPane: (paneId: string, nodePath: number[]) => void;
      updateContentPane: (paneId: string, contentType: string, contentId: string, skipMessageLoad?: boolean) => void;
      handleAddTab?: (paneId: string, contentType: string) => void;
      handleTabClose?: (paneId: string, tabIndex: number) => void;
      handleTabSelect?: (paneId: string, tabIndex: number) => void;
      toggleZenMode?: (paneId: string) => void;
      generateId: () => string;
      findPanePath: (node: any, paneId: string, path?: number[]) => number[] | null;
      notifyPaneUpdate?: (paneId: string) => void;
      windowId?: string;
      currentPath?: string;
    }