Skip to content
Ultracite
Esc
↑↓navigate↵open⌘Jpreview

IBM Bob formats on save; its agent reads AGENTS.md

ultracite init --editors bob writes .vscode/settings.json, so IBM Bob formats on save and applies safe fixes through the Oxc, Biome or ESLint extension from Open VSX. Bob’s agent follows AGENTS.md by default, and after each write it sees the new errors and warnings the editor reports.

IBM Bob by IBMChecked against IBM Bob 2.2.1

{
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  "editor.formatOnPaste": true,
  "editor.formatOnSave": true,Format on save
  "emmet.showExpandedAbbreviation": "never",
  "js/ts.tsdk.path": "node_modules/typescript/lib",The project’s TypeScript
  "js/ts.tsdk.promptToUseWorkspaceVersion": true,
  "[astro]": {
    "editor.defaultFormatter": "astro-build.astro-vscode"
  },
  "[css]": {
    "editor.defaultFormatter": "oxc.oxc-vscode"
  },
  "[graphql]": {
    "editor.defaultFormatter": "oxc.oxc-vscode"
  },
  "[handlebars]": {
    "editor.defaultFormatter": "oxc.oxc-vscode"
  },
  "[html]": {
    "editor.defaultFormatter": "oxc.oxc-vscode"
  },
  "[javascript]": {
    "editor.defaultFormatter": "oxc.oxc-vscode"
  },
  "[javascriptreact]": {
    "editor.defaultFormatter": "oxc.oxc-vscode"
  },
  "[json]": {
    "editor.defaultFormatter": "oxc.oxc-vscode"
  },
  "[jsonc]": {
    "editor.defaultFormatter": "oxc.oxc-vscode"
  },
  "[less]": {
    "editor.defaultFormatter": "oxc.oxc-vscode"
  },
  "[markdown]": {
    "editor.defaultFormatter": "oxc.oxc-vscode"
  },
  "[scss]": {
    "editor.defaultFormatter": "oxc.oxc-vscode"
  },
  "[typescript]": {Oxfmt formats it
    "editor.defaultFormatter": "oxc.oxc-vscode"
  },
  "[typescriptreact]": {
    "editor.defaultFormatter": "oxc.oxc-vscode"
  },
  "[vue-html]": {
    "editor.defaultFormatter": "oxc.oxc-vscode"
  },
  "[vue]": {
    "editor.defaultFormatter": "oxc.oxc-vscode"
  },
  "[yaml]": {
    "editor.defaultFormatter": "oxc.oxc-vscode"
  },
  "editor.codeActionsOnSave": {
    "source.fixAll.oxc": "explicit"Oxlint’s safe fixes
  }
}
Oxlint + Oxfmt
What init does in IBM Bob
  1. 1Writes .vscode/settings.jsonA new file, or merged into yours setting by setting, with your comments and other settings kept.
  2. 2Installs oxc.oxc-vscodeWith bobide --install-extension, when it creates the settings file.
Then, in IBM Bob
  1. 3Trust the folder when Bob asks. Until you do, it runs the folder in safe mode, with workspace rules, skills and MCP servers suspended.
  2. 4If init couldn’t run bobide, install oxc.oxc-vscode from the Extensions view, or Biome’s if you picked Biome. Bob installs extensions from Open VSX.
  3. 5Save a file: Oxfmt formats it and Oxlint’s safe fixes apply.

Three toolchains, one settings.json

init writes the settings for the toolchain you pick, so IBM Bob formats with the same tool as ultracite fix and applies its fixes when you save.

  • Oxlint + OxfmtDefault

    Extension
    oxc.oxc-vscode
    Formats with
    oxc.oxc-vscode
    On save
    source.fixAll.oxc

    --linter oxlint

  • Biome

    Extension
    biomejs.biome
    Formats with
    biomejs.biome
    On save
    source.fixAll.biomesource.organizeImports.biome

    --linter biome

  • ESLint + Prettier + Stylelint

    Extensions
    dbaeumer.vscode-eslintesbenp.prettier-vscode
    Formats with
    esbenp.prettier-vscode
    On save
    source.fixAll.eslintsource.organizeImports

    --linter eslint

Open VSX, a launcher and a trust prompt

Bob is a VS Code build that installs extensions from Open VSX and applies the .vscode/settings.json that init writes. Its agent waits for you to trust the folder before it reads workspace rules.

Extension gallery
Open VSX. Bob’s build points its gallery at open-vsx.org, which has oxc.oxc-vscode, biomejs.biome, dbaeumer.vscode-eslint and esbenp.prettier-vscode.
Launcher
Bob’s own launcher is bobide, built from VS Code’s command-line tool, and init installs the extension with bobide --install-extension. The Linux packages link it to /usr/bin/bobide.
VS Code base
Bob 2.2.1 is built on VS Code 1.126 and applies .vscode/settings.json as VS Code does.
Workspace trust
Since 2.0.2, Bob asks for a trust decision the first time you open a folder. Untrusted folders run in safe mode, with workspace rules, skills, MCP servers and hooks suspended.
Two settings files
.bob/settings.json holds Bob’s hooks. Editor settings, including the ones init writes, stay in .vscode/settings.json.
Required extensions
Since 2.2.0, admins can set a RequiredExtensions group policy that installs extensions silently when Bob starts, which suits rolling out the Oxc or Biome extension.

Bob reads new diagnostics after each edit

Bob loads AGENTS.md from the workspace root by default, after the current mode’s rules and before the general rules in .bob/rules/. Its edit tools compare the editor’s diagnostics before and after each write and pass the new ones to the model, and @problems hands it the whole Problems panel. Its PostToolUse hook ignores output and exit codes, so Ultracite sets up no hook for Bob.

Where the agent looks for instructions
  1. 1~/.bob/rules/Your global rules for every project, loaded first.
  2. 2.bob/rules-{mode}/Workspace rules for the current mode, such as rules-agent/ or rules-plan/.
  3. 3AGENTS.mdUltraciteLoaded by default after the mode’s rules. Where init writes Ultracite’s rules; "bob-code.useAgentRules": false turns it off.
  4. 4.bob/rules/General workspace rules, loaded last. They can override global rules.
  1. 01Bob edits a file with write_file, apply_diff, insert_content or search_and_replace.
  2. 02The Oxc, Biome or ESLint extension lints the change, as it does for your own edits.
  3. 03Bob compares the diagnostics from before and after the write and adds the new ones to the tool result the model reads.
  4. 04No hook reports back, since Bob ignores a PostToolUse hook’s stdout and exit code 2. In Agent mode, Bob runs npx ultracite fix when AGENTS.md tells it to.
Agent pageUltracite for IBM Bob

Worth knowing about IBM Bob

  • Bob in the lightbulb menu

    Put the cursor on a line with a diagnostic and the lightbulb (Cmd+. or Ctrl+.) offers Add to Bob Context, Explain with Bob and Improve with Bob, which send the code with its file path and line numbers.

  • Only Agent mode runs commands

    Of Bob’s three built-in modes, only Agent mode has the Execute tool. Plan mode can edit files but not run commands, and Ask mode can do neither, so npx ultracite fix runs from Agent mode.

  • Skills come from .bob/skills

    Bob loads skills from .bob/skills/ and ~/.bob/skills/, not .agents/skills/, and asks before activating one unless Skills is auto-approved. init --agents bob installs the Ultracite skill into .bob/skills/.

IBM Bob questions, answered

Does Ultracite work with IBM Bob?
Yes. npx ultracite init --editors bob writes .vscode/settings.json for Oxlint and Oxfmt, Biome, or ESLint and Prettier. It installs the matching extension from Open VSX with Bob’s bobide command.
Why didn’t init install the Oxc extension in IBM Bob?
init installs it with bobide --install-extension only when it creates .vscode/settings.json, and only if bobide is on your PATH. Otherwise, install it from the Extensions view.
Does IBM Bob read AGENTS.md?
Yes, from the workspace root, unless bob-code.useAgentRules is false. It loads after the current mode’s rules and before .bob/rules/, and only once you trust the folder.
Can IBM Bob see Oxlint or ESLint errors?
Yes. After each edit, Bob’s tools pass the model any diagnostics that are new since before the write. Mention @problems to give it every error and warning in the Problems panel, with file paths and line numbers.
Does Ultracite set up a hook for IBM Bob?
No. Bob runs hooks from .bob/settings.json and ~/.bob/settings/settings.json, but a PostToolUse hook’s stdout is ignored and exit code 2 has no effect, so a lint hook couldn’t tell Bob what failed.

Ship less slop

One command sets up your linter, formatter, editor and agents. Works with Oxlint, Biome and ESLint.