Inno Agent: a personal learning agent with three memory layers, a cron scheduler and a Practice Lab
An open-source personal learning agent with three-layer memory (learner profile / wiki knowledge base / cross-conversation recall), a proactive scheduler, personal IM channels, and a workspace-scoped Practice Lab — built on the Pi SDK.
At a glance
- What is it?
- Inno Agent is an open source personal learning agent built on the Pi coding-agent SDK without patching its kernel. It splits memory into a learner profile, a native wiki and cross-conversation recall, and it is explicit about being single-user, single-session software.
- Who is it for?
- Take Inno Agent if you are studying alone over months and want the thing that remembers you: a learner profile you can inspect and correct, a wiki that accumulates, and a scheduler that brings material back. Do not take it for a team, a classroom or anything shared, because the README states there is no auth model, no tenant isolation and no horizontal scaling, and one busy session answers 409 session_busy rather than queueing.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 2 days ago.
- What is it written in?
- Mainly TypeScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 17, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
What Inno Agent is aiming at
Inno Agent is a personal learning agent, and the README opens by explaining why education is a different target from software engineering. General-purpose coding agents optimise for open-ended engineering work, while the value in learning support lies in personalised explanation, misconception diagnosis, exercise generation, feedback, review scheduling, privacy and low-latency continuous interaction. So the project organises long-term learning support into three explicit memory layers and wraps them in a loop: a cron scheduler, personal IM channels, and a Practice Lab with an in-browser terminal. It is built on the Pi coding-agent SDK without modifying its kernel, which means all learning behaviour is added through registered tools and one extension hook, and the runtime stays upstream-compatible.
Three memory layers, and why they are separate
The memory design is the substance of the project. L1 is a learner profile holding goals, knowledge states, misconceptions and preferences, summarised into a context pack injected each turn, and the README states that the profile is inspectable and editable by the learner and that unevidenced labels are forbidden. L2 is a native wiki of human-readable, agent-queryable pages with hybrid retrieval combining lexical BM25 and a knowledge graph, LLM-assisted summarisation, and ingestion of PDF, Office and image files. L3 indexes session history into SQLite with FTS5 and does threshold-gated cross-conversation retrieval. The reason for three layers rather than one flat summary is lifecycle: learner state, archived knowledge and recent dialogue change at different rates. The second stance in the README is the one that makes this more than a data model: anything that affects future teaching is written to L1 or L2 through tools rather than left in a reply, so personalisation is evidence-driven and traceable.
Three front ends, and how to run the server
There are three ways in, and they share the same runtime state. The desktop app is Electron, with installers for macOS and Windows. The web UI is React 19 and Tailwind 4 over a Node HTTP server with SSE streaming, exposing a terminal, a wiki graph, jobs, skills and settings. The terminal CLI, invoked as inno, is a pure TUI agent with no HTTP involved. On the desktop and from source, the first launch creates a default config at ~/.inno-agent/config/config.json, where you put your provider API key, or you can do it in the app settings. Providers are pluggable: any openai-completions or anthropic-messages endpoint works, covering Anthropic, OpenAI, DeepSeek, Ollama and local models, and you can switch models live in the UI. Running the server build from a checkout is two npm scripts.
npm run build
npm run serverThe repository also ships a Docker setup that pins the whole layout through environment variables: INNO_CONFIG_DIR, INNO_DATA_DIR, INNO_SKILLS_DIR and INNO_WORKSPACE_DIR, with INNO_PORT defaulting to 3000, each bound to a host directory so configuration, data, skills and the workspace survive a container rebuild. Node 20.6.0 or newer is required. The Dockerfile notes that python3 is needed at runtime for the pptx to svg preview converter and installs python3, make and g++ for the native node-pty module.
The Practice Lab, the scheduler and the IM channels
Two features are worth singling out because they are not obvious from the memory model. The Practice Lab is a workspace-scoped web terminal running xterm.js over WebSocket, and what the agent gets back is not a screenshot but run records it can read, so a wrong answer in an exercise is something it can inspect rather than guess at. The scheduler takes cron jobs created in natural language and runs them from the agent, the UI or the daemon, which is what turns review scheduling into a behaviour rather than a reminder you set yourself. Alongside those, personal IM channels cover Feishu natively and WeChat through iLink QR login or bridge mode, with a unified dispatcher for reminders, and Simple Mode adds one-click preset workspaces for lesson plans, PPT creation and scenario explanation aimed at non-technical users.
What it deliberately does not do
The non-goals section is the most useful part of the README, because it tells you when to walk away. There is one process with one active agent session: a single in-memory prompt queue serialises all work, and sessions, workspaces and channels share it, with session switching swapping session files in place rather than running a pool. There is no multi-user concurrency and no horizontal scaling, no auth model, no tenant isolation and no sharded state, and the guidance for a team is to run one instance per person. Backpressure is treated as a feature: when the queue is busy, cross-session operations answer 409 session_busy with blocker details instead of silently queuing for minutes, and the UI surfaces it so you can finish or abort the blocking turn. For a tool that watches how one person learns, that is a defensible trade. For a classroom or a team, it is the wall.
A general agent with your notes, or an SRS app
The comparison that matters is with a general-purpose coding agent pointed at your notes. That gives you a capable model, your files, and nothing that persists about you: no learner profile, no misconception tracking, no review schedule, and no scheduled nudges, because nothing writes durable facts anywhere. The other pole is spaced repetition software such as Anki, which does review scheduling extremely well and explains nothing, because it has no model of what you misunderstood. Inno Agent sits between them and pays for it in operational complexity: three memory layers to keep coherent, a scheduler, channels, and a single-writer queue that will tell you it is busy. If you only need scheduling, use the scheduler. If you only need a tutor per session, a general agent is lighter.
Licence, privacy switches and upkeep
Inno Agent is MIT licensed and written in TypeScript, with a package.json at version 0.6.2 declaring workspaces for the agent, the web UI and a showcase app. Two privacy details deserve attention. All state lives in directories you control, and the example environment file ships LOG_LLM_BODY commented out and off by default, with a comment that turning it on puts prompts, the learner profile and model output into log/server-*.log, so only metadata such as URL, status, timing and body sizes is logged otherwise. On upkeep, the last push was on 2026-09-17 and releases are frequent, with v0.6.2 on 2026-09-16, v0.6.1 on 2026-09-14 and v0.6.0 on 2026-09-13, the last of which added a study check-in system and streamed manual task runs into the conversation. The September 2026 web UI rebuild is described as moving to the InnoSpark design language with light and dark themes, preset workspaces on the welcome page and streaming Markdown that renders Mermaid, SVG and ECharts.
Editorial conclusion
Take Inno Agent if you are studying alone over months and want the thing that remembers you: a learner profile you can inspect and correct, a wiki that accumulates, and a scheduler that brings material back. Do not take it for a team, a classroom or anything shared, because the README states there is no auth model, no tenant isolation and no horizontal scaling, and one busy session answers 409 session_busy rather than queueing. Before you commit, decide where the state lives: point INNO_CONFIG_DIR, INNO_DATA_DIR, INNO_SKILLS_DIR and INNO_WORKSPACE_DIR at directories you back up, since the learner model is the asset.
Frequently asked questions
What are the three memory layers in Inno Agent?
L1 is the learner profile, holding goals, knowledge states, misconceptions and preferences, summarised into a context pack each turn and editable by the learner. L2 is a native wiki with hybrid BM25 and knowledge graph retrieval plus PDF, Office and image ingestion. L3 indexes session history into SQLite FTS5 for threshold-gated cross-conversation recall.
Can Inno Agent run more than one user at a time?
No. The README lists no multi-user concurrency and no horizontal scaling as explicit non-goals, with no auth model, no tenant isolation and no sharded state, and advises running one instance per person. A single in-memory prompt queue serialises all work across sessions, workspaces and channels.
Which model providers does Inno Agent support?
Any openai-completions or anthropic-messages endpoint, with Anthropic, OpenAI, DeepSeek, Ollama and local models named, and models switchable live in the UI. Keys go in ~/.inno-agent/config/config.json created on first launch, or through the in-app settings.
Community notes