Always-Ontrack
An agent-first CLI and authentication MCP for Monash OnTrack / Doubtfire
Install / Use
claude mcp add MarkChu-git -- npx -y github:MarkChu-git/Always-OntrackIf the server publishes to npm under a different name, use that package instead — check the repo README.
MCP Server
Model Context Protocol server
Quality Score
Category
Education & ResearchSupported Platforms
Tags
Our assessment of Always-Ontrack
Always-Ontrack scores 80/100 on our quality scale, 400th of 441 Education & Research skills we index.
Its MCP Server is 14 KB long, well organised into 17 sections with 5 code examples: a thorough specification that gives an agent plenty to work with.
It has 3 GitHub stars, so there is little community track record yet; judge it on its content.
Maintenance, license and trust
- The repository was last updated 14 days ago, so Always-Ontrack is actively maintained.
- It is released under the Apache-2.0 license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 87/100, with 2 cautions from licensing, adoption, age or documentation. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
Always-Ontrack compared with similar skills
All 4 of these similar skills score higher than Always-Ontrack; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| Always-Ontrack (this skill)by MarkChu-git | 80 | 3 | 14d ago | MCP Server |
| Agent-Reachby Panniantong | 100 | 106.0k | 4d ago | CLAUDE.md |
| headroomby headroomlabs-ai | 100 | 78.2k | today | CLAUDE.md |
| last30days-skillby mvanhorn | 100 | 65.8k | today | CLAUDE.md |
| CowAgentby zhayujie | 100 | 47.7k | today | CLAUDE.md |
Frequently asked questions
- How do I install Always-Ontrack?
- Run
claude mcp add MarkChu-git -- npx -y github:MarkChu-git/Always-Ontrack. The install tabs above show the steps for each supported agent. - Which AI agents does Always-Ontrack work with?
- It is written for Claude Code and Claude Desktop, as a MCP Server file. Other agents that read the same format can often use it too.
- Is Always-Ontrack safe to use?
- It is Apache-2.0-licensed and scores 87/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is Always-Ontrack still maintained?
- The repository was last updated 14 days ago, so Always-Ontrack is actively maintained.
Skill content
View source on GitHubAlways Ontrack (ontrack-cli)
<p align="center"> <img src="./always-ontrack-poster.jpg" alt="Always OnTrack — agent-first CLI and TUI for Monash OnTrack / Doubtfire" width="720" /> </p> <p align="center"> An agent-first CLI and TUI for Monash OnTrack / Doubtfire </p>ontrack-cli turns common Monash OnTrack workflows into a single command
surface (ontrack <command>), targeting the Monash OnTrack API by default
(https://ontrack.infotech.monash.edu/api). The primary interface is a
versioned, schema-discoverable Agent protocol; human tables and the interactive
launcher remain available over the same execution engine.
Detailed guides: authentication · agent usage · commands · workflows · troubleshooting · development
Contents
- What it does
- Installation
- Quick start
- Authentication
- Agent-first usage
- Command reference
- Environment variables
- Troubleshooting
- Development
- Project structure
- Current scope
- License
What it does
- Authentication and session handling — interactive choice of pairing-relay, this-machine browser capture, or terminal username/password, plus manual redirect import, direct token login, and silent token renewal from a restricted browser state
- Read access —
projects,units,tasks,inbox,task show,task resources - Feedback and live tracking —
feedback list,feedback watch,watch - File operations —
pdf task,pdf submission,task resources,submission upload,submission upload-new-files - Engineering and diagnostics —
doctor,discover,discover --probe - Terminal UX — colored tables by default,
--output agent-jsonfor versioned Agent automation, legacy--jsonfor compatible raw scripting output, and fallback handling when some endpoints are not accessible for the current account
Installation
Requirements: Bun 1.3.14+ (the experimental Lightpanda provider additionally
requires Bun 1.4.0+); macOS, Linux, or Windows (the Lightpanda spike is
currently limited to macOS/Linux — Windows fails closed until executable ACL
validation is implemented); network access when you choose to install a reviewed
browser runtime manually.
Global install (recommended):
bun add --global ontrack-cli
This provides the ontrack executable. To run from a
source checkout instead:
bun install
bun run build
bun dist/cli.js auth-method # or: bun run dev -- auth-method
Quick start
The shortest stable path from install to useful output.
-
Sign in —
ontrack loginasks how: a browser on this machine (recommended), pairing (any already signed-in browser), or terminal username/password:ontrack login -
Confirm the cached account and list your data:
ontrack whoami ontrack projects ontrack units ontrack tasks -
Inspect a specific task (batch selectors work too:
--abbr P1,D4,--all-tasks):ontrack task show --project-id 87 --abbr D4 -
Read feedback, watch live updates, and download PDFs:
ontrack feedback list --project-id 87 --abbr D4 ontrack feedback watch --project-id 87 --abbr D4 ontrack pdf task --project-id 87 --abbr D4 ontrack pdf submission --project-id 87 --abbr D4 -
Preview, then confirm an upload (without
--confirmit is a safe preflight that sends no write request):ontrack submission upload --project-id 87 --abbr D4 --file ./report.pdf ontrack submission upload --project-id 87 --abbr D4 --file ./report.pdf --confirm
Running ontrack with no arguments opens the full-screen TUI in an interactive
terminal. Use ontrack welcome for the legacy numbered launcher. End-to-end
recipes: docs/workflows.md.
Authentication
ontrack login in an interactive terminal recommends a browser window on this
machine (renewable session) and still offers pairing or terminal
username/password. --pair / --auto / --sso skip the prompt. Pairing sends
the credential end-to-end encrypted; --auto captures a refresh cookie that can
renew silently; --sso types credentials in the terminal and fills Okta in a
hidden browser. Both sign in through a private browser profile the CLI keeps, so
Okta can recognize this machine between logins. Manual redirect URL import and direct
--auth-token login remain as fallbacks. A paired session cannot renew: the
credential that renews a session is an HttpOnly cookie no bookmark can read, so
it lasts as long as its access token and login says so. See
docs/authentication.md for every login flow, the
session cache locations, login output, and logout.
Agent-first usage
Native caller-first interface
New Agent integrations should use the explicit caller-first surface. It accepts
one bounded JSON object and never translates that object into human CLI flags.
agent call emits exactly one ontrack.agent/v1 envelope; agent stream emits
one NDJSON envelope per bounded frame:
ontrack agent list
ontrack agent describe task.show
ontrack agent call auth.status --input-json '{}'
ontrack agent call projects.list --input-json '{}'
ontrack agent call unit.show --input-json '{"project_id":87}'
ontrack agent call tutorials.status --input-json '{"project_id":87}'
ontrack agent call tasks.list --input-json '{"project_id":87}'
ontrack agent call task.show \
--input-json '{"project_id":87,"abbreviation":["D4"]}'
ontrack agent call task.prerequisites \
--input-json '{"project_id":87,"abbreviation":"D4"}'
ontrack agent call feedback.list \
--input-json '{"project_id":87,"abbreviation":"D4"}'
ontrack agent stream feedback.watch \
--input-json '{"project_id":87,"abbreviation":"D4","interval_seconds":15,"history":30}'
ontrack agent call plan.show \
--input-json '{"project_id":87,"include_beyond_target":false}'
ontrack agent call submission.status \
--input-json '{"project_id":87,"abbreviation":"D4"}'
ontrack agent call task.resources \
--input-json '{"project_id":87,"abbreviation":["D4"],"out_dir":"downloads"}'
ontrack agent call pdf.task \
--input-json '{"project_id":87,"abbreviation":"D4","out_dir":"downloads"}'
ontrack agent call pdf.submission \
--input-json '{"project_id":87,"abbreviation":"D4","out_dir":"downloads"}'
Start with projects.list, then use its project_id to inspect the matching
unit.show, tutorials.status, and tasks.list projections before selecting a
Task Definition for a task-specific read. Use --input - for bounded,
non-interactive stdin.
Native command inventory
| Command | Safe projection or operation |
| --- | --- |
| auth.status | Local authentication lifecycle metadata |
| projects.list | PII-minimized project directory |
| unit.show | Project-scoped Student Unit View |
| tutorials.status | Tutorial stream and change-policy status |
| tasks.list | Project-scoped Student Task View catalogue |
| task.show | Definition-first task detail |
| task.prerequisites | One task's prerequisite status |
| feedback.list | One task's bounded, person-free feedback timeline |
| feedback.watch | Cancellable bounded feedback delta stream |
| task.resources | Definition-first resource artifacts and metadata |
| pdf.task | One Task Definition's task-sheet PDF artifact |
| pdf.submission | One ready submission PDF artifact |
| plan.show | Definition-first plan and date-source view |
| submission.status | Definition-first submission lifecycle status |
Every command returns a bounded, PII-minimized projection. Task-scoped reads
use the definition-first Student Task View, so a project with an empty tasks
array can still expose tasks from its unit task-definition catalogue; downloads
validate artifacts before writing them; malformed or conflicting input aliases
fail closed. The existing --output agent-json commands remain a compatibility
Adapter for the broader command set, and bare --json keeps its legacy raw shape.
Discover the protocol
Native callers should discover their executable surface instead of scraping help text:
ontrack agent list
ontrack agent describe pdf.submission
Per-command behavior, the ontrack.agent/v1 envelope and next actions,
structured input, authentication, watch streams, and safe writes with
idempotency keys: docs/agent-usage.md.
Command reference
| Command | Purpose |
| --- | --- |
| ontrack | Full-screen task TUI in interactive terminals |
| ontrack welcome | Legacy numbered launcher with guided task selection |
| ontrack login / logout / whoami | Interactive sign-in (this machine / pairing / terminal), session cleanup, cached account |
| ontrack auth-method / auth status / auth ensure | Authentication method and credential lifecycle |
| ontrack projects / units / tasks / inbox | List project, unit, and task data |
| ontrack task show / task resources / task set-status | Task detail, resource archives, student status transitions |
| ontrack feedback list / feedback watch / watch | Feedback reads and live tracking |
| ontrack pdf task / pdf submission | Download task and submission PDFs |
| ontrack submission upload / upload-new-files | Dry-run by default; --confirm dispatches once |
| ontrack doctor / discover / discover --probe | Diagnostics and API discovery |
| ontrack capabilities / schema | Agent protocol discovery (compatibility Adapter) |
The full reference with every flag and safety note: docs/commands.md.
Environment variables
| Variable | Purpose | Notes |
| --- | --- | --- |
| ONTRACK_BASE_URL | Override the default API base URL | Defaults to Monash OnTrack API |
| ONTRACK_RELAY_URL | Override the pairing-relay base URL | Set empty to disable pairing; https required except loopback |
| ONTRACK_BROWSER_PATH | Set the Chromium-family browser executable path for SSO automation | Used unless the explicit Lightpanda experiment is enabled |
| ONTRACK_BROWSER | Set to lightpanda only with the two Lightpanda gates below | Credential-free compatibility spike; real login fails closed |
| ONTRACK_EXPERIMENTAL_LIGHTPANDA | Set to 1 to acknowledge the Lightpanda experiment | Required together with ONTRACK_BROWSER=lightpanda |
| ONTRACK_LIGHTPANDA_PATH | Absolute path to the reviewed local Lightpanda binary | Required for the experiment; the CLI never discovers Lightpanda from PATH |
| ONTRACK_SSO_PROFILE | Set to ephemeral to sign in with a throwaway browser every time | By default the CLI keeps a private SSO browser profile so Okta recognizes this machine; ontrack logout deletes it |
| ONTRACK_ENABLE_SYSTEM_BROWSER_PROFILE | Explicitly allow live browser-profile credential discovery | Disabled by default; do not enable for shared/untrusted profiles |
| ONTRACK_BROWSER_USER_DATA_DIR | Override Chromium/Chrome user data root | Used only with ONTRACK_ENABLE_SYSTEM_BROWSER_PROFILE=1 |
| ONTRACK_BROWSER_PROFILE_DIR | Override profile directory name under user data root | Used only with explicit profile reuse; defaults to Default |
| FORCE_COLOR | Force colored terminal output | Example: FORCE_COLOR=1 |
| NO_COLOR | Disable colored output | Useful for plain logs or CI |
| XDG_CONFIG_HOME | Override the config root on Linux and macOS | Affects session storage |
| APPDATA | Config root on Windows | Affects session storage |
Lightpanda is an explicit, local-only, credential-free experiment; see docs/development.md for the gates and the
Truncated for display — read the full file on GitHub.
Related Skills
Agent-Reach
106.0kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
headroom
78.2kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
last30days-skill
65.8kAI agent skill that researches any topic across Reddit, X, YouTube, HN, Polymarket, and the web - then synthesizes a grounded summary
CowAgent
47.7kOpen-source personal AI assistant & Agent Harness. Plans tasks, runs tools and skills, self-evolves with memory and knowledge. Multi-agent, multi-model, multi-channel. Lightweight, extensible, one-line install.
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
