Read more of this story at Slashdot.
Read more of this story at Slashdot.
Gemini 3.8 Flash and 3.8 Flash Cyber deliver next-generation intelligence for agentic workflows and cybersecurity.
Google hasn’t released a Gemini Pro model in a while, but on Wednesday, the company launched yet another set of Gemini Flash and Flash Cyber models.
Even though Gemini 3.7 Flash is only three weeks old (and this is Google’s third Flash release in six weeks), the new Flash model often outperforms it by quite a margin, especially on agentic coding tasks and agentic computer use.
Like before, Flash 3.8 will be available at $0.75/$3.75 per million input/output tokens. That’s the introductory price, though. It will expire on December 31, 2026, and go to $1.50/$7.50 then.
Flash 3.8 looks to be a very good model, and Google is right in calling it its “workhorse model,” but Flash 3.8 Cyber is worth a mention, too. With this, Google is essentially copying the Anthropic playbook.
Google describes the Cyber model as its “most capable cybersecurity model with frontier-level performance in vulnerability detection and automated patching.” And because of this, it’s only available to a select number of “trusted defenders” through a new program Google calls Fairwind.
These include about 650 trusted partners like Accenture, CrowdStrike, the Center for Internet Security, Datadog, Palo Alto Networks, Snowflake, and Wiz.
“The defender’s edge comes from shrinking the time between detecting a flaw and patching it,” Four Flynn, Google’s VP for Security and Privacy, writes in the announcement. “Through Google’s Fairwind Program, government and enterprise partners gain autonomous tools to repair systems faster and at scale, keeping them one step ahead of agentic-speed threats.”
With Flash 3.5 Cyber, Google had launched a limited-access program, but that didn’t have a name and seemed a bit ad hoc at the time.
As for Flash 3.8, Google notes that the new model often outperforms models like GPT-5.6 Sol from OpenAI and Claude Sonnet 5 and Opus 5 from Anthropic when it comes to working on complex engineering tasks. On benchmarks like DeepSWE, for example, it matches Opus 5 and beats GPT-5.6 Sol and Sonnet 5.
There’s a caveat here, though, in that Google also stresses that “3.8 Flash works harder.” But working harder means it will also use more tokens, and Google, to its credit, is open about that and notes that, “On complex tasks, it exhibits greater diligence — executing extra reasoning steps, and calling tools iteratively. At times, the model might use more tokens to maximize performance, especially at higher effort levels.”
To counteract this, developers can choose between different reasoning modes, though, just like with previous models.

Google’s benchmarks do not include Anthropic’s Fable 5.1, which was only released a day earlier. That’s a much stronger model, but also far more expensive.
Nobody would call Fable 5.1 a workhorse model, but it’s worth highlighting that on general agentic benchmarks like Terminal-Bench 4.0, where Flash 3.8 scores 19.1%, Fable 5.1 hits 55.8%, and Opus 5 gets to 51.8%. Meanwhile, on Terminal-Bench 2.1, which focuses on coding, Flash 3.8 does better than its competitors.
Terminal-Bench is the outlier here, though, as the Gemini model actually does quite well on other agentic tasks, even when compared to other flagship models.
Where Google’s model still struggles, despite some impressive gains, is on computer use (59% vs. 75.4% on OSWorld-2.0 for Opus 5) and GDPVal, a benchmark that tests models on knowledge work tasks, where Google, at 1545, remains well behind Opus 5 at 1824 but is finally catching up to Sonnet 5 at 1584.
Google notes that it was able to improve the model in such a short time in part because it’s now using agentic loops to improve the models, too. “Both of today’s releases are powered by the same foundational intelligence, and further accelerated by long-running agentic loops designed to recursively evaluate and refine the underlying models,” the team writes.
One thing worth noting is that Google’s comparison focuses on OpenAI and Anthropic, but it’s hard not to notice that on some benchmarks like DeepSWE 1.1, some of the Chinese models like GLM-5.3 and GLM-5.3 Flash, as well as DeepSeek v4 Pro and Kimi K3, are very much in the same league, too — and they often offer even better price/performance ratios.

As for Flash 3.8 Cyber, Google says it delivers “frontier-level performance in autonomous vulnerability discovery” on CyberGym, where it beats 3.5 Flash Cyber, which was released in July, and “significantly larger frontier models.”
CyberGym only covers C and C++ code, so Google also tested the model on an internal benchmark that spans 20 languages and reports a success rate above 70% there.
On Collinear’s CWE-Bench, the model scores a pass@1 of 47.2%, just behind “a leading frontier model at 47.8%” that Google doesn’t name.
Benchmarks only go so far, though. Chrome’s security team says the model produced 2.6 times more correct patches than “the best commercial models that are much larger,” while Wiz reports 7.5% to 9.7% higher recall on its internal penetration testing benchmark at 2.3 to 5.2 times lower cost.
On the safety front, Google says that 3.8 Flash is shipping “with safeguards against misuse in the domains of Chemical, Biological, Radiological, and Nuclear (CBRN) and cyber offense, while enabling beneficial use cases, as per our Frontier Safety Framework.”
Gemini Flash 3.8 Cyber has a more permissive set of safeguards, but that’s why it is only available to a select group of users, too.
Google does note that the new model is far more robust when it comes to prompt injections, too, with (almost) class-leading results in the Gray Swan IPI benchmark, for example.

The release of the next Gemini Pro model will be interesting. These Flash models are improving rapidly, and while Google has fumbled the Pro launch a bit, that model may have been worth the wait. Google’s strategy to bet on its Flash models in the meantime also means that it has been able to push a price/performance narrative that has been harder to tell for other U.S.-based frontier labs.
At this rate, though, we may see a Gemini 3.9 Flash before Gemini 4 Pro arrives.
Gemini 3.8 Flash is now available in the usual Google products like Antigravity, Google AI Studio, Android Studio, and Stitch, as well as Gemini Enterprise.
Consumers with AI Pro and Ultra subscriptions can also use it in the Gemini App, AI Mode in Google Search, and Gemini in Google Sheets.
The post Google ships its third Gemini Flash model in six weeks appeared first on The New Stack.
Explore and use Amazon Simple Storage Service (Amazon S3) like a file system with the new S3 PowerShell Drive. You can mount your S3 storage as a drive and navigate it with the same commands that are frequently used for local files: Set-Location, Get-ChildItem, Get-Content, Set-Content, and Remove-Item. Browse buckets and prefixes, read and write objects, and clean up data without needing to compose individual S3 cmdlet calls.
The AWS Tools for PowerShell already provides cmdlets for S3: Get-S3Object, Read-S3Object, Write-S3Object, and dozens more. These cmdlets are well-suited to writing scripts or performing precise operations.
On the other hand, a lot of S3 work is ad-hoc rather than scripted. You may want to explore a bucket manually to understand its contents, check a specific log file, or remove a file that was accidentally uploaded. For that kind of work, S3 PowerShell Drive enables you to work in a simplified environment of folders and files.
The drive works as a PowerShell provider, which presents buckets as folders and objects as files. Core navigation and file commands that work on a local drive can then work on S3. The drive exists only inside your PowerShell session. It is not an OS-level mount and is not visible outside of PowerShell.
The S3 PowerShell Drive ships as part of the AWS.Tools.S3 module; there’s no separate package to install. If you already use the S3 cmdlets, update to version 5.0.288 or later to use the S3 PowerShell Drive. Install or update it using AWS.Tools.Installer:
Install-AWSToolsModule AWS.Tools.S3
Mount a drive with a profile and Region, then list your buckets:
Mount-S3PSDrive -Name S3 -ProfileName my-profile -Region us-east-1
Get-ChildItem S3:\
Note: The -Region here sets up the S3 client, but the drive isn’t limited to that Region.
Sample output:
The drive resolves credentials and Region the same way every other S3 cmdlet does. This means if you’ve already set session defaults with Set-AWSCredential and Set-DefaultAWSRegion, then -ProfileName and -Region don’t have to be explicitly passed when mounting. For more information on how to set up credentials, see Authenticating the AWS Tools for PowerShell.
After mounting the S3 drive, set the current location to a bucket and a prefix, then list its contents. Tab completion works for buckets, prefixes, and objects, so you can build up a path without typing full names.
Set-Location S3:\amzn-s3-demo-reports\2026
Get-ChildItem
Sample output:
Get-ChildItem returns each item as a PowerShell object with Name, Type, Size, and LastModified properties. These listings can pipe directly into commands such as Where-Object and Sort-Object:
# List the 10 largest objects with the prefix "2026"
Get-ChildItem S3:\amzn-s3-demo-app-logs\2026 -Recurse |
Where-Object Type -eq 'Object' |
Sort-Object Size -Descending |
Select-Object -First 10 Name, Size, LastModified
Listings stream as results arrive from S3 so even a prefix with a large number of objects begins returning results right away. You can interrupt a listing at any time using Ctrl+C.
S3 PowerShell Drive presents objects as files, so common file commands are translated to S3 operations: Get-Content downloads an object and Set-Content uploads one. Both commands support -Encoding for text, and Get-Content supports -Raw to return the whole object as a single string. Read and write objects:
# Read an object
Get-Content S3:\amzn-s3-demo-reports\2026\summary.txt -Raw
# Write an object
Set-Content S3:\amzn-s3-demo-reports\2026\notes.txt -Value 'Draft complete'
Note: Uploads can be cancelled at any time with Ctrl+C and do not leave a half-written object in place of the old one.
Copy data between your local disk and S3 by piping Get-Content and Set-Content:
# Upload a local file
Get-Content .\report.csv | Set-Content S3:\amzn-s3-demo-reports\data\report.csv
# Download it again
Get-Content S3:\amzn-s3-demo-reports\data\report.csv | Set-Content .\local-copy.csv
Use Remove-Item to delete an object and -Recurse when deleting a prefix—the same convention as the built-in file system provider. There’s no confirmation prompt by default, but the -WhatIf and -Confirm parameters are supported.
To delete an object:
Remove-Item S3:\amzn-s3-demo-reports\2026\notes.txt
To preview a recursive delete before running it:
# Preview a recursive delete before running it
Remove-Item S3:\amzn-s3-demo-app-logs\2025 -Recurse -WhatIf
A single mounted drive can reach buckets across Regions. The first time you access a bucket, the provider determines its Region and routes calls to the correct endpoint. This removes the need for a separate drive per Region or any reconfiguration.
Mount-S3PSDrive -Name S3 -ProfileName my-profile -Region us-east-1
# This bucket is in ap-southeast-2 and commands work without extra configuration
Get-ChildItem S3:\amzn-s3-demo-sydney-bucket
Mount with -Root to confine a drive to a bucket, or a prefix within a bucket. This allows for a more focused view of a project’s data:
Mount-S3PSDrive -Name Reports -Root amzn-s3-demo-reports/2026
Get-ChildItem Reports:\ # Lists the contents of amzn-s3-demo-reports/2026/
S3 PowerShell Drive runs in both Windows PowerShell 5.1 and PowerShell 7+, so it’s available on Windows, Linux, and macOS.
One small difference across operating systems is that on Linux and macOS, ls, rm, and cat aliases do not work on the drive. These aliases stay bound to the native system tools rather than PowerShell cmdlets and won’t recognize an S3 path. The full cmdlet names, such as Get-ChildItem and Remove-Item, work the same everywhere.
S3 PowerShell Drive does not cover every S3 operation. Bucket lifecycle and server-side copies stay with the dedicated cmdlets. Use New-S3Bucket and Remove-S3Bucket to manage buckets, and Copy-S3Object for S3-to-S3 copies. Unsupported operations, such as Rename-Item, return a “not supported” error.
The S3 PowerShell Drive is available now in AWS.Tools.S3 version 5.0.288 and later.
For the full walkthrough, see the S3 PowerShell documentation in the AWS Tools for PowerShell User Guide. It covers additional topics such as storage classes, encoding options, and supported parameters for each command.
To report a bug or request a feature, open an issue in the aws-tools-for-powershell GitHub repository.

The hardest API to integrate is the one you cannot name.
You know exactly what the software needs to do: read a calendar, create an event, and send an email when the event is confirmed. What you do not know is which API exposes those capabilities, or whether one API can handle the entire workflow.
That turns discovery into a brute-force process. Every candidate becomes its own investigation: find the documentation, map the required capabilities to endpoints, inspect the authentication model, test the constraints, and determine what is missing. Most candidates fail only after you have already invested the time to understand them.
Orbit by Postman reverses that process. Instead of starting with an API name, you start with the task.
Describe what you want to build in plain language, and Orbit searches for public API endpoints that match the required capabilities. The result is not another list of documentation pages. Orbit returns callable endpoints with an evaluation of what each one supports, what it does not support, and how well it fits the task.
That distinction matters. “Calendar API” is a category. “Read events, create an event, and notify the attendee” is an executable workflow. Orbit evaluates APIs against the workflow rather than forcing the developer, or the agent, to infer capabilities from product names and documentation structure.
Once you select the endpoints, Orbit’s integration step generates a taskBrief containing the implementation details an agent needs: authentication, base URLs, request parameters, response shapes, execution order, and the gotchas most likely to break the integration. A single brief can include endpoints from multiple APIs, so the calendar and email portions do not need to come from the same provider. Orbit’s usage guide shows this flow across separate services.
Orbit can be used through its search and integration endpoints or connected to an AI agent through the Model Context Protocol (MCP). Either way, the shift is the same: the agent no longer searches the web, opens five documentation sets, and guesses which APIs fit.
It describes the outcome. Orbit finds the interfaces that can produce it.
The launch post has the full tour of both tools if you want to dive deeper.
My team is building a healthcare app: patient records, medication, appointments, and scheduling.
Booking already works. A patient picks a slot, we POST /api/appointments/, Postgres gets a record, and the service publishes an appointment.booked event. appointment-slots-service picks that event up and flips the slot to booked.
Nothing else happens. The clinician’s calendar never learns about the appointment, and the patient hears nothing from us after the booking screen. That causes two problems. A clinician who blocks time outside the app will get a patient booked over it, because our slots table can’t see that block. And a patient whose only record of the visit is a page they already closed has nothing reminding them to show up.
So the feature was clear enough: check the clinician’s calendar before we confirm a slot, write the appointment to that calendar, and email the patient. Three capabilities, and no idea whose API provided them.
That’s the question Orbit exists to answer, so I stopped guessing and handed the task to it.
First, I connected to the MCP server using Claude:
claude mcp add --transport http orbit https://mcp.buildwithorbit.ai/mcp
Then, I restarted my session so the schemas load, and the two tools show up as search and integrate:
search Find and evaluate public API endpoints that match a plain-language
goal. Describe what you need in `q`; each result includes `id`,
`resourceType`, `name`, `description`, `method`, `url`, and
`evaluateGuide`. Review `evaluateGuide` to pick the best fit, then
pass each chosen result's `id` and `resourceType` (as `type`) to
`integrate`. No authentication required.
integrate Get integration details for public endpoints from `search` results.
Provide a `task` describing what you want to accomplish and up to 10
`resources`. Returns a task brief covering authentication, base URLs,
request steps, parameters, expected responses, dependencies between
steps, and other important considerations.
Read the search description again, because it’s doing something clever. It tells the model to review evaluateGuide before choosing, and it names the exact field to carry into integrate. The chaining rule lives in the tool description rather than in my prompt, so the agent runs the two-step workflow without me explaining it. That’s the difference between an MCP server that wraps an API and one that encodes how the API is meant to be used.
I opened the GitHub repo locally, started Claude Code in it, and described the feature the way I’d describe it to a colleague:
> The appointments service publishes appointment.booked but nothing reaches the
clinician's real calendar. Find me an API that can check whether a clinician
is free before we confirm a slot.

The same session, unedited. Two Orbit [search] calls, and the endpoint IDs coming back in the response.
Note what the agent did to my sentence. I described a product problem, and it sent calendar vocabulary. That translation is the thing that makes or breaks a search here.
What came back was the Nylas Calendar API, and two endpoints that answer subtly different versions of my question:
| Endpoint | Question it answers | Scope constraint |
|---|---|---|
POST /v3/grants/{grant_id}/calendars/free-busy |
“Is this clinician busy between T1 and T2?” Raw busy blocks, with no titles, locations, or descriptions. | Grant-scoped, and every email address has to be on the same provider: all Google or all Microsoft. |
POST /v3/calendars/availability |
“Which N-minute slots are open across these people?” | Application-scoped, and it only returns availability for addresses already connected to your Nylas app. |
I hadn’t gone looking for Nylas; the search surfaced it, which is the whole point. Both paths are scoped to a grant, which is one connected mailbox and calendar that a clinic authorizes once through OAuth. A Google clinic and a Microsoft clinic are the same code path with a different grant.
Search hands you endpoints. integrate turns them into something an agent can write code against.
The call takes two things: the task, in the same plain language I used for search, and the endpoints I picked out of the results.
● orbit - integrate (MCP)
task: "When a patient books an appointment slot in a healthcare app, read the
clinician's calendar to check for conflicts, create a calendar event
for the visit, and send the patient a confirmation email"
resources:
- id: urn:orbit:endpoint:v1:1JfnSC668Gw0xjByXOjgh0EA8G3qVd4A…:nylas:return-all-events
type: endpoint
- id: urn:orbit:endpoint:v1:1JfnSC668Gw0xcUnlXP6gVtFBZ6Qk8nL…:nylas:create-an-event
type: endpoint
- id: urn:orbit:endpoint:v1:1JfnSC668Gw0yW6A9NI5lL7NJrnkapSj…:nylas:send-a-message
type: endpoint
What comes back is one taskBrief under five headings: FIT, AUTH, BASE URL, STEPS, and GOTCHAS. The middle two are one line each, and both are things I’d otherwise go find in a docs site:
AUTH
Bearer authentication for all steps. Send the Nylas API key as
`Authorization: Bearer <bearerToken>`; the collection references
{{bearerToken}}, but does not provide its value.
BASE URL
https://api.us.nylas.com for all steps.
STEPS is the bulk of the brief. Each step gets its method and path, every parameter with the place it goes, and an example value. It ends with the success and error response shapes and a Threading line saying what the step takes from the one before it:
1. GET /v3/grants/{grant_id}/events
Params:
calendar_id: string — e.g. `cal_123`; query parameter, required by the
supplied URL.
grant_id: string — e.g. `grant_123`; path variable.
limit: integer — `50`; query parameter, up to 200.
Optional conflict filters: `page_token`, `start` and `end`,
`show_cancelled`, `busy`, `title`, `description`, `location`, …
Returns:
200 OK; `data[]` containing events and a `request_id`. Errors include 400
with `request_id` and `error` (`type`, `message`, `provider_error`), or
401 with the same error shape.
Threading:
None
The two sections I didn’t expect to be useful were FIT and GOTCHAS. Here is the FIT section of the brief, verbatim as Orbit returned it:
FIT
Fully. The supplied requests cover calendar conflict checking, event
creation, and confirmation-email sending. They are related by the
appointment task but do not consume a value returned by another request,
so each request is described in order without fabricated response threading.
Read that FIT section closely. It says the three requests don’t consume each other’s return values, so it declines to invent threading between them. A generated guide that refuses to fabricate a dependency chain beats one that produces plausible glue code, because plausible glue code is what I debug later.
Further down the same brief, the event-creation step handed me the body shape directly:
2. POST /v3/grants/{grant_id}/events
Params:
grant_id: string — e.g. 'grant_123' (path)
calendar_id: string — e.g. 'cal_123' or 'primary' (query)
JSON body:
title: string — 'Patient appointment'
busy: boolean — true
visibility: string — 'private'
participants: array of objects
when: object — {"start_time":1690862400,"end_time":1690866000,
"start_timezone":"America/New_York",
"end_timezone":"America/New_York"}
reminders: object — {"use_default":false,"overrides":[...]}
And then the GOTCHAS section, again verbatim, which is the part I’d normally learn from a failed request:
GOTCHAS
- Use epoch seconds and the specified timezone fields in the event's
when object.
- The event and email calls are separate mutations; do not retry either
blindly. Use a unique Idempotency-Key for safe email retries.
- Some event fields may be null, including busy, calendar_id, when,
reminders.use_default, and reminders.overrides.
- Check all relevant event pages and compare the requested appointment
interval with returned event timing before creating the event; use
page_token for subsequent pages.
Three steps, the auth and base URL, plus the gotchas above: that’s the entire integration spec, and all of it arrived before I’d opened a browser tab.
So why not skip all of this and tell the agent “integrate Nylas v3 for me”? I’d get code. It would look right. The difference is where the details come from: my brief was generated against the Nylas v3 collection on the Postman API Network, the same indexed source the search matched. A model working without that is working from whatever it absorbed about Nylas during training, and the four things that broke my integration are exactly the things recall gets wrong:
when.start_time is epoch seconds. Nothing about a JSON booking payload suggests that, and ISO-8601 is the confident guess.busy can come back null and means true. Guess false and you double-book a clinician.Idempotency-Key header on the send call is the difference between a retry and a patient getting two confirmation emails.Threading: None on all three steps is a claim, not a blank, and FIT says it again in prose. The brief looked for values passed between the calls, found none, and said so. Ask a model to wire up three endpoints and it will thread them instead, because plausible beats absent and chained calls are what integration code looks like.I still had to write the consumer. What I didn’t have to do was learn any of this from a 400.
This is the part the whole search was for. The brief named the three calls, their bodies, and their failure modes, so what was left was deciding where in our app to put them. I didn’t have to compare providers or dig through documentation. I had to wire three known requests into a service that already existed.
The platform already publishes domain events over Kafka, so I didn’t touch the appointments service at all. appointment-slots-service shows the pattern, subscribing to the same topic to flip slot state.
Calendar sync is another consumer on that topic. Keeping it out of the booking request path means a Nylas outage delays a confirmation email instead of failing a patient’s booking, which is the tradeoff I want.

The three numbered calls run in the order the task brief listed them.
Everything is in healthcare-calendar-sync if you want to read it end to end, including the test suite that asserts the brief’s gotchas against a faked Postgres, Kafka, and Nylas.
One stop before you point any of this at a real mailbox. Nylas publishes its v3 collection on the Postman API Network, the same collection Orbit indexed to answer my search. Fork it into your workspace and every request from the task brief is ready to send. That’s the cheapest place to check the epoch-second format and the idempotency header, before a patient is on the other end of them.
meta.total as a match count. It reports the size of the page you asked for.GOTCHAS before you write the client. Epoch seconds, nullable busy, and the Idempotency-Key header were all sitting in the brief. Each one is a bug I’d otherwise have shipped and then heard about from a support ticket.evaluateGuide is the highest-value part of the search response. Nylas has separate endpoints for creating a draft and sending it, and the guide says so in the search result instead of making me find out from a 400.The integration itself is unremarkable: one Kafka consumer, three HTTP calls, and a thin client around them. What Orbit compressed was everything before that, where I knew the shape of the feature but not the name of the API.
search pointed me at an API that had been built for my task. integrate gave me the request bodies, the epoch-second format, the nullable field that would have caused double-bookings, and the idempotency header that keeps patients from getting duplicate mail. That last set is the part I value, because those are the failures that surface in production rather than in review.
Try it on something you’re stuck on. One command:
claude mcp add --transport http orbit https://mcp.buildwithorbit.ai/mcp
Then take a feature you’ve been putting off because you don’t know what to integrate with, and describe it in one sentence:
> We need to <the capability you're missing>. Search Orbit for an API that
does it, show me the evaluateGuide for the top results, then get the
integration brief for whichever ones you'd pick.
Read the evaluateGuide lines before you open a docs site, and read GOTCHAS before you write the client. Those two habits are what turned a week of provider comparison into an afternoon of writing a consumer. Then tell me whether the brief caught something you’d have shipped, because I’d like to know if my three were typical.
The post How AI Agents Discover and Integrate Public APIs appeared first on Postman Blog.