个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Desktop workspace for coding, research and writing, built on pi.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗One desktop workspace for coding, research and writing, powered by the pi agent.
Three focused modes share one window, your pi sessions and your logins. Each has its own tools, extensions and model, so the agent fixing your code is not the one citing your sources.
Features · Quick start · How it works · Extensions · Roadmap · Contributing
Terminal agents are great until you want to see what happened. Trivium keeps the agent's work in view: every step it took and how long it took, the question it is waiting on, the exact diff it left behind. And because coding, research and writing need different tools, it gives each its own mode instead of one prompt that tries to do everything.
Under the hood it is pi, embedded through its SDK. Your sessions are ordinary pi sessions, so you can open them in the pi CLI too, and every pi extension, skill and provider works here.
| Mode | Built for | Default setup | |
|---|---|---|---|
| Code | Fixing and building software | read bash edit write, plus a panel with Changes, Git, Preview and Services | |
| Research | Reading sources and writing notes | No shell; read write grep find ls and any web_* tools; told to cite every claim | |
| Write | Documents in your project | Edit tools; told to keep your voice and make small, reviewable edits |
Switch with ⌘1 ⌘2 ⌘3. Sessions keep running in the background; a dot on the switcher tells
you which mode is still busy.
pi-subagents call shows who it delegated to and what each child is doing, a row per child in parallel, with its task, result, model and tokens when you open it. Background results arrive as a run of their own.↵ queues a follow-up for after the run, ⌥↵ steers the current run, esc stops.Attach files with the paperclip, drag them onto the message box, or paste a screenshot. Images are converted and resized the way pi's CLI does it; text files go in as <file> blocks. The conversation shows what was attached, and the message box warns when the chosen model can't read images.
A project with its own .pi folder (settings, extensions, skills, prompts, MCP servers) can run code. Trivium asks before loading it, like pi's CLI: Trust, Just this time or Don't trust. Decisions go to pi's trust.json, so the CLI remembers them too, and pi's defaultProjectTrust setting is respected.
/ for commands. The list shows extension commands, prompt templates and skills, plus Trivium's /compact [instructions] and /name <title>. Commands that offer suggestions, such as /mcp login <server>, complete their arguments too. After a compaction, by /compact or automatic, the earlier messages stay on screen above a divider; the agent works from the summary.~/.pi/agent/mcp.json and a trusted project's .pi/mcp.json connect when a session starts. /mcp shows their status.mcpServers JSON pasted from Claude, Cursor or VS Code, and edits, removes or switches them off. Each shows whether it is connected, needs sign-in (with a Sign in button) or is failing, and lists its tools. Choose how tools reach the agent, for the whole server or per tool: code mode, on search, always or off. Changes go to pi's global mcp.json, so the pi CLI sees them too.When an extension asks something (select, confirm, input, editor), the question appears
in the conversation as a card. Answer with 1–9, ⌘↵ or esc. If a session in the background
needs you, you get a notification.
Code mode's side panel shows one view at a time, picked from its Show in panel menu.
npm run dev &. Each shows its command, processes, the port it listens on and its latest output, with Stop, which ends it and everything it started. Open its address in Preview or the browser. A green dot in the header and the sidebar says a session has some running. Services keep running when a session is unloaded, and stop when the session is deleted or Trivium quits, which asks first. If Trivium crashes, they show again at the next start.The header shows the session's branch, how many files changed, and a dot when there are commits to push or pull. Click it for a summary in words: the upstream and when it was last fetched, commits not pushed and on the remote, what is staged or changed, and a button to ask the agent to push.
Every mode remembers across sessions through the built-in @pify/memory:
a global MEMORY.md, one per project in .pi/memory/MEMORY.md, and a daily log. It refuses to save
credentials. The Memory page, opened from the sidebar, shows what the agent remembers
everywhere, in each workspace and in the daily log. Add, edit, move to the top or delete entries, with
Undo and a Recently deleted list. A meter shows how much of each file loads into new sessions. Each
workspace has a switch for whether its sessions load the file, and can keep it out of git on this
computer.
Settings → Usage adds up tokens and estimated cost from every session over the last 7 days, 30 days or all time: totals with the change from the period before, the share of input read from cache, a bar for each day, and breakdowns by mode, by model and for the biggest sessions. A calendar of the last 12 months shows your active days and streak. Point at a model's response count for its average time to first token and output speed. Models used through a subscription login show "Plan" instead of a cost.
~/.trivium/apps/<app>/extensions/, add one from anywhere, or switch off anything pi would load for that mode. The Add extension dialog recommends pi packages for each mode./plan and a permission system in Code, document parsing in Research, and PDF export in Write.rm -rf, sudo, git push and folders outside the project), every command, every command and edit, or nothing. .env files stay blocked.models.json, so the pi CLI offers them too.pi, then /login).Download the latest build from GitHub Releases.
On macOS, choose the arm64 (Apple Silicon) or x64 (Intel) DMG and drag Trivium to Applications.
On Windows, download the ZIP, extract the whole archive once, and run Trivium.exe inside
the extracted folder. Keep its accompanying files together. The app includes its runtime.
The older self-extracting portable EXE remains available in v0.1.0, but starts more slowly.
These preview builds are unsigned; macOS builds are not notarized. If macOS blocks the first
launch, allow Trivium in System Settings → Privacy & Security.
Building from source requires Node.js 22.19 or newer.
git clone https://github.com/SkarnerV/Trivium.git
cd Trivium
npm install --ignore-scripts
node node_modules/electron/install.js
npm start
npm install --ignore-scripts skips dependency install scripts; the second command downloads the
pinned Electron runtime.
On Windows, npm start creates and caches a private Trivium.exe runtime under
dist/runtime/, with Trivium's executable icon and product name. It does not modify the
Electron installation in node_modules. Use npm start rather than electron . to avoid
Electron's default executable/taskbar icon. This development runtime is unsigned; it is not
an installer or a signed release build. On startup, Trivium registers its Start Menu shortcut
and migrates old Trivium-owned shortcuts and taskbar identity away from the default Electron
branding. Other Electron applications' shortcuts are left untouched. Close existing Trivium
windows before restarting so the old taskbar group can exit.
| Keys | Action |
|---|---|
⌘1 ⌘2 ⌘3 | Switch to Code, Research, Write |
⌘N | New session |
⌘K | Search sessions in every mode |
⌘\ | Fold or unfold the sidebar |
⌘, | Settings |
↵ / ⌥↵ | Send (queues while a run is going) / steer the run |
/ | Commands, with suggestions; tab completes |
esc | Stop the run, dismiss a question, close a dialog |
On Windows, ⌘ is Ctrl and ⌥ is Alt.
flowchart LR
subgraph Window["Renderer (React)"]
UI["Sidebar · Transcript · Composer<br/>Changes · Git · Preview · Services<br/>Memory · Settings"]
end
subgraph Main["Main process (Node)"]
Host["Session host<br/>one AgentSession per open session"]
Tracker["Run tracker<br/>events → steps"]
Changes["Change tracker<br/>baselines → diffs"]
Git["Git reader<br/>status → branch, files"]
Dialogs["Dialog bridge"]
end
subgraph Pi["pi SDK"]
Session["AgentSession"]
Ext["Extensions · skills · prompts"]
Models["Model runtime · logins"]
end
UI <-- "IPC (window.trivium)" --> Host
Host --> Session
Session -- events --> Tracker --> UI
Ext -- "tool_call (edit, write)" --> Changes --> UI
Tracker -- "run ended" --> Git --> UI
Ext -- "ui.select / confirm / input" --> Dialogs --> UI
Session --> Models
AgentSessions with the pi SDK, with no CLI subprocess and no RPC framing.~/.pi/agent/sessions and logins in ~/.pi/agent/auth.json. Trivium adds only its own preferences in ~/.trivium.| Path | What it holds |
|---|---|
~/.pi/agent/ | pi's settings, logins, models and sessions, shared with the pi CLI |
~/.trivium/apps/<app>/extensions/ | Extensions loaded only for that mode |
~/.trivium/settings.json | Language, text size, idle unloading, notifications, per-mode models and extension switches |
~/.trivium/session-apps.json | Which mode each session belongs to; sessions from elsewhere show under Code |
~/.trivium/changes/ | File contents from before the agent's changes, until you keep or revert |
~/.trivium/chats/ | The working folder for sessions started with No project |
~/.trivium/usage-cache.json | Each session's usage totals, counted again only when its file changes |
~/.pi/agent/memory/, .pi/memory/MEMORY.md | Global and per-project memory, kept by @pify/memory |
Any pi extension works in Trivium. To load one in a single mode, put it in that mode's folder:
// ~/.trivium/apps/research/extensions/cite-check.ts
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
export default function (pi: ExtensionAPI) {
pi.registerCommand("cite", {
description: "Check the citations in the last answer",
handler: async (_args, ctx) => {
const ok = await ctx.ui.confirm("Check citations", "Fetch every cited URL?");
if (ok) ctx.ui.notify("Checking citations…");
},
});
}
Dialogs from ctx.ui show up as cards in the conversation; notify shows a toast. Extensions you
install for pi itself (in ~/.pi/agent or as pi packages) load in every mode unless you switch
them off in that mode's settings.
npm run check # type-check
npm start # build and launch
npm run dev # launch and rebuild on save
npm test # run the test suite
npm run package -- --win --x64 --publish never # Windows ZIP
npm run package -- --mac --arm64 --publish never # macOS DMG (run on macOS)
Packages are written to release/. Pushing a version tag such as v0.1.0 runs the release
workflow on Windows and both Mac architectures. It checks and launches each packaged app,
then publishes the Windows ZIP and two macOS DMGs together on GitHub Releases. Windows
startup checks fail if the packaged app does not become ready within 20 seconds on the runner.
npm run dev reloads the window when renderer or preload code changes (the selected session
reopens), applies styles.css without a reload, and restarts the app when main-process code
changes.
You don't need a real provider to work on the UI. TRIVIUM_DEV_FAUX=1 loads a scripted model,
trivium-faux/scripted, that plays a whole bug fix: it reads a file, runs commands, asks a
question, edits, writes a test and explains. A prompt that mentions "server" starts a small web
server in the background instead, for the Services view. Keep test runs out of your real data; TRIVIUM_HOME
also holds that copy's window state, so it doesn't change the open session or layout of your own:
PI_CODING_AGENT_DIR=/tmp/pi-dev TRIVIUM_HOME=/tmp/trivium-dev TRIVIUM_DEV_FAUX=1 npm start
The screenshots in this README come from that scripted model. TRIVIUM_EVAL runs a script in the
page after load and TRIVIUM_CAPTURE=shot.png saves a screenshot, which is how they were taken.
src/
main/ Electron main process: session host, run and change tracking, settings, logins
preload/ The window.trivium bridge
renderer/ React UI
shared/ Types shared across the IPC boundary, and the translations
dev/ The scripted development model
The interface's translations live in src/shared/locales/, keyed by the English text. Code shows text
with t("English text"), and npm test checks that every text has a translation in each language.
@coresmosbash with git snapshotsTrivium is an early preview, and issues and pull requests are welcome. Before a large change,
please open an issue so we can agree on the approach. Run npm run check before you send a pull
request, and include a screenshot for UI changes. The scripted model makes those easy to take.
MIT © SkarnerV. Plugins and extensions you write for Trivium are yours to license as you like.
Trivium is built on pi by Earendil Works. The name comes from the trivium, the three classical arts of learning (grammar, logic and rhetoric), here writing, code and research.