Sr. Content Developer at Microsoft, working remotely in PA, TechBash conference organizer, former Microsoft MVP, Husband, Dad and Geek.
160529 stories
·
33 followers

NYC Public Schools Ban AI Use Through Middle School

1 Share
New York City Public Schools is banning generative AI for students from pre-K through eighth grade for the 2026-27 school year, affecting more than half a million students in the nation's largest school district. ABC News reports: In a statement to ABC News, New York City Mayor Zohran Mamdani said that the city is implementing a moratorium on generative AI for students in pre-school or 2-K through eighth grade and will spend the next year "studying the impacts of this technology." Mamdani wrote in part, "the tech industry wants us to believe that A.I.-powered early education is not only inevitable, but necessary." "We do not see it that way," he added. [...] The district said it is implementing the most expansive AI moratorium in the nation, eliminating software that uses student-facing AI and banning companion chatbots. The city's AI moratorium does not apply to high school students. The district said it will offer twice-yearly AI literacy classes designed to help high school students "think critically" about the technology before they start to "rely" on it.

Read more of this story at Slashdot.

Read the whole story
alvinashcraft
26 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

Introducing Gemini 3.8 Flash and 3.8 Flash Cyber

1 Share
Gemini 3.8 Flash and 3.8 Flash Cyber deliver next-generation intelligence for agentic workflows and cybersecurity.
Read the whole story
alvinashcraft
27 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

Google ships its third Gemini Flash model in six weeks

1 Share
Google Gemini

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.

Fairwind gates Flash 3.8 Cyber

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.

Gemini 3.8 Flash: long-horizon coding and agents

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.

Credit: Google.

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.

Chinese models close the gap

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.

Credit: Google.

Cyber benchmarks

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.

Safety

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.

Gemini Pro?

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.

Availability

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.

Read the whole story
alvinashcraft
27 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

Introducing the S3 PowerShell Drive in AWS Tools for PowerShell

1 Share

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.

When to use S3 PowerShell Drive

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.

Get started

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:

   Type     LastModified              Size Name
   ----     ------------              ---- ----
   Bucket   2026-06-02 09:14:03            amzn-s3-demo-app-logs
   Bucket   2026-01-08 16:47:51            amzn-s3-demo-reports

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.

Navigate S3 like a local drive

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:

   Type     LastModified              Size Name
   ----     ------------              ---- ----
   Folder                                  q1
   Folder                                  q2
   Object   2026-03-31 18:02:11      48210 summary.txt

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.

Read and write objects like local files

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

Delete objects and prefixes

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

Access buckets across Regions from one drive

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

Scope a drive to one bucket or prefix

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/

Available on Windows, Linux, and macOS

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.

When to use the S3 cmdlets

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.

Try it today

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.

Read the whole story
alvinashcraft
27 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

4 engineering patterns behind the strongest AI Agents Challenge submissions

1 Share
The recent Google for Startups AI Agents Challenge revealed that the most successful multi-agent systems rely on foundational software engineering patterns rather than just raw model power. Winning architectures consistently implemented bidirectional MCP for seamless inter-agent communication, async event buses for parallel execution, strict unified validation for model fallbacks, and tiered routing to minimize expensive inference calls. By prioritizing these structural practices over simple linear prompt chains, developers can build more resilient, low-latency, and cost-effective agentic workflows.
Read the whole story
alvinashcraft
27 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

How AI Agents Discover and Integrate Public APIs

1 Share

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.

Search by intent, not by name

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.

The feature with no obvious API

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.

Connecting the MCP server

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.

Searching for an API I couldn’t name

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.

Claude Code calling the Orbit search tool and returning endpoint URNs

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.

Integrating the API

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 brief told me what would break

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:

  • Formats. when.start_time is epoch seconds. Nothing about a JSON booking payload suggests that, and ISO-8601 is the confident guess.
  • Nullability. busy can come back null and means true. Guess false and you double-book a clinician.
  • Retry semantics. The Idempotency-Key header on the send call is the difference between a retry and a patient getting two confirmation emails.
  • Dependencies. 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.

Writing the feature from the brief

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.

Calendar sync diagram

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.

What I’d tell the next person

  • Name the mechanism, not the feature. “Create a calendar event for a booked appointment” could pull back a school calendar system or an integration platform, because “calendar event” and “appointment” match anything carrying those nouns. “Find available free busy time slots before booking a meeting” returned the API I needed three times over. So look at what the endpoints are before anything else: results from unrelated domains mean your query was too generic, not that the API doesn’t exist. And don’t read meta.total as a match count. It reports the size of the page you asked for.
  • Read 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.
  • The most useful line is the one about what an endpoint won’t do. “Not supported” in 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 week I didn’t spend

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.

Resources

The post How AI Agents Discover and Integrate Public APIs appeared first on Postman Blog.

Read the whole story
alvinashcraft
28 minutes ago
reply
Pennsylvania, USA
Share this story
Delete
Next Page of Stories