IBM Bob

Published: Jun 23, 2026 by Isaac Johnson

IBM now has IBM Bob which is a their own AI Coding set of tools including an IDE and CLI. Bob uses “Bob Coins” which you can see detailed in the pricing page. We start with 40 that we have 30 days to use.

As I write, I’ll price at the “Pro” plan level, which I think is the most common people might try as its US$20/mo for 40 Bobcoins. That makes them US$0.50 each. Its worth pointing out that “Pro+” at US$60/mo gives 160 (so 0.375 per coin) and oddly “Ultra” is a worse deal at 500 Bobcoins for $200 (or 0.40 per coin). Now, if you have billing enabled, overages cost US$0.50/coin.

I’ll signup and see what we can do with Bob.

Signup

I have had a pretty disastrous record thus far trying to sign up for IBM suites.

With a bit of apprehension, I went to https://bob.ibm.com/trial to start a free trial.

I tried my fb email and it said “you have an account”

/content/images/2026/06/ibmbob-01.png

Surprisingly, unlike IBM Cloud, this did not block me.

/content/images/2026/06/ibmbob-02.png

I then saw an “Access your trial now” link (and a welcome email come through)

/content/images/2026/06/ibmbob-03.png

There is a “Bob IDE” and a CLI.

IDE

I downloaded the Bob Windows IDE

/content/images/2026/06/ibmbob-04.png

Even the EULA feels IBM-ish with “Program Name” and “Program Number” listed

/content/images/2026/06/ibmbob-05.png

After reading through it, i saw it would use 1.08Gb of disk space (pretty large IDE IMHO).

We can import settings from VS Code, Windsurf or Cursor

/content/images/2026/06/ibmbob-06.png

As suspected, it’s a variant of code.

/content/images/2026/06/ibmbob-07.png

I was about to complain about how long it was taking, but then I realized it was firing up all my VS Code plugins

/content/images/2026/06/ibmbob-08.png

I went ahead and logged into Bob

/content/images/2026/06/ibmbob-09.png

A lot of tools put the usage in the lower right, but Bob uses the upper area with a clearly visible usage widget

/content/images/2026/06/ibmbob-10.png

I looked through the settings for a model selector but found none. So this must be using IBM Granite at a larger level than the open-weights version

/content/images/2026/06/ibmbob-11.png

Let’s set it to create a Python app

I set it to auto-approve but it still prompted me to review and save every file so it was taking a while

/content/images/2026/06/ibmbob-13.png

At one point it just went out to lunch for over 20 minutes - no error or status… I went and watched the rest of a FIFA World Cup game and came back it had moved to the next step

/content/images/2026/06/ibmbob-14.png

since we know Bob coins today are $20/40 coins, the final tally (before I test it) is 4.19 coins or about US$2.10

/content/images/2026/06/ibmbob-15.png

My first error came installing requirements

Collecting zipp>=3.20
  Downloading zipp-3.23.1-py3-none-any.whl (10 kB)
Collecting editorconfig>=0.12.2
  Downloading editorconfig-0.17.1-py3-none-any.whl (16 kB)
Building wheels for collected packages: greenlet
  Building wheel for greenlet (PEP 517) ... error
  ERROR: Command errored out with exit status 1:
   command: 'c:\users\isaac\desktop\deacon-care-list\venv\scripts\python.exe' 'c:\users\isaac\desktop\deacon-care-list\venv\lib\site-packages\pip\_vendor\pep517\in_process\_in_process.py' build_wheel 'C:\Users\isaac\AppData\Local\Temp\tmpsh82wlg3'
       cwd: C:\Users\isaac\AppData\Local\Temp\pip-install-ao8i_xtx\greenlet_218ed73e89a745a39457f10769c784bd
  Complete output (112 lines):
  running bdist_wheel
  running build
  running build_py
  creating build\lib.win-amd64-cpython-39\greenlet
  copying src\greenlet\__init__.py -> build\lib.win-amd64-cpython-39\greenlet
  creating build\lib.win-amd64-cpython-39\greenlet\platform
  copying src\greenlet\platform\__init__.py -> build\lib.win-amd64-cpython-39\greenlet\platform

I let Bob try and fix it

/content/images/2026/06/ibmbob-16.png

It seems this time the auto-approve worked (so perhaps that setting only takes affect and the start of a task).

That worked (and up to 5.65 Bob coins)

/content/images/2026/06/ibmbob-17.png

I got another crash and another shot to let Bob fix it

/content/images/2026/06/ibmbob-18.png

We are up to 6.82 coins and I had yet another error

/content/images/2026/06/ibmbob-19.png

8.66 and another error.. i started to fix the requirements related ones myself just from console output

I got a secret error I sent at it

(venv) PS C:\Users\isaac\Desktop\deacon-care-list> python -m app.main
Traceback (most recent call last):
  File "C:\Program Files\Python39\lib\runpy.py", line 197, in _run_module_as_main      
    return _run_code(code, main_globals, None,
  File "C:\Program Files\Python39\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "C:\Users\isaac\Desktop\deacon-care-list\app\main.py", line 248, in <module>    
    CookieBackendConfig(
  File "<string>", line 14, in __init__
  File "C:\Users\isaac\Desktop\deacon-care-list\venv\lib\site-packages\litestar\middleware\session\client_side.py", line 268, in __post_init__
    raise ImproperlyConfiguredException("secret length must be 16 (128 bit), 24 (192 bit) or 32 (256 bit)")
litestar.exceptions.http_exceptions.ImproperlyConfiguredException: 500: secret length must be 16 (128 bit), 24 (192 bit) or 32 (256 bit)
(venv) PS C:\Users\isaac\Desktop\deacon-care-list>

But the fix didn’t seem to work (setting a larger secret to 32 characters).

I fixed that myself ultimately and then had to fix one more error before the app would finally run. I ended up spending $6.00 on this (and we haven’t even setup containers or database migrations or kubernetes manifests yet!)

/content/images/2026/06/ibmbob-20.png

I have an app running

/content/images/2026/06/ibmbob-21.png

The app is very vertical which means it probably works well on phones

/content/images/2026/06/ibmbob-22.png

I went to families and saw a failed to load error

/content/images/2026/06/ibmbob-23.png

But sadly there are lots of errors. The dashboard throws console errors

/content/images/2026/06/ibmbob-24.png

and

/content/images/2026/06/ibmbob-25.png

And it doesn’t save “Add Families” so no way to add new ones..

CLI

Let’s move on to the CLI to see if we can resolve some of these issues

/content/images/2026/06/ibmbob-26.png

builder@DESKTOP-QADGF36:~$ nvm use lts/jod
Now using node v22.22.0 (npm v10.9.4)
builder@DESKTOP-QADGF36:~$ curl -fsSL https://bob.ibm.com/download/bobshell.sh | bash

Checking Node.js Installation

✓ Node.js version 22.22.0 detected (minimum 22.15 required)

Package Manager Selection


→ Tip: You can skip this selection by using: --package-manager or --pm (e.g., --pm npm)
→ Only npm is available. Using it automatically.


Downloading bobshell

→ Fetching latest version...
✓ Latest version: 1.0.4


Installing bobshell

→ Installing bobshell 1.0.4 with npm...



Installation Complete! ✓

✓ bobshell 1.0.4 has been successfully installed

→ You can now run: bob

Usage data is collected by default.

→ To opt out, type /settings, navigate to Enable Usage Metrics and set the flag to false

I then moved the app into WSL

builder@DESKTOP-QADGF36:~/Workspaces$ mv /mnt/c/Users/isaac/Desktop/deacon-care-list ./
builder@DESKTOP-QADGF36:~/Workspaces$ cd deacon-care-list/
builder@DESKTOP-QADGF36:~/Workspaces/deacon-care-list$ ls
QUICKSTART.md  README.md  WINDOWS_INSTALL.md  app  create_admin.py  deacon_care.db  requirements.txt  static  venv

I’ll git init and make a gitignore file

builder@DESKTOP-QADGF36:~/Workspaces/deacon-care-list$ gi linux,python | tee .gitignore
# Created by https://www.toptal.com/developers/gitignore/api/linux,python
# Edit at https://www.toptal.com/developers/gitignore?templates=linux,python

### Linux ###
*~

# temporary files which can be created if a process still has a handle open of a deleted file
.fuse_hidden*

# KDE directory preferences
.directory

# Linux trash folder which might appear on any partition or disk
.Trash-*

# .nfs files are created when an open file is removed but is still being accessed
.nfs*

### Python ###
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
#  Usually these files are written by a python script from a template
#  before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
.pybuilder/
target/

# Jupyter Notebook
.ipynb_checkpoints

# IPython
profile_default/
ipython_config.py

# pyenv
#   For a library or package, you might want to ignore these files since the code is
#   intended to run in multiple environments; otherwise, check them in:
# .python-version

# pipenv
#   According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
#   However, in case of collaboration, if having platform-specific dependencies or dependencies
#   having no cross-platform support, pipenv may install dependencies that don't work, or not
#   install all needed dependencies.
#Pipfile.lock

# poetry
#   Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
#   This is especially recommended for binary packages to ensure reproducibility, and is more
#   commonly ignored for libraries.
#   https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
#poetry.lock

# pdm
#   Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
#pdm.lock
#   pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
#   in version control.
#   https://pdm.fming.dev/#use-with-ide
.pdm.toml

# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
__pypackages__/

# Celery stuff
celerybeat-schedule
celerybeat.pid

# SageMath parsed files
*.sage.py

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/
.dmypy.json
dmypy.json

# Pyre type checker
.pyre/

# pytype static type analyzer
.pytype/

# Cython debug symbols
cython_debug/

# PyCharm
#  JetBrains specific template is maintained in a separate JetBrains.gitignore that can
#  be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
#  and can be added to the global gitignore or merged into this file.  For a more nuclear
#  option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/

### Python Patch ###
# Poetry local configuration file - https://python-poetry.org/docs/configuration/#local-configuration
poetry.toml

# ruff
.ruff_cache/

# LSP config files
pyrightconfig.json

# End of https://www.toptal.com/developers/gitignore/api/linux,python

Then add what i have - this creates a good checkpoint to which we can roll back if needed

builder@DESKTOP-QADGF36:~/Workspaces/deacon-care-list$ git add .gitignore
builder@DESKTOP-QADGF36:~/Workspaces/deacon-care-list$ git add -A
builder@DESKTOP-QADGF36:~/Workspaces/deacon-care-list$ git commit -m "phase1"
[main (root-commit) fabe738] phase1
 35 files changed, 4271 insertions(+)
 create mode 100755 .env.example
 create mode 100644 .gitignore
 create mode 100755 QUICKSTART.md
 create mode 100755 README.md
 create mode 100755 WINDOWS_INSTALL.md
 create mode 100755 app/__init__.py
 create mode 100755 app/config.py
 create mode 100755 app/controllers/__init__.py
 create mode 100755 app/controllers/auth.py
 create mode 100755 app/controllers/family.py
 create mode 100755 app/database.py
 create mode 100755 app/main.py
 create mode 100755 app/models/__init__.py
 create mode 100755 app/models/contact.py
 create mode 100755 app/models/family.py
 create mode 100755 app/models/note.py
 create mode 100755 app/models/parishioner.py
 create mode 100755 app/models/user.py
 create mode 100755 app/schemas/__init__.py
 create mode 100755 app/schemas/dto.py
 create mode 100755 app/services/__init__.py
 create mode 100755 app/services/auth_service.py
 create mode 100755 app/services/family_service.py
 create mode 100755 app/templates/404.html
 create mode 100755 app/templates/base.html
 create mode 100755 app/templates/dashboard.html
 create mode 100755 app/templates/family_detail.html
 create mode 100755 app/templates/family_form.html
 create mode 100755 app/templates/family_list.html
 create mode 100755 app/templates/login.html
 create mode 100755 create_admin.py
 create mode 100755 deacon_care.db
 create mode 100755 requirements.txt
 create mode 100755 static/css/style.css
 create mode 100755 static/js/app.js

I can now invoke bob to run Bob CLI

/content/images/2026/06/ibmbob-27.png

I had to launch twice to get it to give me a URL as it was hung up trying to fire up a Firefox in WSL

/content/images/2026/06/ibmbob-28.png

Next, I started it working on the save family issue

I didn’t capture the whole thing as I mostly wanted you to see how performant it was and how it worked.

That said, it did fix the issue. I appreciated how it kept testing (I was testing on the side as well)

/content/images/2026/06/ibmbob-30.png

This took 3.9 bob coins so fixing that error was almost $2

Let’s add a feature next:

/content/images/2026/06/ibmbob-31.png

It seemed to add the feature in pretty rapid order

/content/images/2026/06/ibmbob-32.png

It worked, but the photo is a bit large.

/content/images/2026/06/ibmbob-33.png

I kept working it till the dashboard errors were fixed and the image size looked proper. At this point I’ve used 25.17 coins of my initial 40 grant (ie. spent about $12.55 on this app so far)

/content/images/2026/06/ibmbob-34.png

I added more features and have to say I adore the traditional IBM blue used. Harkens to a simpler time on PS/1 terminals.

/content/images/2026/06/ibmbob-35.png

As Bob built admin scripts, I appreciated the top comment blocks and user guide markdown files

/content/images/2026/06/ibmbob-36.png

I noticed a .bob folder I likely need to add to my gitignore file. It seems to keep a running history of work in sessions

(.venv) builder@DESKTOP-QADGF36:~/Workspaces/deacon-care-list$ cat .bob/notes/pending-notes.txt
{"id":"7ab072b2-7854-46a5-b630-e5078b7cb8c4","ts":"2026-06-23T12:39:57.036Z","path":"/home/builder/Workspaces/deacon-care-list/app/models/user.py","version":"1.0.0","taskID":"a333fec6-86d2-4c27-b1a7-d84c6837f796"}
{"id":"63142331-a097-4a11-a362-23169d350506","ts":"2026-06-23T12:40:05.785Z","path":"/home/builder/Workspaces/deacon-care-list/migrations/add_is_active_to_users.py","version":"1.0.0","taskID":"a333fec6-86d2-4c27-b1a7-d84c6837f796"}
{"id":"46315469-dd54-4597-8548-a851c86aca07","ts":"2026-06-23T12:40:29.306Z","path":"/home/builder/Workspaces/deacon-care-list/app/services/auth_service.py","version":"1.0.0","taskID":"a333fec6-86d2-4c27-b1a7-d84c6837f796"}
{"id":"097be3a7-4942-4bd5-b7e5-2ffa38ce072b","ts":"2026-06-23T12:40:36.400Z","path":"/home/builder/Workspaces/deacon-care-list/app/schemas/auth_dto.py","version":"1.0.0","taskID":"a333fec6-86d2-4c27-b1a7-d84c6837f796"}
{"id":"a2962d29-242b-489a-8323-ca4d87eb582c","ts":"2026-06-23T12:40:43.672Z","path":"/home/builder/Workspaces/deacon-care-list/app/controllers/auth.py","version":"1.0.0","taskID":"a333fec6-86d2-4c27-b1a7-d84c6837f796"}
{"id":"8dc1def9-59c1-42b4-968d-328be7dc35c0","ts":"2026-06-23T12:40:54.890Z","path":"/home/builder/Workspaces/deacon-care-list/app/controllers/auth.py","version":"1.0.0","taskID":"a333fec6-86d2-4c27-b1a7-d84c6837f796"}
{"id":"8fcbfea0-c593-4500-9edc-168dbe3fa442","ts":"2026-06-23T12:41:14.914Z","path":"/home/builder/Workspaces/deacon-care-list/admin_users.py","version":"1.0.0","taskID":"a333fec6-86d2-4c27-b1a7-d84c6837f796"}
{"id":"9377e801-bdb6-4369-98f3-8c248dd48f7c","ts":"2026-06-23T12:42:19.361Z","path":"/home/builder/Workspaces/deacon-care-list/admin_users.py","version":"1.0.0","taskID":"a333fec6-86d2-4c27-b1a7-d84c6837f796"}
{"id":"dadae84a-50f5-4d71-a651-8318751d3f3a","ts":"2026-06-23T12:42:24.790Z","path":"/home/builder/Workspaces/deacon-care-list/admin_users.py","version":"1.0.0","taskID":"a333fec6-86d2-4c27-b1a7-d84c6837f796"}
{"id":"54736401-1317-4020-b433-37683f4ce3de","ts":"2026-06-23T12:42:32.192Z","path":"/home/builder/Workspaces/deacon-care-list/admin_users.py","version":"1.0.0","taskID":"a333fec6-86d2-4c27-b1a7-d84c6837f796"}
{"id":"d688c6ef-d23b-4ee6-8d33-076d2a196e7e","ts":"2026-06-23T12:42:51.430Z","path":"/home/builder/Workspaces/deacon-care-list/app/models/__init__.py","version":"1.0.0","taskID":"a333fec6-86d2-4c27-b1a7-d84c6837f796"}
{"id":"39638360-0d7d-4965-97e0-4a6032bdd0be","ts":"2026-06-23T12:43:10.539Z","path":"/home/builder/Workspaces/deacon-care-list/app/templates/change_password.html","version":"1.0.0","taskID":"a333fec6-86d2-4c27-b1a7-d84c6837f796"}
{"id":"4643873c-301a-480a-a249-677b6495044c","ts":"2026-06-23T12:43:28.063Z","path":"/home/builder/Workspaces/deacon-care-list/app/main.py","version":"1.0.0","taskID":"a333fec6-86d2-4c27-b1a7-d84c6837f796"}
{"id":"d513697c-b9e1-46b1-8a2c-4612a3a7baa0","ts":"2026-06-23T12:43:57.457Z","path":"/home/builder/Workspaces/deacon-care-list/app/templates/base.html","version":"1.0.0","taskID":"a333fec6-86d2-4c27-b1a7-d84c6837f796"}
{"id":"c2a771df-b9e6-4ec0-9a6f-fb281fbad329","ts":"2026-06-23T12:45:09.424Z","path":"/home/builder/Workspaces/deacon-care-list/ADMIN_USERS_GUIDE.md","version":"1.0.0","taskID":"a333fec6-86d2-4c27-b1a7-d84c6837f796"}

In testing, it changed the admin password which surprised me (as it has a testuser).. I had to go widescreen to figure out what it was changed to:

/content/images/2026/06/ibmbob-37.png

I wrapped my session by parameterizing the Upload dir, DB dir and app ports.. I can see that I’m not all used up on Bob Coins

/content/images/2026/06/ibmbob-38.png

We can see it gives a basic summary when we complete a CLI session:

/content/images/2026/06/ibmbob-41.png

Summary

I have an app - it needs to be containerized, built with CICD, pushed to Forgejo and likely hosted in K8s still. I’ll have to use an alternate tool for that as we completely used all the free trail credits (40 Bobcoins)

Here is a tour of the app we built:

When I compare it with other tools, with the exception of that one blip that seemed to take forever last night, it did a great job. The CLI seemed to do a better job testing things than the IDE.

The comments are solid, the layout - which I gave it no guidance on - was clean and well done. Overall I liked the performance for a basic Python app.

However, the cost is something to consider. I didn’t even complete this app and we spent the full 40 Bobcoins. If I was spending $20 a month and could just start one app a month, I would question the value.

Other than the cost, I was pleased and likely will revisit to see if 40 was all I got or it refreshes at some point. I will assume it was one and done.

IBM Bob GenAI Python

Have something to add? Feedback? You can use the feedback form

Isaac Johnson

Isaac Johnson

Cloud Solutions Architect

Isaac is a CSA and DevOps engineer who focuses on cloud migrations and devops processes. He also is a dad to three wonderful daughters (hence the references to Princess King sprinkled throughout the blog).

Theme built by C.S. Rhymes