Gemma4, Claude and Pi

Published: Apr 9, 2026 by Isaac Johnson

I had two things I wanted to tackle today: Comparing using Anthropic via Pi CLI versus Claude Code, then taking a look at Gemma4 - the new open model Google released last week. In this article, I want to dig into Gemma4 more thoroughly rather than rush an article just to get on the headline bandwagon.

As I’ll get into below, the first section (Pi vs Claude) came from a user request via LinkedIn. I tend to avoid Anthropic just due to price.

Anthropic CLI vs Pi

Sam Hegge asked me if I could compare Claude Code versus Pi CLI as a comment on my last LI post which was about the Pi agent how it compared to Claude CLI.

I focus on Gemini CLI mostly because I’m generally Google-first, but also because Gemini AI Pro is covered and Anthropic usage tends to cost me.

That said, it’s a fair question - How might Pi work compared to Claude? I’m willing to feed AI some coins to see.

Anthropic setup with Pi

You just need to set an Anthropic key in your environment for Pi to pick up:

$ export ANTHROPIC_API_KEY=sk-ant-api03-X-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
$ pi

Now when I ask for models, we can see the latest Anthropic ones listed:

/content/images/2026/04/pi-01.png

I picked the latest claude-3-7-sonnet-latest to use.

I actually have a desire to make some skills today, so I will actually use a Skill builder Skill for this activity.

I found a good one from Anthropic here: https://github.com/anthropics/skills/blob/main/skills/skill-creator/SKILL.md

I actually already keep a local clone of Anthropic’s primary Skills library, so I just need to update it:

builder@DESKTOP-QADGF36:~/Workspaces/skills/skills$ ls
algorithmic-art   canvas-design    docx             internal-comms  pdf   skill-creator      theme-factory          webapp-testing
brand-guidelines  doc-coauthoring  frontend-design  mcp-builder     pptx  slack-gif-creator  web-artifacts-builder  xlsx
builder@DESKTOP-QADGF36:~/Workspaces/skills/skills$ cd ..
builder@DESKTOP-QADGF36:~/Workspaces/skills$ git remote show origin
* remote origin
  Fetch URL: https://github.com/anthropics/skills.git
  Push  URL: https://github.com/anthropics/skills.git
  HEAD branch: main
  Remote branches:
    andibrae/create-top-level-namespace tracked
    klazuka/add-3p-notices              tracked
    klazuka/add-cc-instructions         tracked
    klazuka/add-cc-marketplace          tracked
    klazuka/doc-skills                  tracked
    klazuka/export                      tracked
    klazuka/export-20260203             new (next fetch will store in remotes/origin)
    klazuka/frontend-design-skill       tracked
    klazuka/pptx-cleanup                new (next fetch will store in remotes/origin)
    klazuka/spec                        tracked
    mahesh/add-to-readme                tracked
    mahesh/clarify-claude-code-install  tracked
    main                                tracked
    mattpic-ant/blog-small-fix          tracked
  Local branch configured for 'git pull':
    main merges with remote main
  Local ref configured for 'git push':
    main pushes to main (local out of date)
builder@DESKTOP-QADGF36:~/Workspaces/skills$ git pull
remote: Enumerating objects: 226, done.
remote: Counting objects: 100% (12/12), done.
remote: Total 226 (delta 12), reused 12 (delta 12), pack-reused 214 (from 1)
Receiving objects: 100% (226/226), 293.56 KiB | 2.39 MiB/s, done.
Resolving deltas: 100% (60/60), completed with 5 local objects.
From https://github.com/anthropics/skills
   69c0b1a..98669c1  main                    -> origin/main
 * [new branch]      klazuka/export-20260203 -> origin/klazuka/export-20260203
 * [new branch]      klazuka/pptx-cleanup    -> origin/klazuka/pptx-cleanup
Updating 69c0b1a..98669c1
Fast-forward
 .claude-plugin/marketplace.json                                                             |   10 +
 skills/claude-api/LICENSE.txt                                                               |  202 ++
 skills/claude-api/SKILL.md                                                                  |  262 +++
 skills/claude-api/csharp/claude-api.md                                                      |  402 ++++
 skills/claude-api/curl/examples.md                                                          |  216 +++
 skills/claude-api/go/claude-api.md                                                          |  421 +++++
 skills/claude-api/java/claude-api.md                                                        |  432 +++++
 skills/claude-api/php/claude-api.md                                                         |  375 ++++
 skills/claude-api/python/agent-sdk/README.md                                                |  355 ++++
 skills/claude-api/python/agent-sdk/patterns.md                                              |  359 ++++
 skills/claude-api/python/claude-api/README.md                                               |  420 +++++
 skills/claude-api/python/claude-api/batches.md                                              |  185 ++
 skills/claude-api/python/claude-api/files-api.md                                            |  165 ++
 skills/claude-api/python/claude-api/streaming.md                                            |  162 ++
 skills/claude-api/python/claude-api/tool-use.md                                             |  590 ++++++
 skills/claude-api/ruby/claude-api.md                                                        |  113 ++
 skills/claude-api/shared/error-codes.md                                                     |  206 ++
 skills/claude-api/shared/live-sources.md                                                    |  121 ++
 skills/claude-api/shared/models.md                                                          |  119 ++
 skills/claude-api/shared/prompt-caching.md                                                  |  128 ++
 skills/claude-api/shared/tool-use-concepts.md                                               |  305 +++
 skills/claude-api/typescript/agent-sdk/README.md                                            |  297 +++
 skills/claude-api/typescript/agent-sdk/patterns.md                                          |  209 +++
 skills/claude-api/typescript/claude-api/README.md                                           |  333 ++++
 skills/claude-api/typescript/claude-api/batches.md                                          |  106 ++
 skills/claude-api/typescript/claude-api/files-api.md                                        |   98 +
 skills/claude-api/typescript/claude-api/streaming.md                                        |  178 ++
 skills/claude-api/typescript/claude-api/tool-use.md                                         |  527 ++++++
 skills/docx/SKILL.md                                                                        |  659 +++++--
 skills/docx/docx-js.md                                                                      |  350 ----
 skills/docx/ooxml.md                                                                        |  610 ------
 skills/docx/ooxml/scripts/pack.py                                                           |  159 --
 skills/docx/ooxml/scripts/unpack.py                                                         |   29 -
 skills/docx/ooxml/scripts/validate.py                                                       |   69 -
 skills/docx/ooxml/scripts/validation/docx.py                                                |  274 ---
 skills/docx/scripts/__init__.py                                                             |    2 +-
 skills/docx/scripts/accept_changes.py                                                       |  135 ++
 skills/docx/scripts/comment.py                                                              |  318 ++++
 skills/docx/scripts/document.py                                                             | 1276 -------------
 skills/docx/scripts/office/helpers/__init__.py                                              |    0
 skills/docx/scripts/office/helpers/merge_runs.py                                            |  199 ++
 skills/docx/scripts/office/helpers/simplify_redlines.py                                     |  197 ++
 skills/docx/scripts/office/pack.py                                                          |  159 ++
 skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/dml-chart.xsd             |    0
 skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd      |    0
 skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd           |    0
 skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd      |    0
 skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/dml-main.xsd              |    0
 skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/dml-picture.xsd           |    0
 .../docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd   |    0
 .../{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd     |    0
 skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/pml.xsd                   |    0
 .../office}/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd                |    0
 skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd   |    0
 .../docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd |    0
 .../office}/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd                  |    0
 .../office}/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd                |    0
 .../office}/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd                 |    0
 .../office}/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd               |    0
 .../office}/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd           |    0
 skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/shared-math.xsd           |    0
 .../{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd  |    0
 skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/sml.xsd                   |    0
 skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/vml-main.xsd              |    0
 skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd     |    0
 .../docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd  |    0
 .../docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd   |    0
 .../{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd     |    0
 skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/wml.xsd                   |    0
 skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/xml.xsd                   |    0
 skills/docx/{ooxml => scripts/office}/schemas/ecma/fouth-edition/opc-contentTypes.xsd       |    0
 skills/docx/{ooxml => scripts/office}/schemas/ecma/fouth-edition/opc-coreProperties.xsd     |    0
 skills/docx/{ooxml => scripts/office}/schemas/ecma/fouth-edition/opc-digSig.xsd             |    0
 skills/docx/{ooxml => scripts/office}/schemas/ecma/fouth-edition/opc-relationships.xsd      |    0
 skills/docx/{ooxml => scripts/office}/schemas/mce/mc.xsd                                    |    0
 skills/docx/{ooxml => scripts/office}/schemas/microsoft/wml-2010.xsd                        |    0
 skills/docx/{ooxml => scripts/office}/schemas/microsoft/wml-2012.xsd                        |    0
 skills/docx/{ooxml => scripts/office}/schemas/microsoft/wml-2018.xsd                        |    0
 skills/docx/{ooxml => scripts/office}/schemas/microsoft/wml-cex-2018.xsd                    |    0
 skills/docx/{ooxml => scripts/office}/schemas/microsoft/wml-cid-2016.xsd                    |    0
 skills/docx/{ooxml => scripts/office}/schemas/microsoft/wml-sdtdatahash-2020.xsd            |    0
 skills/docx/{ooxml => scripts/office}/schemas/microsoft/wml-symex-2015.xsd                  |    0
 skills/docx/scripts/office/soffice.py                                                       |  183 ++
 skills/docx/scripts/office/unpack.py                                                        |  132 ++
 skills/docx/scripts/office/validate.py                                                      |  111 ++
 skills/docx/{ooxml/scripts/validation => scripts/office/validators}/__init__.py             |    0
 skills/{pptx/ooxml/scripts/validation => docx/scripts/office/validators}/base.py            |  310 +---
 skills/docx/scripts/office/validators/docx.py                                               |  446 +++++
 skills/{pptx/ooxml/scripts/validation => docx/scripts/office/validators}/pptx.py            |   44 +-
 skills/docx/{ooxml/scripts/validation => scripts/office/validators}/redlining.py            |   74 +-
 skills/docx/scripts/templates/comments.xml                                                  |    4 +-
 skills/docx/scripts/templates/commentsExtended.xml                                          |    4 +-
 skills/docx/scripts/templates/commentsExtensible.xml                                        |    4 +-
 skills/docx/scripts/templates/commentsIds.xml                                               |    4 +-
 skills/docx/scripts/templates/people.xml                                                    |    4 +-
 skills/docx/scripts/utilities.py                                                            |  374 ----
 skills/pdf/SKILL.md                                                                         |   34 +-
 skills/pdf/forms.md                                                                         |  283 ++-
 skills/pdf/scripts/check_bounding_boxes.py                                                  |    5 -
 skills/pdf/scripts/check_bounding_boxes_test.py                                             |  226 ---
 skills/pdf/scripts/check_fillable_fields.py                                                 |    1 -
 skills/pdf/scripts/convert_pdf_to_images.py                                                 |    2 -
 skills/pdf/scripts/create_validation_image.py                                               |    4 -
 skills/pdf/scripts/extract_form_field_info.py                                               |   32 +-
 skills/pdf/scripts/extract_form_structure.py                                                |  115 ++
 skills/pdf/scripts/fill_fillable_fields.py                                                  |   16 -
 skills/pdf/scripts/fill_pdf_form_with_annotations.py                                        |   61 +-
 skills/pptx/SKILL.md                                                                        |  652 ++-----
 skills/pptx/editing.md                                                                      |  205 ++
 skills/pptx/html2pptx.md                                                                    |  625 -------
 skills/pptx/ooxml.md                                                                        |  427 -----
 skills/pptx/ooxml/scripts/pack.py                                                           |  159 --
 skills/pptx/ooxml/scripts/unpack.py                                                         |   29 -
 skills/pptx/ooxml/scripts/validate.py                                                       |   69 -
 skills/pptx/ooxml/scripts/validation/docx.py                                                |  274 ---
 skills/pptx/pptxgenjs.md                                                                    |  420 +++++
 skills/pptx/scripts/__init__.py                                                             |    0
 skills/pptx/scripts/add_slide.py                                                            |  195 ++
 skills/pptx/scripts/clean.py                                                                |  286 +++
 skills/pptx/scripts/html2pptx.js                                                            |  979 ----------
 skills/pptx/scripts/inventory.py                                                            | 1020 ----------
 skills/pptx/scripts/office/helpers/__init__.py                                              |    0
 skills/pptx/scripts/office/helpers/merge_runs.py                                            |  199 ++
 skills/pptx/scripts/office/helpers/simplify_redlines.py                                     |  197 ++
 skills/pptx/scripts/office/pack.py                                                          |  159 ++
 skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/dml-chart.xsd             |    0
 skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd      |    0
 skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd           |    0
 skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd      |    0
 skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/dml-main.xsd              |    0
 skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/dml-picture.xsd           |    0
 .../pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd   |    0
 .../{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd     |    0
 skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/pml.xsd                   |    0
 .../office}/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd                |    0
 skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd   |    0
 .../pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd |    0
 .../office}/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd                  |    0
 .../office}/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd                |    0
 .../office}/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd                 |    0
 .../office}/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd               |    0
 .../office}/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd           |    0
 skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/shared-math.xsd           |    0
 .../{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd  |    0
 skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/sml.xsd                   |    0
 skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/vml-main.xsd              |    0
 skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd     |    0
 .../pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd  |    0
 .../pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd   |    0
 .../{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd     |    0
 skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/wml.xsd                   |    0
 skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/xml.xsd                   |    0
 skills/pptx/{ooxml => scripts/office}/schemas/ecma/fouth-edition/opc-contentTypes.xsd       |    0
 skills/pptx/{ooxml => scripts/office}/schemas/ecma/fouth-edition/opc-coreProperties.xsd     |    0
 skills/pptx/{ooxml => scripts/office}/schemas/ecma/fouth-edition/opc-digSig.xsd             |    0
 skills/pptx/{ooxml => scripts/office}/schemas/ecma/fouth-edition/opc-relationships.xsd      |    0
 skills/pptx/{ooxml => scripts/office}/schemas/mce/mc.xsd                                    |    0
 skills/pptx/{ooxml => scripts/office}/schemas/microsoft/wml-2010.xsd                        |    0
 skills/pptx/{ooxml => scripts/office}/schemas/microsoft/wml-2012.xsd                        |    0
 skills/pptx/{ooxml => scripts/office}/schemas/microsoft/wml-2018.xsd                        |    0
 skills/pptx/{ooxml => scripts/office}/schemas/microsoft/wml-cex-2018.xsd                    |    0
 skills/pptx/{ooxml => scripts/office}/schemas/microsoft/wml-cid-2016.xsd                    |    0
 skills/pptx/{ooxml => scripts/office}/schemas/microsoft/wml-sdtdatahash-2020.xsd            |    0
 skills/pptx/{ooxml => scripts/office}/schemas/microsoft/wml-symex-2015.xsd                  |    0
 skills/pptx/scripts/office/soffice.py                                                       |  183 ++
 skills/pptx/scripts/office/unpack.py                                                        |  132 ++
 skills/pptx/scripts/office/validate.py                                                      |  111 ++
 skills/pptx/{ooxml/scripts/validation => scripts/office/validators}/__init__.py             |    0
 skills/{docx/ooxml/scripts/validation => pptx/scripts/office/validators}/base.py            |  310 +---
 skills/pptx/scripts/office/validators/docx.py                                               |  446 +++++
 skills/{docx/ooxml/scripts/validation => pptx/scripts/office/validators}/pptx.py            |   44 +-
 skills/pptx/{ooxml/scripts/validation => scripts/office/validators}/redlining.py            |   74 +-
 skills/pptx/scripts/rearrange.py                                                            |  231 ---
 skills/pptx/scripts/replace.py                                                              |  385 ----
 skills/pptx/scripts/thumbnail.py                                                            |  399 ++--
 skills/skill-creator/SKILL.md                                                               |  555 +++---
 skills/skill-creator/agents/analyzer.md                                                     |  274 +++
 skills/skill-creator/agents/comparator.md                                                   |  202 ++
 skills/skill-creator/agents/grader.md                                                       |  223 +++
 skills/skill-creator/assets/eval_review.html                                                |  146 ++
 skills/skill-creator/eval-viewer/generate_review.py                                         |  471 +++++
 skills/skill-creator/eval-viewer/viewer.html                                                | 1325 +++++++++++++
 skills/skill-creator/references/output-patterns.md                                          |   82 -
 skills/skill-creator/references/schemas.md                                                  |  430 +++++
 skills/skill-creator/references/workflows.md                                                |   28 -
 skills/skill-creator/scripts/__init__.py                                                    |    0
 skills/skill-creator/scripts/aggregate_benchmark.py                                         |  401 ++++
 skills/skill-creator/scripts/generate_report.py                                             |  326 ++++
 skills/skill-creator/scripts/improve_description.py                                         |  247 +++
 skills/skill-creator/scripts/init_skill.py                                                  |  303 ---
 skills/skill-creator/scripts/package_skill.py                                               |   40 +-
 skills/skill-creator/scripts/quick_validate.py                                              |   14 +-
 skills/skill-creator/scripts/run_eval.py                                                    |  310 ++++
 skills/skill-creator/scripts/run_loop.py                                                    |  328 ++++
 skills/skill-creator/scripts/utils.py                                                       |   47 +
 skills/xlsx/SKILL.md                                                                        |   21 +-
 skills/xlsx/recalc.py                                                                       |  178 --
 skills/xlsx/scripts/office/helpers/__init__.py                                              |    0
 skills/xlsx/scripts/office/helpers/merge_runs.py                                            |  199 ++
 skills/xlsx/scripts/office/helpers/simplify_redlines.py                                     |  197 ++
 skills/xlsx/scripts/office/pack.py                                                          |  159 ++
 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd                        | 1499 +++++++++++++++
 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd                 |  146 ++
 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd                      | 1085 +++++++++++
 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd                 |   11 +
 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd                         | 3081 ++++++++++++++++++++++++++++++
 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd                      |   23 +
 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd           |  185 ++
 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd        |  287 +++
 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd                              | 1676 +++++++++++++++++
 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd |   28 +
 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd              |  144 ++
 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd         |  174 ++
 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd   |   25 +
 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd |   18 +
 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd  |   59 +
 .../xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd   |   56 +
 .../scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd    |  195 ++
 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd                      |  582 ++++++
 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd     |   25 +
 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd                              | 4439 ++++++++++++++++++++++++++++++++++++++++++++
 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd                         |  570 ++++++
 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd                |  509 +++++
 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd          |   12 +
 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd           |  108 ++
 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd        |   96 +
 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd                              | 3646 ++++++++++++++++++++++++++++++++++++
 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd                              |  116 ++
 skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd                  |   42 +
 skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd                |   50 +
 skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd                        |   49 +
 skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd                 |   33 +
 skills/xlsx/scripts/office/schemas/mce/mc.xsd                                               |   75 +
 skills/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd                                   |  560 ++++++
 skills/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd                                   |   67 +
 skills/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd                                   |   14 +
 skills/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd                               |   20 +
 skills/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd                               |   13 +
 skills/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd                       |    4 +
 skills/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd                             |    8 +
 skills/xlsx/scripts/office/soffice.py                                                       |  183 ++
 skills/xlsx/scripts/office/unpack.py                                                        |  132 ++
 skills/xlsx/scripts/office/validate.py                                                      |  111 ++
 skills/xlsx/scripts/office/validators/__init__.py                                           |   15 +
 skills/xlsx/scripts/office/validators/base.py                                               |  847 +++++++++
 skills/xlsx/scripts/office/validators/docx.py                                               |  446 +++++
 skills/xlsx/scripts/office/validators/pptx.py                                               |  275 +++
 skills/xlsx/scripts/office/validators/redlining.py                                          |  247 +++
 skills/xlsx/scripts/recalc.py                                                               |  184 ++
 249 files changed, 41029 insertions(+), 10062 deletions(-)
 create mode 100644 skills/claude-api/LICENSE.txt
 create mode 100644 skills/claude-api/SKILL.md
 create mode 100644 skills/claude-api/csharp/claude-api.md
 create mode 100644 skills/claude-api/curl/examples.md
 create mode 100644 skills/claude-api/go/claude-api.md
 create mode 100644 skills/claude-api/java/claude-api.md
 create mode 100644 skills/claude-api/php/claude-api.md
 create mode 100644 skills/claude-api/python/agent-sdk/README.md
 create mode 100644 skills/claude-api/python/agent-sdk/patterns.md
 create mode 100644 skills/claude-api/python/claude-api/README.md
 create mode 100644 skills/claude-api/python/claude-api/batches.md
 create mode 100644 skills/claude-api/python/claude-api/files-api.md
 create mode 100644 skills/claude-api/python/claude-api/streaming.md
 create mode 100644 skills/claude-api/python/claude-api/tool-use.md
 create mode 100644 skills/claude-api/ruby/claude-api.md
 create mode 100644 skills/claude-api/shared/error-codes.md
 create mode 100644 skills/claude-api/shared/live-sources.md
 create mode 100644 skills/claude-api/shared/models.md
 create mode 100644 skills/claude-api/shared/prompt-caching.md
 create mode 100644 skills/claude-api/shared/tool-use-concepts.md
 create mode 100644 skills/claude-api/typescript/agent-sdk/README.md
 create mode 100644 skills/claude-api/typescript/agent-sdk/patterns.md
 create mode 100644 skills/claude-api/typescript/claude-api/README.md
 create mode 100644 skills/claude-api/typescript/claude-api/batches.md
 create mode 100644 skills/claude-api/typescript/claude-api/files-api.md
 create mode 100644 skills/claude-api/typescript/claude-api/streaming.md
 create mode 100644 skills/claude-api/typescript/claude-api/tool-use.md
 delete mode 100644 skills/docx/docx-js.md
 delete mode 100644 skills/docx/ooxml.md
 delete mode 100755 skills/docx/ooxml/scripts/pack.py
 delete mode 100755 skills/docx/ooxml/scripts/unpack.py
 delete mode 100755 skills/docx/ooxml/scripts/validate.py
 delete mode 100644 skills/docx/ooxml/scripts/validation/docx.py
 create mode 100755 skills/docx/scripts/accept_changes.py
 create mode 100755 skills/docx/scripts/comment.py
 delete mode 100755 skills/docx/scripts/document.py
 create mode 100644 skills/docx/scripts/office/helpers/__init__.py
 create mode 100644 skills/docx/scripts/office/helpers/merge_runs.py
 create mode 100644 skills/docx/scripts/office/helpers/simplify_redlines.py
 create mode 100755 skills/docx/scripts/office/pack.py
 rename skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/dml-chart.xsd (100%)
 rename skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd (100%)
 rename skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd (100%)
 rename skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd (100%)
 rename skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/dml-main.xsd (100%)
 rename skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/dml-picture.xsd (100%)
 rename skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd (100%)
 rename skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd (100%)
 rename skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/pml.xsd (100%)
 rename skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd (100%)
 rename skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd (100%)
 rename skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd (100%)
 rename skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd (100%)
 rename skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd (100%)
 rename skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd (100%)
 rename skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd (100%)
 rename skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd (100%)
 rename skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/shared-math.xsd (100%)
 rename skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd (100%)
 rename skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/sml.xsd (100%)
 rename skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/vml-main.xsd (100%)
 rename skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd (100%)
 rename skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd (100%)
 rename skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd (100%)
 rename skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd (100%)
 rename skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/wml.xsd (100%)
 rename skills/docx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/xml.xsd (100%)
 rename skills/docx/{ooxml => scripts/office}/schemas/ecma/fouth-edition/opc-contentTypes.xsd (100%)
 rename skills/docx/{ooxml => scripts/office}/schemas/ecma/fouth-edition/opc-coreProperties.xsd (100%)
 rename skills/docx/{ooxml => scripts/office}/schemas/ecma/fouth-edition/opc-digSig.xsd (100%)
 rename skills/docx/{ooxml => scripts/office}/schemas/ecma/fouth-edition/opc-relationships.xsd (100%)
 rename skills/docx/{ooxml => scripts/office}/schemas/mce/mc.xsd (100%)
 rename skills/docx/{ooxml => scripts/office}/schemas/microsoft/wml-2010.xsd (100%)
 rename skills/docx/{ooxml => scripts/office}/schemas/microsoft/wml-2012.xsd (100%)
 rename skills/docx/{ooxml => scripts/office}/schemas/microsoft/wml-2018.xsd (100%)
 rename skills/docx/{ooxml => scripts/office}/schemas/microsoft/wml-cex-2018.xsd (100%)
 rename skills/docx/{ooxml => scripts/office}/schemas/microsoft/wml-cid-2016.xsd (100%)
 rename skills/docx/{ooxml => scripts/office}/schemas/microsoft/wml-sdtdatahash-2020.xsd (100%)
 rename skills/docx/{ooxml => scripts/office}/schemas/microsoft/wml-symex-2015.xsd (100%)
 create mode 100644 skills/docx/scripts/office/soffice.py
 create mode 100755 skills/docx/scripts/office/unpack.py
 create mode 100755 skills/docx/scripts/office/validate.py
 rename skills/docx/{ooxml/scripts/validation => scripts/office/validators}/__init__.py (100%)
 rename skills/{pptx/ooxml/scripts/validation => docx/scripts/office/validators}/base.py (71%)
 create mode 100644 skills/docx/scripts/office/validators/docx.py
 rename skills/{pptx/ooxml/scripts/validation => docx/scripts/office/validators}/pptx.py (79%)
 rename skills/docx/{ooxml/scripts/validation => scripts/office/validators}/redlining.py (72%)
 delete mode 100755 skills/docx/scripts/utilities.py
 delete mode 100644 skills/pdf/scripts/check_bounding_boxes_test.py
 create mode 100755 skills/pdf/scripts/extract_form_structure.py
 create mode 100644 skills/pptx/editing.md
 delete mode 100644 skills/pptx/html2pptx.md
 delete mode 100644 skills/pptx/ooxml.md
 delete mode 100755 skills/pptx/ooxml/scripts/pack.py
 delete mode 100755 skills/pptx/ooxml/scripts/unpack.py
 delete mode 100755 skills/pptx/ooxml/scripts/validate.py
 delete mode 100644 skills/pptx/ooxml/scripts/validation/docx.py
 create mode 100644 skills/pptx/pptxgenjs.md
 create mode 100644 skills/pptx/scripts/__init__.py
 create mode 100755 skills/pptx/scripts/add_slide.py
 create mode 100755 skills/pptx/scripts/clean.py
 delete mode 100755 skills/pptx/scripts/html2pptx.js
 delete mode 100755 skills/pptx/scripts/inventory.py
 create mode 100644 skills/pptx/scripts/office/helpers/__init__.py
 create mode 100644 skills/pptx/scripts/office/helpers/merge_runs.py
 create mode 100644 skills/pptx/scripts/office/helpers/simplify_redlines.py
 create mode 100755 skills/pptx/scripts/office/pack.py
 rename skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/dml-chart.xsd (100%)
 rename skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd (100%)
 rename skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd (100%)
 rename skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd (100%)
 rename skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/dml-main.xsd (100%)
 rename skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/dml-picture.xsd (100%)
 rename skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd (100%)
 rename skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd (100%)
 rename skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/pml.xsd (100%)
 rename skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd (100%)
 rename skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd (100%)
 rename skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd (100%)
 rename skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd (100%)
 rename skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd (100%)
 rename skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd (100%)
 rename skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd (100%)
 rename skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd (100%)
 rename skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/shared-math.xsd (100%)
 rename skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd (100%)
 rename skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/sml.xsd (100%)
 rename skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/vml-main.xsd (100%)
 rename skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd (100%)
 rename skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd (100%)
 rename skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd (100%)
 rename skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd (100%)
 rename skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/wml.xsd (100%)
 rename skills/pptx/{ooxml => scripts/office}/schemas/ISO-IEC29500-4_2016/xml.xsd (100%)
 rename skills/pptx/{ooxml => scripts/office}/schemas/ecma/fouth-edition/opc-contentTypes.xsd (100%)
 rename skills/pptx/{ooxml => scripts/office}/schemas/ecma/fouth-edition/opc-coreProperties.xsd (100%)
 rename skills/pptx/{ooxml => scripts/office}/schemas/ecma/fouth-edition/opc-digSig.xsd (100%)
 rename skills/pptx/{ooxml => scripts/office}/schemas/ecma/fouth-edition/opc-relationships.xsd (100%)
 rename skills/pptx/{ooxml => scripts/office}/schemas/mce/mc.xsd (100%)
 rename skills/pptx/{ooxml => scripts/office}/schemas/microsoft/wml-2010.xsd (100%)
 rename skills/pptx/{ooxml => scripts/office}/schemas/microsoft/wml-2012.xsd (100%)
 rename skills/pptx/{ooxml => scripts/office}/schemas/microsoft/wml-2018.xsd (100%)
 rename skills/pptx/{ooxml => scripts/office}/schemas/microsoft/wml-cex-2018.xsd (100%)
 rename skills/pptx/{ooxml => scripts/office}/schemas/microsoft/wml-cid-2016.xsd (100%)
 rename skills/pptx/{ooxml => scripts/office}/schemas/microsoft/wml-sdtdatahash-2020.xsd (100%)
 rename skills/pptx/{ooxml => scripts/office}/schemas/microsoft/wml-symex-2015.xsd (100%)
 create mode 100644 skills/pptx/scripts/office/soffice.py
 create mode 100755 skills/pptx/scripts/office/unpack.py
 create mode 100755 skills/pptx/scripts/office/validate.py
 rename skills/pptx/{ooxml/scripts/validation => scripts/office/validators}/__init__.py (100%)
 rename skills/{docx/ooxml/scripts/validation => pptx/scripts/office/validators}/base.py (71%)
 create mode 100644 skills/pptx/scripts/office/validators/docx.py
 rename skills/{docx/ooxml/scripts/validation => pptx/scripts/office/validators}/pptx.py (79%)
 rename skills/pptx/{ooxml/scripts/validation => scripts/office/validators}/redlining.py (72%)
 delete mode 100755 skills/pptx/scripts/rearrange.py
 delete mode 100755 skills/pptx/scripts/replace.py
 create mode 100644 skills/skill-creator/agents/analyzer.md
 create mode 100644 skills/skill-creator/agents/comparator.md
 create mode 100644 skills/skill-creator/agents/grader.md
 create mode 100644 skills/skill-creator/assets/eval_review.html
 create mode 100644 skills/skill-creator/eval-viewer/generate_review.py
 create mode 100644 skills/skill-creator/eval-viewer/viewer.html
 delete mode 100644 skills/skill-creator/references/output-patterns.md
 create mode 100644 skills/skill-creator/references/schemas.md
 delete mode 100644 skills/skill-creator/references/workflows.md
 create mode 100644 skills/skill-creator/scripts/__init__.py
 create mode 100755 skills/skill-creator/scripts/aggregate_benchmark.py
 create mode 100755 skills/skill-creator/scripts/generate_report.py
 create mode 100755 skills/skill-creator/scripts/improve_description.py
 delete mode 100755 skills/skill-creator/scripts/init_skill.py
 create mode 100755 skills/skill-creator/scripts/run_eval.py
 create mode 100755 skills/skill-creator/scripts/run_loop.py
 create mode 100644 skills/skill-creator/scripts/utils.py
 delete mode 100644 skills/xlsx/recalc.py
 create mode 100644 skills/xlsx/scripts/office/helpers/__init__.py
 create mode 100644 skills/xlsx/scripts/office/helpers/merge_runs.py
 create mode 100644 skills/xlsx/scripts/office/helpers/simplify_redlines.py
 create mode 100755 skills/xlsx/scripts/office/pack.py
 create mode 100644 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd
 create mode 100644 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd
 create mode 100644 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd
 create mode 100644 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd
 create mode 100644 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd
 create mode 100644 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd
 create mode 100644 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd
 create mode 100644 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd
 create mode 100644 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd
 create mode 100644 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd
 create mode 100644 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd
 create mode 100644 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd
 create mode 100644 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd
 create mode 100644 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd
 create mode 100644 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd
 create mode 100644 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd
 create mode 100644 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd
 create mode 100644 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd
 create mode 100644 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd
 create mode 100644 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd
 create mode 100644 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd
 create mode 100644 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd
 create mode 100644 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd
 create mode 100644 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd
 create mode 100644 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd
 create mode 100644 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd
 create mode 100644 skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd
 create mode 100644 skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd
 create mode 100644 skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd
 create mode 100644 skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd
 create mode 100644 skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd
 create mode 100644 skills/xlsx/scripts/office/schemas/mce/mc.xsd
 create mode 100644 skills/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd
 create mode 100644 skills/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd
 create mode 100644 skills/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd
 create mode 100644 skills/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd
 create mode 100644 skills/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd
 create mode 100644 skills/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd
 create mode 100644 skills/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd
 create mode 100644 skills/xlsx/scripts/office/soffice.py
 create mode 100755 skills/xlsx/scripts/office/unpack.py
 create mode 100755 skills/xlsx/scripts/office/validate.py
 create mode 100644 skills/xlsx/scripts/office/validators/__init__.py
 create mode 100644 skills/xlsx/scripts/office/validators/base.py
 create mode 100644 skills/xlsx/scripts/office/validators/docx.py
 create mode 100644 skills/xlsx/scripts/office/validators/pptx.py
 create mode 100644 skills/xlsx/scripts/office/validators/redlining.py
 create mode 100755 skills/xlsx/scripts/recalc.py
builder@DESKTOP-QADGF36:~/Workspaces/skills$ ls
README.md  THIRD_PARTY_NOTICES.md  skills  spec  template
builder@DESKTOP-QADGF36:~/Workspaces/skills$ ls skills/
algorithmic-art   canvas-design  doc-coauthoring  frontend-design  mcp-builder  pptx           slack-gif-creator  web-artifacts-builder  xlsx
brand-guidelines  claude-api     docx             internal-comms   pdf          skill-creator  theme-factory      webapp-testing

I noticed since I updated last, they removed claude-api. Wonder if the leaks of their code had anything to do with that.

My mode of using skills is to sym-link or copy them in the more global ~/.agent/skills

I’ll go ahead and link that skill creator there

$ ln -s /home/builder/Workspaces/skills/skills/skill-creator /home/builder/.agents/skills/skill-creator

My second habit is to aggregate my newly created skills into their own private GIT repo

/content/images/2026/04/pi-02.png

Since I actually care about these now, I’ll do a backup to Codeberg (always good to do 2 homes for GIT)

Now that that is sorted, let’s clone our own agentskills repo to build something

builder@DESKTOP-QADGF36:~/Workspaces$ git clone https://forgejo.freshbrewed.science/builderadmin/agentskills.git
Cloning into 'agentskills'...
remote: Enumerating objects: 11, done.
remote: Counting objects: 100% (11/11), done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 11 (delta 1), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (11/11), 4.07 KiB | 4.07 MiB/s, done.
Resolving deltas: 100% (1/1), done.
builder@DESKTOP-QADGF36:~/Workspaces$ cd agentskills/
builder@DESKTOP-QADGF36:~/Workspaces/agentskills$ nvm use lts/jod
Now using node v22.22.0 (npm v10.9.4)

I fired up Pi and tried to load my skill.. seems i need to feed the pig…

/content/images/2026/04/pi-03.png

I have auto-reload disabled so when it’s out it’s out. So i fed it a $20

/content/images/2026/04/pi-04.png

Anthropic also does this use it or lose it thing

/content/images/2026/04/pi-05.png

So that’s another reason I’m not a giant fan of them, even if their tooling is pretty good.

My next issue was Sonnet 3.7 isn’t available.. I think my eyes just screwed that up seeing the “.7”.. 4.6 is the latest, not 3.7

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

I can use the Skill creator with “/skill:skill-creator” - this makes Pi definitely load that creator skill for our next step.

Loading the skill already cost me 7c

/content/images/2026/04/pi-07.png

Let’s now build a skill out with Sonnet 4.6

As we can see, that took about 5 minutes with Pi and cost about US$0.395

/content/images/2026/04/pi-09.png

Claude native

Let’s now fire up Claude natively in the same directory

/content/images/2026/04/claudecode-01.png

As we can see, it can create a new Helm Chart skill, but it loves to launch agents in Parallel which I fear is going to cost me.

it finished

/content/images/2026/04/claudecode-03.png

And it did build out a skill

builder@DESKTOP-QADGF36:~/Workspaces/agentskills$ tree ./helm-charts-workspace/
./helm-charts-workspace/
└── iteration-1
    ├── benchmark.json
    ├── benchmark.md
    ├── eval-1
    │   ├── eval_metadata.json
    │   ├── with_skill
    │   │   └── run-1
    │   │       ├── grading.json
    │   │       ├── outputs
    │   │       │   ├── Chart.yaml
    │   │       │   ├── templates
    │   │       │   │   ├── NOTES.txt
    │   │       │   │   ├── _helpers.tpl
    │   │       │   │   ├── deployment.yaml
    │   │       │   │   ├── ingress.yaml
    │   │       │   │   ├── namespace.yaml
    │   │       │   │   ├── pvc.yaml
    │   │       │   │   └── service.yaml
    │   │       │   └── values.yaml
    │   │       └── timing.json
    │   └── without_skill
    │       └── run-1
    │           ├── grading.json
    │           ├── outputs
    │           │   ├── Chart.yaml
    │           │   ├── templates
    │           │   │   ├── NOTES.txt
    │           │   │   ├── _helpers.tpl
    │           │   │   ├── deployment.yaml
    │           │   │   ├── ingress.yaml
    │           │   │   ├── namespace.yaml
    │           │   │   ├── pvc.yaml
    │           │   │   └── service.yaml
    │           │   └── values.yaml
    │           └── timing.json
    ├── eval-2
    │   ├── eval_metadata.json
    │   ├── with_skill
    │   │   └── run-1
    │   │       ├── grading.json
    │   │       ├── outputs
    │   │       │   ├── Chart.yaml
    │   │       │   ├── templates
    │   │       │   │   ├── NOTES.txt
    │   │       │   │   ├── _helpers.tpl
    │   │       │   │   ├── deployment.yaml
    │   │       │   │   └── service.yaml
    │   │       │   └── values.yaml
    │   │       └── timing.json
    │   └── without_skill
    │       └── run-1
    │           ├── grading.json
    │           ├── outputs
    │           │   ├── Chart.yaml
    │           │   ├── templates
    │           │   │   ├── NOTES.txt
    │           │   │   ├── _helpers.tpl
    │           │   │   ├── deployment.yaml
    │           │   │   └── service.yaml
    │           │   └── values.yaml
    │           └── timing.json
    └── eval-3
        ├── eval_metadata.json
        ├── with_skill
        │   └── run-1
        │       ├── grading.json
        │       ├── outputs
        │       │   ├── templates
        │       │   │   ├── ingress.yaml
        │       │   │   └── namespace.yaml
        │       │   └── values_ingress_section.yaml
        │       └── timing.json
        └── without_skill
            └── run-1
                ├── grading.json
                ├── outputs
                │   ├── templates
                │   │   ├── ingress.yaml
                │   │   └── namespace.yaml
                │   └── values_ingress_section.yaml
                └── timing.json

28 directories, 53 files

But cost me at least $2.30

/content/images/2026/04/claudecode-04.png

I think that’s why heavy users quickly switch from the free model with pay-per-token to a Claude Pro or Max plan

/content/images/2026/04/claudecode-05.png

Gemma 4

I’m on my Windows box at the moment, so let’s pull down Gemma4 which dropped in Ollama just last night

/content/images/2026/04/gemma4-01.png

While it would appear I could download with my Ollama

/content/images/2026/04/gemma4-02.png

I’m prompted to upgrade them moment i try and use it

/content/images/2026/04/gemma4-04.png

In Windows, I don’t know a great way to just tell it to pull a model other than launch from system tray and try and use it. The first time you do it downloads the model of which you seek

/content/images/2026/04/gemma4-03.png

Let’s ask a coding question about Perl and see what it comes back with. I’ll pause a few times, but leave the timer up

That took about 2 minutes. This is pretty promising especially because my desktop nVidia 3070 only has 8Gb dedicated memory so it’s not ‘giant’ (my new laptop has 12Gb, but let’s keep with Windows for the moment).

My next test will use Gemma4 in VS Code by way of Continue.dev’s plugin. My plugin uses JSON, but yours might use YAML

  "models": [
    {
      "title": "gemma4:e4b",
      "provider": "ollama",
      "model": "gemma4:e4b"
    },
    ...
  ]

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

I worked through making a service skill

Many times over, it would get stuck making files and i would nudge it along. In the end, I just made the files for it and put in the contents. While i spent roughly 30m on this, I was also distracted and reading some articles so it was more like 15m to get the the work done.

I wanted to see if any of the charts were a bit borked, so I did a local test:

$ helm install --dry-run --debug myfakeskill ./helm-chart/
install.go:225: 2026-04-03 09:17:27.184010461 -0500 CDT m=+0.282573365 [debug] Original chart version: ""
install.go:242: 2026-04-03 09:17:27.184974141 -0500 CDT m=+0.283537045 [debug] CHART PATH: /home/builder/Workspaces/agentskills/python-app-setup/helm-chart

Error: INSTALLATION FAILED: template: fastapi-service/templates/secret.yaml:10:21: executing "fastapi-service/templates/secret.yaml" at <.Values.secret.apiKeyValue>: nil pointer evaluating interface {}.apiKeyValue
helm.go:86: 2026-04-03 09:17:27.265751891 -0500 CDT m=+0.364314795 [debug] template: fastapi-service/templates/secret.yaml:10:21: executing "fastapi-service/templates/secret.yaml" at <.Values.secret.apiKeyValue>: nil pointer evaluating interface {}.apiKeyValue
INSTALLATION FAILED
main.newInstallCmd.func2
        helm.sh/helm/v3/cmd/helm/install.go:158
github.com/spf13/cobra.(*Command).execute
        github.com/spf13/cobra@v1.8.1/command.go:985
github.com/spf13/cobra.(*Command).ExecuteC
        github.com/spf13/cobra@v1.8.1/command.go:1117
github.com/spf13/cobra.(*Command).Execute
        github.com/spf13/cobra@v1.8.1/command.go:1041
main.main
        helm.sh/helm/v3/cmd/helm/helm.go:85
runtime.main
        runtime/proc.go:283
runtime.goexit
        runtime/asm_amd64.s:1700

Let’s now try to fix this with Pi using our locally hosted models

I’ll create (or update) ~/.pi/agent/models.json

{
  "providers": {
    "ollama": {
      "baseUrl": "http://192.168.1.160:11434/v1",
      "api": "openai-completions",
      "apiKey": "ollama",
      "models": [
        { "id": "gemma4:e4b" },
        { "id": "qwen3:latest" }
      ]
    }
  }
}

Now, most will use localhost for the baseURL. But I found WSL doesn’t “see” my windows hosted Ollama and if i use Ollama in WSL, it doesn’t properly see my nVidia card. So even tho this is running in WSL on that exact host, I’m using my local IP seen in Windows (192.168.1.160) for the address.

/content/images/2026/04/gemma4-07.png

Let’s ask Pi (using Gemma4) to fix it

/content/images/2026/04/gemma4-08.png

It took about 2:40 to come up with it’s first idea for a fix, which required me to confirm (though Pi didn’t really suggest that, i just wrote “yes, do that” and hit enter).

However, over and over it would claim to do an edit but then just sit there. i ran that 3 times

/content/images/2026/04/gemma4-09.png

OpenCode

Like Pi, there is another local CLI we can use with Ollama, Opencode

builder@DESKTOP-QADGF36:~/Workspaces/agentskills$ npm i -g opencode-ai

added 5 packages in 8s

I need to create a local opencode json file with models

builder@DESKTOP-QADGF36:~/Workspaces/agentskills$ cat opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "ollama": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Ollama (local)",
      "options": {
        "baseURL": "http://192.168.1.160:11434/v1"
      },
      "models": {
        "gemma4:e4b": {
          "name": "gemma4"
        }
      }
    }
  }
}

It picked up the Anthropic key so I need to move to the gemma4 model I defined

/content/images/2026/04/opencode-01.png

I’ll feed the same prompt

/content/images/2026/04/opencode-02.png

This will kick in as it talks to Ollama in Windows

/content/images/2026/04/opencode-03.png

But it too failed

/content/images/2026/04/opencode-04.png

Here I feel like the guy with a Roomba who keeps setting it on top of the same piece of trash instead of just picking it up.

Fine, I’ll fix the damn error myself.

When we see:

Error: INSTALLATION FAILED: template: fastapi-service/templates/secret.yaml:10:26: executing “fastapi-service/templates/secret.yaml” at <.Values.secret.apiKeyValue>: nil pointer evaluating interface {}.apiKeyValue helm.go:86: 2026-04-03 14:35:03.126362357 -0500 CDT m=+0.433510017 [debug] template: fastapi-service/templates/secret.yaml:10:26: executing “fastapi-service/templates/secret.yaml” at <.Values.secret.apiKeyValue>: nil pointer evaluating interface {}.apiKeyValue

It is pretty clear that the secret should be wrapped in an if block and exposed in the values file.

We need to wrap it with an if, ie.g

{{- if .Values.secret.enabled }}
apiVersion: v1
kind: Secret
metadata:
  name: {{ include "chart.fullname" . }}-secret
  labels:
    {{- include "chart.labels" . | nindent 2 }}
type: Opaque
data:
  # Example data key/value pair
  api_key: {{ with .Values.secret.apiKeyValue }}{{ . | b64enc }}{{ end }}
{{- end }}

Then drop an enable (which is false by default) in the values

secret:
  enabled: false
  apiKeyValue: ""

I fixed the ingress and serviceaccount yamls and then it worked.

Commentary: Those who say you can just vibe code and don’t need to know things are fooling themselves.

Using the Skills we made with Pi and Gemma4

Again, just as before, you’ll see I have to nudge it along…

It made a start but really it just gave a start and couldn’t get much farther.

Gemini CLI

I plan to just try Gemini CLI now to see if it can finish the job

I’ll give it the same prompt:

Create a containerized Perl app using the perl-app-setup skill. The app should show a list of todos as stored locally in a local datastore and let the user check off items and add new items. they can also delete items.

It very quickly wrapped up, mostly using the Gemini 2.5 flash and 3 flash models

Testing

Let’s test the candidate work.

I’ll do a quick docker build

builder@DESKTOP-QADGF36:~/Workspaces/newApp$ docker build -t todo-app .
[+] Building 64.9s (17/17) FINISHED                                                                                       docker:default
 => [internal] load build definition from Dockerfile                                                                                0.0s
 => => transferring dockerfile: 801B                                                                                                0.0s
 => [internal] load metadata for docker.io/library/perl:5.38                                                                        1.3s
 => [internal] load metadata for docker.io/library/perl:5.38-slim                                                                   1.3s
 => [auth] library/perl:pull token for registry-1.docker.io                                                                         0.0s
 => [internal] load .dockerignore                                                                                                   0.0s
 => => transferring context: 158B                                                                                                   0.0s
 => [builder 1/6] FROM docker.io/library/perl:5.38@sha256:53060e111843f9b002cdea543dba7bfed54ff78e84b4abdf3b8df00451ea59c6         41.2s
 => => resolve docker.io/library/perl:5.38@sha256:53060e111843f9b002cdea543dba7bfed54ff78e84b4abdf3b8df00451ea59c6                  0.0s
 => => sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 32B / 32B                                            0.3s
 => => sha256:47077a70fcc3f1fb0ef4638f82fd22d1b93ab6a3e98e64f66a157f4ce9ebedba 2.50kB / 2.50kB                                      0.0s
 => => sha256:53060e111843f9b002cdea543dba7bfed54ff78e84b4abdf3b8df00451ea59c6 9.01kB / 9.01kB                                      0.0s
 => => sha256:c663d63fb5298262de60d5e229e4b408d4c354795fe8019e9c8ccb6456a26613 5.83kB / 5.83kB                                      0.0s
 => => sha256:8f6ad858d0a46fa8ee628532c70b8dc82d06179d543b0b09ec19fc03d4c5b373 49.30MB / 49.30MB                                    4.1s
 => => sha256:b012eb15dff0bce418c03ec940325aee6aa4300d771c325728855697e620c63a 25.62MB / 25.62MB                                    3.4s
 => => sha256:ee3a0e7d77f0c84203cab438fcf345647c8121bbd80506a3c692f8608a14c4f4 67.78MB / 67.78MB                                    7.2s
 => => sha256:8688d0f2f567884eb217c6f80efa063bdb13a1951e92e6c5cac1ae5b736f5e1b 236.08MB / 236.08MB                                 12.9s
 => => sha256:6623c4016360f6a494137f7a0696634876fd3b5f84b642440e829aca640bd3b2 1.37kB / 1.37kB                                      4.3s
 => => extracting sha256:8f6ad858d0a46fa8ee628532c70b8dc82d06179d543b0b09ec19fc03d4c5b373                                           3.6s
 => => sha256:dd84d29e92517951df8c584ef70adac3b219a9e94e47073c3477b437fee3d6d3 15.56MB / 15.56MB                                    6.0s
 => => sha256:5c58bc0a198b5b32b37cf1fa1d2fc7bd96b5b9145df52faecab5106829908cff 132B / 132B                                          6.3s
 => => extracting sha256:b012eb15dff0bce418c03ec940325aee6aa4300d771c325728855697e620c63a                                           1.4s
 => => extracting sha256:ee3a0e7d77f0c84203cab438fcf345647c8121bbd80506a3c692f8608a14c4f4                                           5.3s
 => => extracting sha256:8688d0f2f567884eb217c6f80efa063bdb13a1951e92e6c5cac1ae5b736f5e1b                                          23.1s
 => => extracting sha256:6623c4016360f6a494137f7a0696634876fd3b5f84b642440e829aca640bd3b2                                           0.0s
 => => extracting sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1                                           0.0s
 => => extracting sha256:dd84d29e92517951df8c584ef70adac3b219a9e94e47073c3477b437fee3d6d3                                           2.4s
 => => extracting sha256:5c58bc0a198b5b32b37cf1fa1d2fc7bd96b5b9145df52faecab5106829908cff                                           0.0s
 => [internal] load build context                                                                                                   0.0s
 => => transferring context: 11.19kB                                                                                                0.0s
 => [runtime 1/4] FROM docker.io/library/perl:5.38-slim@sha256:877a0596aa8b5ef64dd7bde002fac9da4fbcebdc727927ee3cb36d520ad8a5dc     8.3s
 => => resolve docker.io/library/perl:5.38-slim@sha256:877a0596aa8b5ef64dd7bde002fac9da4fbcebdc727927ee3cb36d520ad8a5dc             0.0s
 => => sha256:c3507f6b13e970e15b0a7f80894ebaf5585dcc16d37c13332bcd4ace74cf9de1 1.37kB / 1.37kB                                      0.4s
 => => sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 32B / 32B                                            0.3s
 => => sha256:877a0596aa8b5ef64dd7bde002fac9da4fbcebdc727927ee3cb36d520ad8a5dc 9.02kB / 9.02kB                                      0.0s
 => => sha256:b82b5ea7daa1a0755078a5297c8ecdf26e7ae43e8e759a372e1df8d0f7570dc9 1.92kB / 1.92kB                                      0.0s
 => => sha256:77f07f06f0362b7b34dcaed39280b3ea0f8ec3b0d21492b86b5071e2fa5a7b69 4.75kB / 4.75kB                                      0.0s
 => => sha256:ec781dee3f4719c2ca0dd9e73cb1d4ed834ed1a406495eb6e44b6dfaad5d1f8f 29.78MB / 29.78MB                                    1.5s
 => => sha256:444f25e108e264b00dae5fb350a4fbac78784586273ef37f290bdd3c8889599f 31.60MB / 31.60MB                                    2.9s
 => => sha256:e1debe2bad764c01de94cf2890688af6b6128e923bca730b5814a2696dd457f5 132B / 132B                                          0.7s
 => => extracting sha256:ec781dee3f4719c2ca0dd9e73cb1d4ed834ed1a406495eb6e44b6dfaad5d1f8f                                           2.3s
 => => extracting sha256:c3507f6b13e970e15b0a7f80894ebaf5585dcc16d37c13332bcd4ace74cf9de1                                           0.0s
 => => extracting sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1                                           0.0s
 => => extracting sha256:444f25e108e264b00dae5fb350a4fbac78784586273ef37f290bdd3c8889599f                                           3.8s
 => => extracting sha256:e1debe2bad764c01de94cf2890688af6b6128e923bca730b5814a2696dd457f5                                           0.0s
 => [runtime 2/4] WORKDIR /app                                                                                                      1.3s
 => [builder 2/6] WORKDIR /app                                                                                                      1.8s
 => [builder 3/6] RUN cpan App::cpanminus &&     apt-get update && apt-get install -y --no-install-recommends     build-essential  11.8s
 => [builder 4/6] COPY cpanfile .                                                                                                   0.0s
 => [builder 5/6] RUN cpanm --installdeps --notest .                                                                                6.3s
 => [builder 6/6] COPY . .                                                                                                          0.0s
 => [runtime 3/4] COPY --from=builder /usr/local/lib/perl5 /usr/local/lib/perl5                                                     0.7s
 => [runtime 4/4] COPY --from=builder /app .                                                                                        0.0s
 => exporting to image                                                                                                              0.6s
 => => exporting layers                                                                                                             0.5s
 => => writing image sha256:91c275518148c8e09222cd3c9c1f3db6719bd4105156aabd3cd11035e538f29c                                        0.0s
 => => naming to docker.io/library/todo-app                                                                                         0.0s

Running it shows this is just a command line app

builder@DESKTOP-QADGF36:~/Workspaces/newApp$ docker run -it --rm -v $(pwd)/data:/app/data todo-app -l
No todos found.
builder@DESKTOP-QADGF36:~/Workspaces/newApp$ docker run -it --rm -v $(pwd)/data:/app/data todo-app
No todos found.

I suppose I never demanded it be web-based. I can just add a task and see it listed

builder@DESKTOP-QADGF36:~/Workspaces/newApp$ perl bin/app.pl --add "Complete the coding challenge"
Added todo: Complete the coding challenge (ID: 1)
builder@DESKTOP-QADGF36:~/Workspaces/newApp$ docker run -it --rm -v $(pwd)/data:/app/data todo-app
ID  | Status     | Description
----------------------------------------
1   | [ ]        | Complete the coding challenge

Testing Python app skill

Let’s now test the Kubernetes service Python app skill

$ ln -s /home/builder/Workspaces/agentskills/python-app-setup /home/builder/.agents/skills/python-app-setup

I’m going to set a higher autocomplete and set steering and followup to all

/content/images/2026/04/pi-10.png

I’m going to pick the skill to sort of prime the pump on it

/content/images/2026/04/pi-11.png

My hope is that with Python, it might move faster than with Perl (which is arguably older and less common).

But time and time again, it failed to actually dot he work it planned

/content/images/2026/04/pi-12.png

However, when I moved to my Linux laptop and ran the same prompt:

Create a new project based on the guidelines from the skill my-python-app-skill. It should be a Todo app that is exposed via kubernetes and has a web interface. do not confirm each step, just proceed

It went way faster and had no issues writing files

I decided to test again using Gemma via Continue.dev.

This time I would use the larger video card in the gaming laptop (which is on 192.168.1.220), but with my local windows VS Code

{
  "models": [
    {
      "title": "gemma4:e4b",
      "provider": "ollama",
      "model": "gemma4:e4b"
    },
    {
      "model": "gemma4:e4b",
      "title": "gemma4:e4b (Legion)",
      "completionOptions": {},
      "apiBase": "http://192.168.1.220:11434",
      "provider": "ollama"
    },
    {
      "model": "gemma4:26b",
      "title": "gemma4:26b (Legion)",
      "completionOptions": {},
      "apiBase": "http://192.168.1.220:11434",
      "provider": "ollama"
    },
    ...

I could get it to list files, but not read them when trying to create an Ansible index:

using the @files just sends it to lunch and it never returns.

/content/images/2026/04/gemma4-12.png

I pivoted to Pi in WSL, but using the more powerful laptop (updating the ~/.pi/agent/models.json)

/content/images/2026/04/pi-13.png

I used . to try and tell Gemma4 to ‘move it along’

/content/images/2026/04/pi-14.png

But it didn’t update the index

/content/images/2026/04/pi-15.png

I tried several rounds with qwen3.5 as well, being very explicit in my ask - it too failed

/content/images/2026/04/pi-16.png

I even tried Ollama code

Is my ask too hard? I needed to sanity check it against Gemini CLI

This just used the flash model and knocked it out.

/content/images/2026/04/pi-17.png

Research

Let’s put a pin in GenAI coding for now. How about just general research?

/content/images/2026/04/ollamacode-02.png

It made a table, but it’s not readable - likely an Ollama Code issue more than a model issue

/content/images/2026/04/ollamacode-03.png

It immediately forgot it’s last request, so i just rephrased without asking for a table and got a good start for an article

/content/images/2026/04/ollamacode-04.png

I’m not a finance guy, so I wouldn’t really write a piece like that, but I might ask for some examples to punch up a topic I am writing about:

This could be a windows issue, but for the life of me I couldn’t get Ollama code to stop truncating the tables. I did, however, figure out a workaround - just use a ridiculous large terminal window

/content/images/2026/04/ollamacode-05.png

Summary

The first part of this article covered a user request to review Anthropics Claude Code versus using the same models in Pi.

The behavior of Claude code was to kick out up to 6 agents to do things, then come back and another 6 agents to evaluate and judge the work. The output in the end was fine, but it also wasn’t particularly fast. I found the time I spent building out the helm chart skill with Claude Code was about the same as it was building perl app skill. The quality might be better with helm but at what price?

I spent about US$0.35 making the Perl skill and about US$2.30 with Claude Code making the helm chart one. Both used the Anthropic “skill builder” skill. Assuming the quality is similar, I might use Pi from here on out. However, as a “free tier” user that pays per token, the money factor might really be my underlying driver.

Next we looked at Gemma4, which Google dropped just last week. It’s quite thorough and gave good answers. I tested it in VS Code with Continue.dev, Opencode, Ollama-code and Pi. I used Windows and Linux. Overall, I had better success with Pi and Opencode in Linux than anything else.

However, for coding work, Gemma4 is so damn timid. It just wants to check constantly back with the user. When you are using lightweight coding agents without much memory, this becomes a real issue as it just keeps forgetting what it was just asking you about and starts back over. I had really limited success with all my approaches. I just wanted to tell Gemma4 “just do the damn thing and don’t ask me!” but regardless of how I would phrase things, it would quickly forget and fail to write files.

To sanity check, I would pivot over to a Github free version of Copilot, or using Gemini CLI with Gemini 3 Flash/Flash lite and each time they would complete the work.

I will own that this could be a user error, some kind of “me problem” that needs more investigation.

When I pivoted to using Gemma4 for ideaation it did fantastic. While I’m not planning to write blog posts on refinancing, using it to come up with ideas for MCP vs Skills is something I might do. The use case here for such things becomes apparent when you are in the life phase with kids in sports.

Often I’ll be killing time in the backfield of Softball practice or in a swimming pool area built like a Faraday cage and just unable to get signal. Having an LLM option to help come up with ideas is really useful.

My common case is I’ll be writing a blog, or updating a deck for a presentation and find one area is kind of light on examples. I’ll ask the LLM something like “provide 5 common ways to migrate a vSphere hosted windows VM to GCP Compute Engine” and then of the 5 returned, 3 might sound plausible to me and get me going again. It can help provide that spark when my mental matches are wet.

genai claude anthropic gemma opencode pi continue.dev

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