AI agents in practice

The PHP vulnerability wasn’t the interesting part. How I handled it was.

A real example of useful AI work with human control built in.

← Back to InsightsApproval request and verification summary for a temporary PHP mitigation

On 21 October 2026, the PHP project released emergency updates for two critical security vulnerabilities.

The patch mattered. But the more useful lesson for me was how an AI agent helped investigate the problem, reduce the immediate risk, carry out an approved change and verify the result.

That is the difference between using AI to answer questions and giving it a useful, controlled role in real work.

Meet Frenchie, my AI colleague

If you have watched The Boys, you will probably recognise the name.

Frenchie is the resourceful problem-solver who finds a way through complicated situations. That made the name a good fit for an AI agent responsible for technical investigation and maintenance work.

Frenchie helps me monitor updates across my Linux servers. He checks what is available, identifies work that may need attention and reports back through Microsoft Teams.

Yes, Teams.

I already get plenty of "Slack" from friends about that.

Microsoft Teams notification from Frenchie reporting available server updates
Frenchie reported the available updates. Private infrastructure details have been removed.

It started with a simple question

Frenchie sent his usual update notification. Knowing about the PHP announcement, I replied:

Are the PHP updates out?

Alex asking Frenchie whether the PHP security updates are available
A simple follow-up question started the investigation.

Frenchie confirmed that the security releases were available. The official PHP advisory listed patched releases for the supported PHP branches and said updating was the only safe choice.

But I was already looking at the server’s normal package updates. I could see the kernel, OpenSSH and other operating-system packages.

There was no PHP update.

So I replied:

I don’t see PHP.

Frenchie confirming the PHP security releases while Alex notes the update is missing from the server package list
The public security release existed, but PHP was absent from the normal package list.

The obvious answer was not the right one

Instead of repeating that the update existed, Frenchie investigated how PHP was actually installed on that server.

The server was not using the standard operating-system PHP packages. Its active PHP runtimes were custom builds managed separately through the hosting platform.

That explained the discrepancy. The PHP project had released the fix, but the supported build for this particular environment was not yet available through its normal update path.

Frenchie explaining that the server uses separately managed PHP builds
The active runtimes were managed outside the normal operating-system update path.

This is where the agent became useful.

It did not just retrieve an answer. It checked the environment, found why the expected update was missing and identified the dependency that had to be resolved.

No patch yet, so we reduced the risk

We still had a known vulnerability and no supported build ready to install.

Frenchie identified a temporary configuration change: disabling session.upload_progress to block a confirmed path associated with one of the vulnerabilities.

This was not a complete fix. We treated it as a partial risk-reduction measure while waiting for the supported update. The proper outcome was still to patch PHP.

Frenchie prepared the change, created rollback copies and asked for approval before restarting the affected services.

I reviewed the proposed action and authorised it.

Alex approving a temporary PHP configuration mitigation while waiting for the supported update
The production change waited for explicit approval.

Frenchie then applied the setting, restarted the relevant services and checked that they were running. He also tested the affected websites and received HTTP 200 responses.

An HTTP 200 response does not prove every application function works. It does show that the sites were still responding after the change, which is an important operational check.

When the supported PHP build became available, Frenchie checked the PHP 8.3 selectors in use and confirmed that both were running PHP 8.3.36. He then repeated the website response checks.

The AI was not in charge. I was.

Frenchie could monitor, investigate, gather evidence, prepare a recommendation and execute an approved operation.

But a production change required my authorisation.

That distinction matters. Giving an AI agent unrestricted access to infrastructure is very different from giving it defined responsibilities, limited tools and approval gates for sensitive actions.

The useful pattern was straightforward:

  1. Monitor.
  2. Identify a discrepancy.
  3. Investigate the real environment.
  4. Recommend an action.
  5. Wait for approval.
  6. Make the change.
  7. Verify the result.
  8. Keep monitoring until the proper fix is available.

AI capability without governance is not a strategy. It is a risk.

This was never really about PHP

The same pattern can apply well beyond server maintenance.

An agent could monitor an operational process, identify missing information, investigate an invoice discrepancy, prepare a report or coordinate part of an onboarding workflow.

The goal is not to let AI make every decision. It is to give it enough business context and appropriate tools to take useful work off people’s plates, while keeping clear boundaries around risk.

That is the approach behind DCX’s Automation & AI work: understand the process first, decide where AI is justified, and keep control of the outcome.

A practical starting question is not, “Which AI model should we buy?”

It is:

What repeated work could an agent safely monitor, prepare or complete with the right approval points?

If that answer is unclear, a Business Technology Review can help map the systems, processes, ownership and risks before you automate anything.

Source: PHP’s official 2026 release archive and security advisory.

  • Address
  • 1 Noeleen St, Auckland, NZ