Skip to content
    ↑↓ select↵ openesc close
    English中文
    SouirTommer

    Intern Mode

    v1.0.2Tools & Commands
    intern-mode

    Over-engineering, verbose comments, unnecessary dependencies, deep nesting, code hoarding, and silent failures for OpenCode.

    GitHub stars

    0

    Monthly installs

    59

    8 in 7 days

    Composite scoreSCORE

    29.3

    Multi-signal model

    Last commit

    1 month ago

    2026-07-15

    Install and configure

    opencode.json

    Writes to this project's opencode.json — applies to this repository only.

    opencode.json

    {
      "$schema": "https://opencode.ai/config.json",
      "plugin": ["intern-mode@1.0.2"]
    }

    opencode loads npm dependencies through its embedded runtime on startup and caches them locally — no manual global install needed.

    intern-mode

    Where senior devs ask "does this need to exist at all?",
    intern-mode asks "have you tried installing a library for this?"

    npm Works with OpenCode, Claude Code, and Codex MIT license


    You know him. Enthusiastic. Over-caffeinated. Installs a library before checking if native methods exist. Comments every line. Wraps everything in try-catch. His code works, but at what cost?

    intern-mode puts him inside your AI agent.

    Before / after

    You ask for a function to check if a number is even. Your agent uses ===, writes one line, moves on.

    With intern-mode:

    // This function checks if a number is even
    // It uses the modulo operator to do this
    // The modulo operator returns the remainder of division
    function checkIfNumberIsEven(number) {
      // We need to wrap this in try-catch because it might fail
      try {
        // This is a variable to store the result
        var result;
        // We check if the number is not null
        if (number != null) {
          // We check if the number is not undefined
          if (number != undefined) {
            // We check if the number is actually a number
            if (typeof number === 'number') {
              // We use modulo to check divisibility by 2
              if (number % 2 == 0) {
                result = true;
              } else {
                result = false;
              }
            } else {
              console.log('Not a number:', number);
              result = null;
            }
          } else {
            console.log('Undefined input');
            result = null;
          }
        } else {
          console.log('Null input');
          result = null;
        }
        return result;
      } catch (error) {
        console.log(error);
        return null;
      }
    }
    

    Use Cases

    Interview prep: Write solutions with intern-mode, then challenge the interviewer to refactor and optimize. Watch them struggle with your40-line try-catch pyramid.

    Job security: The code you write is so hard to maintain, so full of dependencies, and so deeply nested that no one else dares to touch it. You are now irreplaceable. You are the only one who understands the data1 → tempArr → finalResult pipeline.

    The Anti-Patterns

    # Anti-Pattern What it does
    1 Captain Obvious Comments every line explaining WHAT, never WHY
    2 Dependency Hell Never trusts native methods. Installs a library for everything
    3 Arrow Anti-Pattern Never uses early returns. Builds sideways pyramids of doom
    4 Code Hoarding Never deletes old code. Comments it out with "TODO: might need this later"
    5 Silent Failures Wraps everything in try-catch. console.log(error). Returns null
    6 Vague Naming data1, tempArr, finalResultData, flag

    How it works

    Before writing code, the agent does the opposite of thinking:

    1. Can I install a library for this?  → yes: npm install it
    2. Can I add a comment?               → yes: comment every line
    3. Can I nest deeper?                 → yes: add another if-else
    4. Can I wrap in try-catch?           → yes: catch everything
    5. Can I comment out old code?        → yes: don't delete, just comment
    6. Only then: write the most verbose version possible
    

    The rules run every turn. Lazy senior devs write one line; enthusiastic interns write forty.

    Intern-mode, not negligent: secrets, trust boundaries, security, and accessibility are never on the chopping block.

    Install

    Claude Code

    /plugin marketplace add souirtommer/intern-mode
    
    /plugin install intern-mode@intern-mode
    

    (You have to send two separate prompts for the install to work)

    The Claude Code plugin runs Node.js lifecycle hooks, so node needs to be on your PATH. If it isn't, the skills still work, the always-on activation just stays quiet instead of erroring on every prompt.

    Codex

    codex plugin marketplace add souirtommer/intern-mode
    codex plugin add intern-mode@intern-mode
    

    Run codex and open /hooks, review and trust its two lifecycle hooks, and start a new thread.

    OpenCode

    Add to opencode.json:

    { "plugin": ["intern-mode"] }
    

    From a checkout

    { "plugin": ["./.opencode/plugins/intern-mode.mjs"] }
    

    Active every session. The /intern-mode command switches levels.

    Set the default level with the INTERN_MODE_DEFAULT_MODE env var (lite/full/ultra/off), or a defaultMode field in ~/.config/intern-mode/config.json. The default is full.

    Commands

    Command What it does
    /intern-mode [lite | full | ultra | off] Set the intensity, or turn it off. No argument defaults to full.

    Intensity

    Level What changes
    lite Add verbose comments and suggest one unnecessary dependency. Keep structure mostly intact.
    full All anti-patterns active. Deep nesting, code hoarding, silent failures, vague naming. Default.
    ultra Maximum chaos. Install is-odd, is-even, left-pad. Use moment.js for everything.

    Example: "Write a function to check if a number is even."

    • lite: Add a comment explaining what === does, suggest is-even npm package.
    • full: 20-line function with deep nesting, try-catch, commented-out old code, vague variable names.
    • ultra: npm install is-even lodash moment uuid, then a 40-line function that uses all of them.

    FAQ

    Does it need a config file? No. An optional ~/.config/intern-mode/config.json or INTERN_MODE_DEFAULT_MODE env var can set the default level, but nothing is required.

    What if I really need the 40-line try-catch pyramid? You don't. Insist anyway and intern will build it. Enthusiastically. With comments on every line.

    Does it scale? The code you wrote scales terribly. That's the point. Zero performance, maximum dependencies, 100% console.log coverage since day one.

    Why "intern-mode"? You know exactly why.

    License

    MIT. The shortest license that works.