{
    "archive_path": "archive/1789596243.573395",
    "base_url": "github.com/davejpeters/opencode-mentor",
    "basename": "opencode-mentor",
    "bookmarked_date": "2026-09-16 22:04",
    "canonical": {
        "archive_org_path": "https://web.archive.org/web/github.com/davejpeters/opencode-mentor",
        "dom_path": "output.html",
        "favicon_path": "favicon.ico",
        "git_path": "git/",
        "google_favicon_path": "https://www.google.com/s2/favicons?domain=github.com",
        "headers_path": "headers.json",
        "htmltotext_path": "htmltotext.txt",
        "index_path": "index.html",
        "media_path": "media/",
        "mercury_path": "mercury/content.html",
        "pdf_path": "output.pdf",
        "readability_path": "readability/content.html",
        "screenshot_path": "screenshot.png",
        "singlefile_path": "singlefile.html",
        "warc_path": "warc/",
        "wget_path": "github.com/davejpeters/opencode-mentor.html"
    },
    "domain": "github.com",
    "extension": "",
    "hash": "1VCYKE6XQQ10RF9QNSHJ",
    "history": {
        "archive_org": [],
        "dom": [],
        "favicon": [
            {
                "cmd": [
                    "curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--max-time",
                    "120",
                    "--output",
                    "favicon.ico",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) curl/curl 8.14.1 (x86_64-pc-linux-gnu)",
                    "https://www.google.com/s2/favicons?domain=github.com"
                ],
                "cmd_version": "curl 8.14.1 (x86_64-pc-linux-gnu)",
                "end_ts": "2026-09-16T22:05:01.761533+00:00",
                "index_texts": null,
                "output": "favicon.ico",
                "pwd": "/data/archive/1789596243.573395",
                "schema": "ArchiveResult",
                "start_ts": "2026-09-16T22:05:01.268845+00:00",
                "status": "succeeded"
            }
        ],
        "git": [],
        "headers": [
            {
                "cmd": [
                    "curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--head",
                    "--max-time",
                    "120",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) curl/curl 8.14.1 (x86_64-pc-linux-gnu)",
                    "https://github.com/davejpeters/opencode-mentor"
                ],
                "cmd_version": "curl 8.14.1 (x86_64-pc-linux-gnu)",
                "end_ts": "2026-09-16T22:05:02.458062+00:00",
                "index_texts": null,
                "output": "headers.json",
                "pwd": "/data/archive/1789596243.573395",
                "schema": "ArchiveResult",
                "start_ts": "2026-09-16T22:05:01.770559+00:00",
                "status": "succeeded"
            }
        ],
        "htmltotext": [],
        "media": [],
        "mercury": [
            {
                "cmd": [
                    "/app/node_modules/@postlight/parser/cli.js",
                    "https://github.com/davejpeters/opencode-mentor"
                ],
                "cmd_version": "1.0.0",
                "end_ts": "2026-09-16T22:05:15.371383+00:00",
                "index_texts": null,
                "output": "mercury",
                "pwd": "/data/archive/1789596243.573395",
                "schema": "ArchiveResult",
                "start_ts": "2026-09-16T22:05:10.683419+00:00",
                "status": "succeeded"
            }
        ],
        "pdf": [],
        "readability": [
            {
                "cmd": [
                    "/app/node_modules/readability-extractor/readability-extractor",
                    "/tmp/tmpkcctcsf4",
                    "https://github.com/davejpeters/opencode-mentor"
                ],
                "cmd_version": "0.0.11",
                "end_ts": "2026-09-16T22:05:10.672162+00:00",
                "index_texts": [
                    "MAI is an opinionated OpenCode configuration for learning software development with AI. It is inspired by Boot.dev and PAI, with a mentor-first goal: use AI to strengthen reasoning and independent problem-solving, not merely to produce code quickly.\nThe default assistant is Rob, a learning orchestrator that routes work to specialist agents. The prompts favor diagnosis, small hints, deliberate practice, review, verification, and gradually reduced support. This repository is configuration and an evolving experiment, not a claim that AI can replace teachers, experience, or independent judgment.\nArchitecture\nOpenCode\n  -> opencode.json and AGENTS.md\n  -> mentor-orchestrator\n  -> mentor | reviewer | architect | drill-instructor\n  -> skills and project-aware tools\n  -> local learner state and session reflection\n\n\nopencode.json selects the primary agent, loads plugins, configures Context7, and defines baseline permissions.\nAGENTS.md establishes the Rob identity and repository-wide operating rules.\nagents/ contains the orchestrator and specialist prompts.\nskills/core/SKILL.md supplies the shared tutoring policy at runtime.\ntools/tutor.ts exposes learner-profile, concept-graph, curriculum, exercise, grading, and reflection tools implemented under tools/tutor/.\nplugins/context-loader.ts injects the shared Core policy once per session.\n\nAgent Roles\n\n\n\nAgent\nResponsibility\n\n\n\n\nMentor Orchestrator\nClassifies requests, retrieves only relevant learner context, and delegates to a specialist.\n\n\nMentor\nExplains concepts, diagnoses errors, and gives the least help needed for progress.\n\n\nReviewer\nReviews submitted work for correctness, design, security, and learning evidence without rewriting it by default.\n\n\nArchitect\nExplores system boundaries, data flow, constraints, and trade-offs.\n\n\nDrill Instructor\nCreates focused exercises, evaluates attempts, and adjusts difficulty from observed results.\n\n\n\nA pair-programmer prompt is included but disabled by default so the mentor-first workflow remains the primary path. OpenCode's built-in explore agent is used for codebase discovery where permitted.\nPedagogy\n\nPEDAGOGY.md explains the educational rationale and vocabulary.\nskills/core/SKILL.md is the operational source of truth for tutoring behavior.\nRole prompts in agents/ specialize Core without replacing it.\nskills/assignment/ defines learner-owned practice tasks; the other skills add focused workflows such as review, TDD, security, and Go development.\n\nThe central loop is diagnose \u2192 teach \u2192 practice \u2192 assess \u2192 reflect \u2192 progress. Assistance is calibrated to demonstrated work, and the system aims to fade scaffolding as the learner becomes more independent.\nRepository Layout\n\n\n\nPath\nPurpose\n\n\n\n\nagents/\nPrimary and specialist agent definitions.\n\n\ncommands/\nReusable OpenCode command prompts.\n\n\nplugins/\nContext loading, environment protection, command filtering, and desktop notifications.\n\n\nrules/\nLanguage- and workflow-specific instructions.\n\n\nskills/\nLoadable guidance for pedagogy and engineering workflows.\n\n\ntools/\nTutor-state tools and small utilities such as JSON validation, date/time, math, and speech.\n\n\nPEDAGOGY.md\nMaintainer-facing teaching model.\n\n\nBACKLOG.md\nPlanned improvements.\n\n\n\nRuntime learner state is written inside each active project under .opencode/mentor/. It can contain learner identifiers, project paths, goals, evidence, misconceptions, exercises, and reflections. Runtime learner state and personal metadata are intentionally not distributed with this public configuration.\nPrerequisites and Setup\nPrerequisites:\n\nA working OpenCode installation.\nBun for the TypeScript tools and plugins.\nGit for installation and updates.\nOptional: Context7 MCP network access for current library documentation, beads for issue tracking, graphify or codegraph for codebase discovery.\n\nBack up any existing OpenCode configuration before installing. Then clone this repository as the global configuration and install its development dependency:\nmv ~/.config/opencode ~/.config/opencode.backup\ngit clone https://github.com/davejpeters/opencode-mentor ~/.config/opencode\ncd ~/.config/opencode\nbun install\nReview opencode.json, agent permissions, and plugin behavior before first use. Restart OpenCode after changing configuration, agents, skills, or plugins because those files are loaded at startup.\nCustomization\nCommon starting points:\n\nChange the Rob name and identity in AGENTS.md.\nAdjust language and workflow rules under rules/.\nTune agent prompts and permissions in agents/ and opencode.json.\nAdd, remove, or revise workflows under skills/.\nReview defaults in tools/tutor/runtime.ts, including the preferred language and learner identifier strategy.\nDisable integrations that are unavailable on your machine.\nAdd more skills, tools, agents, commands, and plugins.\n\nSafety Boundaries\nThe configuration combines prompt-level boundaries with OpenCode permissions and small defensive plugins:\n\nShell commands generally require approval; a narrow set of read-only or verification commands is allowed explicitly.\nplugins/env-protection.ts blocks tool reads whose path contains .env.\nplugins/safety-filter.ts blocks shell commands containing rm.\nAgent permissions restrict editing, writing, shell use, and delegation by role.\nThe mentor policy avoids complete target implementations while guided learning can still move the learner forward.\nOpenCode sharing is disabled in opencode.json.\n\nThese are guardrails, not a security sandbox. Inspect proposed commands and changes, keep secrets out of the repository, and tighten permissions for your environment.\nOptional Machine-Specific Integrations\n\nplugins/notifications.ts calls notify-send for idle-session and permission-request desktop notifications. It is intended for Linux desktops with a notification daemon; remove the plugin from opencode.json elsewhere.\n\nThe notification plugin tolerates command failures."
                ],
                "output": "readability",
                "pwd": "/data/archive/1789596243.573395",
                "schema": "ArchiveResult",
                "start_ts": "2026-09-16T22:05:07.550894+00:00",
                "status": "succeeded"
            }
        ],
        "screenshot": [],
        "singlefile": [],
        "title": [
            {
                "cmd": [
                    "curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--max-time",
                    "120",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) curl/curl 8.14.1 (x86_64-pc-linux-gnu)",
                    "https://github.com/davejpeters/opencode-mentor"
                ],
                "cmd_version": "curl 8.14.1 (x86_64-pc-linux-gnu)",
                "end_ts": "2026-09-16T22:05:07.542833+00:00",
                "index_texts": null,
                "output": "GitHub - davejpeters/opencode-mentor: An anti-vibecoding, programming mentor configuration \u00b7 GitHub",
                "pwd": "/data/archive/1789596243.573395",
                "schema": "ArchiveResult",
                "start_ts": "2026-09-16T22:05:07.468227+00:00",
                "status": "succeeded"
            }
        ],
        "wget": [
            {
                "cmd": [
                    "wget",
                    "--no-verbose",
                    "--adjust-extension",
                    "--convert-links",
                    "--force-directories",
                    "--span-hosts",
                    "--no-parent",
                    "-e",
                    "robots=off",
                    "--reject=js,mjs,woff,woff2,ttf,otf,eot,mp4,m4v,mov,webm,ogv,mkv,avi,flv",
                    "--timeout=120",
                    "--restrict-file-names=windows",
                    "--page-requisites",
                    "--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) wget/GNU Wget 1.21.3",
                    "--compression=auto",
                    "--timestamping",
                    "https://github.com/davejpeters/opencode-mentor"
                ],
                "cmd_version": "GNU Wget 1.21.3",
                "end_ts": "2026-09-16T22:05:07.456619+00:00",
                "index_texts": null,
                "output": "github.com/davejpeters/opencode-mentor.html",
                "pwd": "/data/archive/1789596243.573395",
                "schema": "ArchiveResult",
                "start_ts": "2026-09-16T22:05:02.467808+00:00",
                "status": "succeeded"
            }
        ]
    },
    "icons": null,
    "is_archived": true,
    "is_static": false,
    "latest": {
        "archive_org": null,
        "dom": null,
        "favicon": "favicon.ico",
        "git": null,
        "media": null,
        "pdf": null,
        "screenshot": null,
        "singlefile": null,
        "title": "GitHub - davejpeters/opencode-mentor: An anti-vibecoding, programming mentor configuration \u00b7 GitHub",
        "warc": null,
        "wget": "github.com/davejpeters/opencode-mentor.html"
    },
    "link_dir": "/data/archive/1789596243.573395",
    "newest_archive_date": "2026-09-16T22:05:10.683419+00:00",
    "num_failures": 0,
    "num_outputs": 6,
    "oldest_archive_date": "2026-09-16T22:05:01.268845+00:00",
    "path": "/davejpeters/opencode-mentor",
    "schema": "Link",
    "scheme": "https",
    "snapshot_id": "a968e2f8-41be-4861-918a-01ed6d546a4d",
    "sources": [
        "/data/sources/1789596243-import.txt"
    ],
    "tags": null,
    "tags_str": "",
    "timestamp": "1789596243.573395",
    "title": "GitHub - davejpeters/opencode-mentor: An anti-vibecoding, programming mentor configuration \u00b7 GitHub",
    "updated": "2026-09-16T22:05:01.268334+00:00",
    "updated_date": "2026-09-16 22:05",
    "url": "https://github.com/davejpeters/opencode-mentor"
}