The Missing Layer in Google I/O 2026: Agent-Ready Websites

Old Web Contract vs New Web Contract diagram comparing the traditional web model focused on indexing, ranking, and human usability with the new agent-ready web model focused on retrieval, semantic structure, accessibility tree quality, and actionable interfaces for AI agents.

This is a submission for the Google I/O Writing Challenge

Everyone is talking about Gemini, Antigravity, AI Mode, and coding agents.

I want to talk about websites.

Because the Google I/O 2026 announcement that spoke to me most was not only a model announcement, an IDE update, or another productivity feature. It was the larger pattern behind several announcements: the web is becoming agentic.

That changes the job of a web developer.

For years, we built websites mainly for three audiences:

  1. humans using browsers;
  2. crawlers indexing pages;
  3. search engines ranking documents.

After Google I/O 2026, I think we need to add a fourth audience:

AI agents that read, reason, compare, inspect, click, call tools, and act on behalf of users.

That does not mean we should stop caring about humans. Quite the opposite. The best agent-ready website is usually a better human website too: clearer, more semantic, more accessible, more stable, and less ambiguous.

But it does mean that “looking good in the browser” is no longer enough.

A website now has to answer a deeper question:

Can an AI system understand what this page means, verify what it claims, and safely act on what it exposes?

That, to me, is the missing layer in Google I/O 2026: agent-ready websites.

The announcement I am focusing on: WebMCP and the agentic web

Google I/O 2026 had many AI announcements. Google’s own I/O 2026 recap frames the event around more capable models, agentic experiences, Antigravity, Information agents in Search, Gemini Spark, Universal Cart, and broader Gemini integration across products.

But the announcement that feels most underrated for web developers is the Chrome team’s work around the agentic web, especially WebMCP and the broader set of Chrome updates announced in “15 updates from Google I/O 2026: Powering the agentic web”.

The key idea behind WebMCP is simple but powerful:

Websites should be able to expose structured tools that browser-based agents can use with more reliability, precision, and context.

Instead of forcing an agent to visually guess its way through a complex interface, WebMCP aims to let a website describe actions in a more machine-friendly way. The Chrome team describes it as a proposed open web standard for exposing structured tools such as JavaScript functions and HTML forms to browser-based agents.

That matters because it changes the role of the website.

A website is no longer only a set of pages.

It can become a set of understandable capabilities.

For example, instead of an agent trying to click through a travel booking flow step by step, a site could expose a structured tool for checking availability, comparing options, or building an itinerary. The user would still need control and approval where appropriate, but the interaction becomes more explicit and less fragile.

This is not just automation.

This is a new contract between websites and agents.

Why this matters beyond WebMCP

The important part is not only WebMCP itself.

The important part is the direction.

Google I/O 2026 repeatedly pointed toward AI systems that do not merely answer questions, but help users complete tasks. Google described Gemini 3.5 as a family of models combining “frontier intelligence with action”, with Gemini 3.5 Flash positioned for agentic and coding workflows. Google’s I/O 2026 collection also highlights Information agents in Search, Gemini Spark, Universal Cart, and an agent-first development platform in Antigravity.

In parallel, Google Search Central published guidance for optimizing websites for generative AI features in Search. That guide keeps SEO in the picture, but reframes the environment: generative AI features use techniques such as retrieval-augmented generation and query fan-out, and Google explicitly encourages clear technical structure, crawlability, unique non-commodity content, and agentic-experience awareness.

Then web.dev published guidance on building agent-friendly websites, making the point even more concrete: agents can interpret websites through multiple signals, including screenshots, DOM structure, and the accessibility tree.

For me, these announcements are connected.

Search is becoming more generative.

Browsers are becoming more agentic.

Developer tools are becoming more autonomous.

And websites are becoming inputs to systems that do not behave like traditional users.

That is a big deal.

The old web contract is changing

The old web contract looked something like this:

  • make the page discoverable;
  • make the content indexable;
  • make the interface usable by humans;
  • make the page fast enough;
  • make the content rank.

That contract still matters.

But it is no longer complete.

The new contract adds questions like:

  • can an AI system retrieve the correct information from this page?
  • can it distinguish primary content from decorative noise?
  • can it identify the purpose of a button, form, or control?
  • can it understand pricing, availability, dates, policies, constraints, and exceptions?
  • can it use the accessibility tree as a reliable functional map?
  • can it perform an action without guessing?
  • can it avoid dangerous or irreversible steps without user confirmation?

Old Web Contract vs New Web Contract diagram comparing the traditional web model focused on indexing, ranking, and human usability with the new agent-ready web model focused on retrieval, semantic structure, accessibility tree quality, and actionable interfaces for AI agents.

This is where agent readiness begins.

It is not “SEO with a different name”.

It is not “add one magic file and hope AI systems cite you”.

It is the discipline of reducing ambiguity across content, markup, interface behavior, and actions.

SEO is still relevant, but it is not the whole story

One of the most useful parts of Google’s new generative AI search guidance is its refusal to treat AI search as a completely separate universe.

Google says foundational SEO practices still matter because generative AI features in Search are rooted in core Search ranking and quality systems. That is important. Crawlability, indexability, technical clarity, helpful content, good page experience, and structured information are not obsolete.

But I do not read this as “nothing has changed”.

I read it as:

SEO remains the foundation, but AI agents add a new interaction layer on top of that foundation.

A page can be indexed and still be hard for an agent to use.

A page can rank and still expose a confusing form.

A page can have structured data and still hide critical context behind vague UI labels.

A page can be beautiful and still be functionally broken for non-human navigation.

This is especially true when the task is not “find a document”, but “complete a journey”.

Finding a hotel page is one thing.

Understanding room types, checking dates, comparing cancellation policies, selecting accessibility options, and preparing a booking request is another.

That second experience is where agent readiness matters.

My critique: the agentic web could reward clarity — or punish fragile websites

My biggest concern is that agentic browsing may widen the gap between well-engineered websites and fragile interfaces.

A clean, semantic, accessible website may become easier for agents to understand and operate.

A visually impressive but structurally confusing website may become less useful in practice, even if it looks good to humans.

That matters because many modern interfaces are optimized for visual polish but not for semantic clarity.

We use clickable divs instead of buttons.

We hide labels because the placeholder looks cleaner.

We build custom controls that look beautiful but expose weak roles and names.

We rely on hover states that do not translate well to automation.

We split critical information across modals, accordions, carousels, and animation-heavy layouts.

We make forms that humans can eventually understand, but machines must infer.

For humans, this is annoying.

For agents, it is brittle.

And for developers, it is a warning.

The agentic web will not only need better models. It will need better websites.

The Agent Readiness Stack

Here is the mental model I would use after Google I/O 2026.

I call it the Agent Readiness Stack.

It has five layers.

Five-layer vertical stack diagram titled “Agent Readiness Stack”, showing Crawlability, Content Clarity, Semantic Structure, Accessibility Tree Quality, and Action Readiness as progressive layers between a website and an AI agent.

1. Crawlability

Before an agent can reason about your content, the content has to be discoverable and accessible.

This is the layer traditional SEO already knows well:

  • do not block important pages accidentally;
  • make critical content publicly reachable when it should be;
  • use sensible internal linking;
  • avoid unnecessary duplication;
  • keep JavaScript-rendered content accessible to search systems;
  • maintain clean status codes, canonical URLs, and sitemaps where appropriate.

This is not glamorous, but it is foundational.

If the page cannot be found, nothing else matters.

2. Content clarity

Generative AI search makes weak content easier to ignore.

Google’s guidance emphasizes unique, valuable, non-commodity content. That phrase matters because AI systems are increasingly good at summarizing common knowledge. If your page only repeats what everyone else says, there may be little reason to retrieve it, cite it, or send a user to it.

For developers and site owners, this means content should answer questions like:

  • what do we know from direct experience?
  • what can we explain better than generic sources?
  • what details would help a user make a real decision?
  • what constraints, trade-offs, edge cases, or risks should be visible?
  • what claims can be verified?

Agent-ready content is not necessarily longer.

It is clearer.

It makes the important facts explicit.

3. Semantic structure

HTML is not just a rendering target.

It is meaning.

When an interface is built with semantic elements, the browser, assistive technologies, crawlers, and agents have a better chance of understanding what is happening.

That means:

  • use real headings for structure;
  • use real buttons for actions;
  • use links for navigation;
  • connect labels to inputs;
  • expose names, roles, and states correctly;
  • avoid replacing native controls with fragile custom components unless there is a strong reason;
  • make important information part of the document, not only a visual decoration.

This is not about writing perfect HTML for its own sake.

It is about reducing interpretation errors.

A human can sometimes guess that a styled card is clickable.

An agent should not have to guess.

4. Accessibility tree quality

The accessibility tree may become one of the most important debugging surfaces for agent-ready websites.

web.dev describes the accessibility tree as a browser-native representation that distills the DOM into roles, names, and states of interactive elements. For assistive technology, it is essential. For agents, it can become a functional map of the page.

That means accessibility is not a separate checklist anymore.

It is part of AI usability.

If a button has no accessible name, a screen reader user suffers.

If a form field has no label, an agent may not understand what value belongs there.

If a custom control exposes the wrong role, automation becomes unreliable.

Accessibility work has always been about inclusion.

Now it is also becoming part of machine interpretability.

That should not reduce its human importance. It should increase its priority.

5. Action readiness

This is the new layer.

Can an agent safely act on the site?

Not every website needs this immediately. A blog post may only need to be readable and citeable. But ecommerce, travel, SaaS, local services, booking systems, dashboards, and support portals increasingly need to think about actions.

Actions require more than buttons.

They require intent, constraints, parameters, validation, and confirmation.

For example:

  • “Search rooms” is safer than “Submit”.
  • “Request booking quote” is clearer than “Continue”.
  • “Cancel subscription” must require explicit confirmation.
  • “Pay now” must never be hidden behind ambiguous automation.
  • “Compare plans” should expose plan names, prices, limits, and billing periods clearly.

WebMCP is interesting because it points toward a world where websites can expose those actions as structured tools instead of leaving agents to infer everything from pixels and DOM fragments.

That does not remove the need for UX.

It makes UX more explicit.

A small example: from a fragile form to an agent-readable form

Imagine a booking form.

A fragile version might look clean to humans but confusing to agents:

<div class="booking-card">
  <div class="field">Arrival</div>
  <input type="text" placeholder="Select date">

  <div class="field">Leaving</div>
  <input type="text" placeholder="Select date">

  <div class="fake-button" onclick="submitBooking()">
    Continue
  </div>
</div>

This may work visually, but it creates ambiguity:

  • the inputs do not have stable labels;
  • the fields do not have clear names;
  • the action is a clickable div;
  • the button text is generic;
  • the expected data format is unclear;
  • the user intent is hidden inside JavaScript.

A more agent-ready version starts with ordinary good HTML:

<form action="/booking/search" method="get" aria-labelledby="booking-search-title">
  <h2 id="booking-search-title">Search room availability</h2>

  <label for="check-in">Check-in date</label>
  <input id="check-in" name="check_in" type="date" required>

  <label for="check-out">Check-out date</label>
  <input id="check-out" name="check_out" type="date" required>

  <label for="guests">Number of guests</label>
  <input id="guests" name="guests" type="number" min="1" max="6" required>

  <button type="submit">Search available rooms</button>
</form>

This is not futuristic.

It is just clear.

But that is the point.

Agent readiness often starts with things web developers should already care about: semantic HTML, accessible names, explicit labels, stable actions, and meaningful copy.

If you later experiment with WebMCP, that same clarity becomes even more valuable. Current Lighthouse documentation for agentic browsing already points to schema validity concepts such as tool names, tool descriptions, input names, labels, and parameter descriptions.

The direction is obvious: agents need structured intent, not visual guesswork.

Split-screen technical illustration comparing a fragile visual-only booking form with an agent-ready semantic form using labels, real buttons, clear field names, and structured actions.

A practical checklist for developers

If I had to turn Google I/O 2026 into a practical checklist for everyday web work, I would start here.

Content

  • Do not publish generic summaries that anyone could produce.
  • Add first-hand experience, examples, constraints, and trade-offs.
  • Make claims easy to verify.
  • Keep dates, prices, availability, version numbers, and eligibility conditions explicit.
  • Use headings that describe the content, not vague marketing slogans.
  • Add useful images or diagrams when they clarify the topic.

HTML and interface structure

  • Use native buttons for actions.
  • Use links for navigation.
  • Avoid clickable non-interactive elements where possible.
  • Connect every form input with a visible or programmatically available label.
  • Use meaningful name attributes for form fields.
  • Make error messages specific and connected to the relevant fields.
  • Avoid hiding critical information only inside hover states or visual-only interactions.

Accessibility tree

  • Inspect the accessibility tree in Chrome DevTools.
  • Check whether every important action has a clear accessible name.
  • Verify that custom components expose correct roles, names, and states.
  • Test keyboard navigation.
  • Avoid layouts where the visual order and DOM order create confusion.

Agentic actions

  • Identify which actions an agent could safely help with.
  • Separate low-risk actions from high-risk actions.
  • Require explicit user confirmation for irreversible or sensitive actions.
  • Make action labels precise.
  • Consider whether structured tools, APIs, or WebMCP-like patterns could reduce ambiguity.
  • Log and monitor agent-triggered flows differently from normal user flows when appropriate.

Search and generative AI visibility

  • Keep foundational SEO healthy.
  • Make important pages crawlable and indexable.
  • Avoid manipulative “AI-only” content strategies.
  • Use structured data where it genuinely helps, but do not treat it as a magic solution.
  • Build content that deserves to be retrieved, summarized, and cited.

What I would test first

I am still in the first-look and reading-the-docs phase with WebMCP, so I do not want to pretend I have shipped it in production.

But if I were testing this today, I would start with a simple local service website or a booking flow.

For example, a small hotel or B&B website.

The task would be:

Can an AI agent understand the available rooms, compare the options, identify cancellation rules, check dates, and prepare a booking request without guessing?

I would audit the site in five passes:

Five-pass agent readiness audit workflow showing Content, HTML, Accessibility, Search, and Action review steps used to evaluate whether a website is ready to be understood and used by AI agents.

  1. Content pass: Are room types, prices, policies, services, accessibility options, and location details explicit?
  2. HTML pass: Are headings, links, buttons, forms, and labels semantic?
  3. Accessibility pass: Does the accessibility tree communicate the same intent as the visual UI?
  4. Search pass: Are key pages crawlable, indexable, and structured enough for discovery?
  5. Action pass: Which actions could safely be delegated to an agent, and which must require human approval?

That kind of audit is not just useful for agents.

It improves the site for everyone.

A clearer room page helps search engines.

A better form helps users.

A stronger accessibility tree helps assistive technologies.

A more explicit policy helps customers trust the business.

And if agents become a common interface to the web, the same improvements make the website easier for agents to operate.

That is why I think agent readiness is not a speculative idea.

It is a practical engineering direction.

Where I disagree with the hype

I do not think every website needs to rush into agentic automation tomorrow.

I also do not think every form needs to become a tool, every page needs an AI-specific representation, or every business needs to rebuild its interface around agents.

That would be premature.

There is also a risk that “agent-ready” becomes the next buzzword used to sell shallow checklists.

We should avoid that.

The best version of agent readiness is not hype.

It is not tricking AI systems.

It is not replacing human UX.

It is not publishing hundreds of pages for every possible query variation.

It is the disciplined work of making websites easier to understand, verify, and operate.

That work is boring in the best possible way.

It is labels.

It is headings.

It is clear content.

It is stable layouts.

It is accessible components.

It is explicit actions.

It is careful confirmation flows.

It is technical structure.

And that is exactly why developers should care.

The opportunity for developers

The developers who understand this shift early will have an advantage.

Not because they will chase every new AI feature.

But because they will build websites that are robust across interaction modes.

A good agent-ready website works for:

  • a human reading on mobile;
  • a keyboard user navigating forms;
  • a screen reader user exploring controls;
  • a crawler discovering content;
  • a search system retrieving information;
  • an AI assistant summarizing options;
  • a browser agent trying to complete a delegated task.

That is a powerful design constraint.

It brings together disciplines that are often treated separately:

  • SEO;
  • accessibility;
  • UX writing;
  • frontend architecture;
  • structured data;
  • performance;
  • content strategy;
  • AI product design.

Google I/O 2026 made this convergence much more visible.

The web is not becoming less important because of AI.

The web is becoming the environment where agents must prove they can act usefully, safely, and reliably.

That makes the quality of websites more important, not less.

Final thought

Google I/O 2026 made me think less about rankings and more about readiness.

Ranking is about being selected.

Citation is about being trusted.

Agent readiness is about being understood well enough to be used.

That is the missing layer.

The next web will not be won only by pages that look beautiful or rank well.

It will be won by pages that humans can trust, search systems can retrieve, and agents can operate without ambiguity.

For developers, that is both a challenge and an opportunity.

We do not only need better AI models.

We need better websites for AI to work with.

References

AI assistance disclosure

I used AI assistance to help organize research notes, refine the outline, and improve editorial clarity. The final angle, opinions, examples, and publishing decisions are mine.

Creating Custom AI Agents with Xuda for Your Applications

Dashboard overview

Introduction

Custom AI agents can enhance user experiences in applications by providing tailored interactions. Xuda simplifies the process of creating these agents, allowing developers to set specific instructions and tools without extensive coding knowledge.

Getting Started with Xuda

To begin, create an account on Xuda. Once logged in, you’ll be taken to the dashboard where you can start building your AI agent.

Dashboard overview

Creating a New Agent

  1. Navigate to the Agents Tab: On the left sidebar, click on the “Agents” tab. This will show you all existing agents and allow you to create a new one.

Agents tab

  1. Click on Create New Agent: In the Agents section, find the “Create New Agent” button. Click it to start setting up your custom agent.

Create new agent

  1. Fill in Agent Details: You will be prompted to enter a name and description for your agent. Choose a name that reflects its function, such as “SupportBot” or “SalesAssistant”.

Agent details form

  1. Select Agent Type: Choose the type of agent you want to create. Xuda offers several templates, such as customer support, sales, or general inquiry agents. Select the one that fits your needs best.

Select agent type

Setting Instructions

  1. Access the Instructions Panel: After creating your agent, navigate to the “Instructions” panel. This section allows you to define how your agent should respond to various queries.

Instructions panel

  1. Add Instructions: Click on “Add Instruction” to define specific behaviors. For example, if creating a support agent, add instructions like “Answer FAQs about shipping” or “Provide information on return policies”.

Add instruction

  1. Set Conditions: You can also set conditions for when certain instructions should be triggered. For example, if a user asks about order tracking, the agent can provide a specific response.

Set conditions

  1. Test Instructions: Use the testing feature to simulate interactions with your agent. This helps ensure that your instructions yield the desired responses.

Test instructions

Integrating Tools

  1. Navigate to the Tools Section: After setting up instructions, head to the “Tools” section to add functionality such as API calls or webhooks.

Tools section

  1. Choose Tools: Select from a variety of available tools that can enhance your agent’s capabilities. For instance, you can add a tool to fetch real-time data from an external API.

Choose tools

  1. Configure Tool Settings: After selecting a tool, configure its settings. Enter the required API endpoints and authentication details if necessary.

Configure tool settings

  1. Save Changes: Ensure all changes are saved. You can always revisit this section to update tools or settings as needed.

Save changes

Finalizing Your Agent

  1. Review Agent Summary: Before deploying your agent, review the summary to ensure all instructions and tools are set up as intended.

Agent summary

  1. Deploy Your Agent: When satisfied with your configurations, click the “Deploy” button. Your agent is now live and ready to interact with users.

Deploy agent

  1. Monitor Interactions: Use the analytics dashboard to monitor how users interact with your agent. This insight can help you refine its instructions and tools over time.

Analytics dashboard

Conclusion

Building custom AI agents with Xuda allows developers to integrate personalized interactions into their applications effortlessly. With a user-friendly interface and straightforward setup process, Xuda empowers you to create agents tailored to your specific needs. Start exploring today and see how AI can transform your application.

Building a Conversational Booking Agent for Vehicle Rentals: MCP Endpoints, Dialog Passports, and Alternative Search

Building a Conversational Booking Agent for Vehicle Rentals: MCP Endpoints, Dialog Passports, and Alternative Search

When we built WorCo — a CRM for vehicle rental businesses — the AI booking agent was supposed to be a side feature. It became the core of the product.

This is the technical breakdown of how our agent actually works: how we designed the MCP-compatible API layer, how we solved the “AI agents forget things mid-conversation” problem using Redis-backed dialog passports, and what we learned from letting an LLM call real booking endpoints.

The problem with messaging-first rental businesses

Small rental operators in Southeast Asia — motorcycles in Phuket, scooters in Bali, boats in Koh Samui — run their entire sales funnel through WhatsApp and Telegram. A customer messages, asks about availability, negotiates dates and price, and either books or ghosts.

For the operator, every conversation is manual. For the customer, it’s slow.

Our system connects directly to these messaging channels. The AI agent reads the incoming message, searches the fleet, calculates seasonal pricing, and creates a real booking record — without a human in the loop. When it works well, the booking appears in the operator’s Kanban board within a few seconds of the customer typing “I want to rent a motorcycle next week.”

Architecture: three distinct layers

Telegram / WhatsApp (inbound messages)
        │
        ▼
OpenAI Agents SDK (bot_image/openai_agents/)
  ├── Agent with @function_tool decorated tools
  ├── CRMClient — synchronous HTTP wrapper
  └── Redis-backed Dialog Passport
        │
        │  X-Bot-Token authenticated HTTP
        ▼
Django REST API (/api/mcp/ endpoints)
        │
        ├── Vehicle availability + conflict detection
        ├── Seasonal pricing calculation
        ├── Booking creation with idempotency
        └── Client CRM (auto-create + merge)

The key architectural decision: the AI layer (OpenAI Agents SDK) and the business logic layer (Django) are completely separate containers. The agent calls HTTP endpoints the same way any external system would. There’s no shared process, no direct ORM access from the agent side.

The MCP API layer

We chose not to run a formal MCP protocol server. Instead, we built REST endpoints that follow MCP’s tool-call semantics — each endpoint has a single clear purpose, takes structured input, and returns structured output. Any agent that can make HTTP calls can use them.

All endpoints live under /api/mcp/ and require an X-Bot-Token header. This token identifies the bot and its associated company — all queries are automatically scoped to that company’s data.

# modules/communications/views/mcp.py

def authenticate_bot(request) -> tuple[bool, Bot, str]:
    bot_token = request.headers.get('X-Bot-Token')
    if not bot_token:
        return False, None, "Missing X-Bot-Token header"

    try:
        bot = Bot.objects.get(token=bot_token, is_active=True)
        return True, bot, ""
    except Bot.DoesNotExist:
        return False, None, "Invalid or inactive bot token"

Every view starts with authenticate_bot(). The company context flows automatically from the bot record — the agent never explicitly passes a company ID.

The tools we expose

GET  /api/mcp/vehicles/search_available/   # fleet search with filters
GET  /api/mcp/vehicles/availability/        # check a specific vehicle
GET  /api/mcp/vehicles/pricing/             # pricing tiers for a vehicle
GET  /api/mcp/vehicles/{uuid}/bookings/     # existing reservations
POST /api/mcp/vehicles/rentals/             # create a booking
GET  /api/mcp/company_info/                 # company details, currency
GET  /api/mcp/offices/                      # office locations
GET  /api/mcp/client/info/                  # client lookup by Telegram ID
POST /api/mcp/client/update/                # update client profile
GET  /api/mcp/health/                       # liveness check

Vehicle search with tokenized matching

The search endpoint (/api/mcp/vehicles/search_available/) is the most-called tool in a typical booking conversation. We put significant effort into making it forgiving — customers don’t say “Honda PCX 150”, they say “small scooter” or “honda something automatic”.

The brand/model filter uses AND-over-tokens logic: we split the input into tokens by non-alphanumeric characters, then require each token to match across multiple fields.

# modules/communications/views/mcp.py

import re as _re
tokens: list[str] = []
for part in [brand or "", model or ""]:
    if part:
        for t in _re.split(r"[^w]+", part, flags=_re.IGNORECASE):
            t_norm = (t or "").strip().lower()
            if len(t_norm) >= 2:
                tokens.append(t_norm)

if tokens:
    for t in tokens:
        tok_filter = (
            Q(brand__id__icontains=t) |
            Q(brand__translations__name__icontains=t) |
            Q(model__slug__icontains=t) |
            Q(model__translations__name__icontains=t) |
            Q(custom_model_details__icontains=t) |
            Q(license_plate__icontains=t)
        )
        vehicles_qs = vehicles_qs.filter(tok_filter).distinct()

“BMW GS 1200” becomes tokens ["bmw", "gs", "1200"]. Each token is ANDed — a vehicle must match all of them — but each token searches across brand slug, translated brand name, model slug, translated model name, custom details, and license plate.

Availability filtering uses strict interval overlap: a vehicle is excluded if there’s any rental with status in ['pending', 'confirmed', 'active'] where rental.start_date < requested_end AND rental.end_date > requested_start.

conflicting = VehicleRental.objects.filter(
    vehicle__in=vehicles_qs,
    start_date__lt=end_dt,
    end_date__gt=start_dt,
    status__in=['pending', 'confirmed', 'active']
).values_list('vehicle__uuid', flat=True)

available = vehicles_qs.exclude(uuid__in=list(conflicting))

Alternative period search

Here’s a problem we didn’t anticipate: an AI agent that just says “sorry, not available” is useless. We built a three-strategy alternative search that the agent calls automatically when the requested period is blocked.

# bot_image/openai_agents/tools.py

def _find_alternative_periods(
    vehicle_uuid: str,
    vehicle_info: Dict[str, Any],
    start_date: date,
    end_date: date,
    booked_ranges: List[Tuple[date, date]],
    max_results: int = 3
) -> List[Dict[str, Any]]:
    """
    Strategy 1: Period BEFORE first conflict
      - Keep the same start_date, end before the conflict begins
    Strategy 2: Period AFTER last conflict
      - Start from conflict end, maintain same duration
    Strategy 3: Gaps BETWEEN multiple bookings
      - Find free windows between existing reservations
    """

The agent fetches existing bookings via /api/mcp/vehicles/{uuid}/bookings/, runs conflict detection locally, then presents alternatives with pre-calculated pricing. The customer sees something like: “June 10–17 is taken, but I can offer June 3–10 or June 20–27 at the same rate.”

We never move both boundaries simultaneously — the alternative must be anchored either to the requested start date or to the post-conflict date, not floating freely.

The dialog passport problem

Multi-turn booking conversations have a fundamental state problem. The AI agent is stateless by design — each message is processed independently. But a booking conversation spans multiple turns:

Turn 1: "I want a motorcycle June 10-17"
  → agent searches, finds Honda CB500F, quotes price

Turn 2: "Yes, the Honda. My name is Alex"
  → agent needs to remember: which vehicle? which dates?

Turn 3: "+66 812 345 678"
  → agent needs: vehicle, dates, client name to create booking

Without persistent state, the agent would need to re-call search endpoints on every turn, or rely on the LLM to extract context from conversation history — unreliable and expensive.

Our solution: a dialog passport stored in Redis, keyed by chat_id.

# bot_image/openai_agents/redis_store.py

def _passport_key(chat_id: str) -> str:
    return f"passport:{chat_id}"

def set_passport(chat_id: str, passport: Dict[str, Any], ttl_seconds: Optional[int] = None) -> bool:
    r = get_redis()
    key = _passport_key(chat_id)
    payload = json.dumps(passport, ensure_ascii=False)
    if ttl_seconds and ttl_seconds > 0:
        r.setex(key, ttl_seconds, payload)
    else:
        r.set(key, payload)
    return True

def get_passport(chat_id: str) -> Optional[Dict[str, Any]]:
    r = get_redis()
    data = r.get(_passport_key(chat_id))
    return json.loads(data) if data else None

The passport has two sections:

{
  "client": {
    "first_name": "Alex",
    "contacts": [
      {"type": "phone", "value": "+66812345678"},
      {"type": "telegram_id", "value": "123456789"}
    ]
  },
  "rental_context": {
    "vehicle_uuid": "abc-123-...",
    "start_date": "2026-06-10",
    "end_date": "2026-06-17",
    "total_price": 280.0
  }
}

The agent writes to the passport as it collects information. The create_vehicle_rental tool reads it when building the booking payload:

# bot_image/openai_agents/tools.py

def _collect_booking_context(conv_id, explicit_data):
    ctx_data = {**explicit_data}

    if conv_id:
        chat_id = _conv_id_to_chat_id(conv_id)
        passport = rs.get_passport(chat_id) or {}
        ctx_client = passport.get('client') or {}
        ctx_rental = passport.get('rental_context') or {}

        ctx_data['client'] = ctx_client
        ctx_data['rental'] = dict(ctx_rental)

    return ctx_data

The passport has a configurable TTL — typically a few hours. If the conversation goes cold, the next message from that customer starts fresh.

We also store secondary data in Redis under the same chat_id prefix:

  • search:{chat_id} — last search results (so the agent can reference “the second option” without re-querying)
  • last_uuid:{chat_id} — UUID of the vehicle currently in discussion
  • status:{chat_id} — conversation phase (searching / quoting / confirming / booked)
  • history:{chat_id} — trimmed message history (max 50 items, FIFO)

Booking creation with idempotency

The POST /api/mcp/vehicles/rentals/ endpoint creates bookings. The critical concern: an LLM might call this endpoint twice for the same booking — once from a retry, once from confused reasoning about whether the booking succeeded.

We handle this with an explicit idempotency_key:

# modules/communications/views/mcp.py

if idempotency_key:
    existing = VehicleRental.objects.filter(
        company=company,
        vehicle=vehicle,
        client__first_name=client_first_name,
        start_date=start_date,
        end_date=end_date,
        extra_data__idempotency_key=idempotency_key
    ).first()
    if existing:
        return JsonResponse({
            'rental_uuid': str(existing.uuid),
            'order_number': existing.order_number,
            'status': existing.status,
            'idempotent': True  # signals this was a duplicate call
        })

The idempotency_key is stored in extra_data (a JSONField on the rental model). The agent generates a key from the conversation context — typically f"{chat_id}:{vehicle_uuid}:{start_date}:{end_date}". If the booking already exists with that key, we return the existing record with idempotent: True so the agent knows it’s a repeat.

Conflict detection runs before creation:

conflicting_rentals = VehicleRental.objects.filter(
    vehicle=vehicle,
    start_date__lt=end_dt,
    end_date__gt=start_dt,
    status__in=['pending', 'confirmed', 'active']
)

if conflicting_rentals.exists():
    return JsonResponse({
        'error': 'Vehicle unavailable for requested dates',
        'conflicting_rentals': [
            {'start_date': r.start_date.isoformat(), 'end_date': r.end_date.isoformat(), 'status': r.status}
            for r in conflicting_rentals
        ]
    }, status=400)

The endpoint returns the conflicting rentals so the agent can suggest alternatives without an additional round-trip.

Client auto-create and merge

Customers messaging through Telegram don’t have a CRM record yet. The booking endpoint auto-creates clients and handles the merge problem when a placeholder client gets real contact details later.

The flow:

  1. First message arrives from Telegram user 123456789 — a placeholder client is created with their Telegram ID as the only contact
  2. Customer provides their phone number — the passport is updated
  3. On booking creation, we look up existing clients by phone, then by Telegram ID
  4. If we find a placeholder (auto-created, no name), we merge it with the incoming data
  5. If we find a real client, we link the booking to them and update any missing contacts

This means a customer who messaged three months ago and gave their phone number is automatically recognized when they message again.

The OpenAI Agents SDK side

The agent tools are defined using @function_tool from the OpenAI Agents SDK. Each tool maps one-to-one with an MCP endpoint:

# bot_image/openai_agents/tools.py

from agents import function_tool as _function_tool

@tool
def search_available_vehicles(
    start_date: str,
    end_date: str,
    brand: Optional[str] = None,
    model: Optional[str] = None,
    budget: Optional[float] = None,
    office_id: Optional[str] = None,
) -> str:
    """
    Search for available vehicles in the fleet for given dates.
    Returns vehicles with pricing. If requested dates are unavailable,
    also returns alternative available periods.
    """
    client = _get_crm_client()
    response = client.search_available_vehicles(
        start_date=start_date,
        end_date=end_date,
        brand=brand,
        model=model,
        budget=budget,
        office_id=office_id,
    )
    # ... format and return

The CRMClient is a plain requests-based synchronous HTTP client. It carries the X-Bot-Token header and optional Telegram context headers (X-User-Id, X-User-Username) that allow the Django side to log which Telegram user triggered each action.

Per-request client instances are injected via runtime_context — a module-level object that the agent handler sets at the start of each request. This avoids shared mutable state between concurrent conversations.

What we got wrong (and fixed)

Tool descriptions matter more than you think. Early versions of our search_available_vehicles tool had a vague description. The agent would call it with brand="motorcycle" (a vehicle type, not a brand) and get confused by empty results. Rewriting the description to explicitly distinguish vehicle type from brand — with examples — fixed this class of error without any code changes.

AI agents retry aggressively on ambiguity. When the availability check returned a 400 with conflict details, the agent sometimes called the endpoint again with slightly different dates, assuming the first call failed. Adding idempotent: True to successful duplicate calls and conflicting_rentals to conflict responses gave the agent enough signal to stop retrying.

State across turns requires explicit design. We initially relied on the LLM’s context window to remember vehicle UUIDs and dates. It worked 80% of the time. The passport system pushed this to near-100% by making state explicit and retrievable rather than implicit and reconstructed.

Pricing must never be client-side. Our pricing model has tiered day-range rates plus seasonal rules with year-boundary wraparound (a Nov–Mar high season rule is not a simple date range). Any client-side calculation will be wrong for edge cases. The get_pricing tool always calls the server and returns a single pre-calculated number.

What’s running in production

The full stack in Docker Compose:

  • Django 5 (backend + MCP endpoints)
  • OpenAI Agents SDK (bot container, one per multi-tenant deployment)
  • Redis (dialog passports, search cache, conversation history)
  • PostgreSQL 15 (all business data)
  • Telegram Bot API (inbound/outbound messages)

Orders created by the AI agent are tagged source='mcp' in the VehicleRental model — the same source-tagging pattern we use for admin-panel bookings, online widget bookings, and mobile app bookings. This makes it straightforward to track AI-attributed conversions in the operator’s analytics.

The Kanban board shows all orders in real-time regardless of source. When the agent creates a booking, it appears on the board immediately and triggers a staff notification via Telegram — same as a manually created order.

The broader pattern

The approach here — REST endpoints that follow MCP semantics, a Redis-backed dialog state store, and tool-decorated functions in the agent SDK — is not specific to vehicle rentals. Any CRM or booking system with:

  • Multi-turn conversational intake (name, contact, dates, preferences)
  • External AI agents that need to read and write business data
  • Real-time availability that changes between turns
  • Idempotency requirements on write operations

…will hit the same design problems. The passport pattern and the MCP-compatible endpoint structure are our solutions. They’re not the only solutions, but they’ve held up across thousands of real conversations.

If you’re building something similar or want to talk about AI agents in operational business systems, find us at worco.io or leave a comment.

WorCo is an AI-powered CRM for vehicle rental businesses. Built on Django 5, React 18, TypeScript, PostgreSQL 15, and the OpenAI Agents SDK.

I rebuilt 18 billion photos. Now I hunt threats.

Hi DEV community 👋

I’m Dennis Kim (Kim HoKwang). I’ve been building things on the internet for a long time, and I just realized most of that work has never had an English-language home. So here it is — a quick hello and what I plan to write about.

The short version of my path
I helped run one of the world’s first social networks.
Long before Facebook, there was Cyworld — a Korean SNS that defined an entire generation’s online life. I served as its CTO-side lead during a critical chapter, and one project still stands out as the hardest engineering problem I’ve owned:

Restoring 18 billion photos and 8 million videos from Cyworld’s archives.

If you’ve ever migrated a database and felt the pressure of “don’t lose a single row,” multiply that by people’s actual memories — first days of school, weddings, kids growing up. That job rewired how I think about data integrity, storage at scale, and the human weight behind the bytes.

Where I’ve spent my time since

Microsoft Azure MVP (2015–2023). Eight years in the MVP program, mostly around cloud architecture and helping developers ship on Azure.

Blockchain & Web3 since 2019. I build infrastructure and tooling in the Web3 space — the engineering is messy, fast-moving, and exactly the kind of problem I enjoy.

Independent cyber threat intelligence. This is where most of my writing energy goes now. I publish OSINT-based CTI reports on supply chain attacks, zero-days, AI/LLM security, and state-backed threat actors.

What I’ll write about here
I want DEV to be the place where I share the practical, developer-facing side of security:

Breakdowns of fresh vulnerabilities — what the attack chain actually is, and what you do Monday morning (patch, mitigate, hunt).
Notes from the AI/LLM security frontier, including how attackers are starting to use LLMs and “vibe coding” to build tooling at alarming speed.
The occasional war story from scaling systems and restoring data that people genuinely cared about.

No fear-mongering, no hype. Defense over noise.

Let’s connect
I keep an open, OSINT-based threat intelligence archive on GitHub — multilingual reports, free to read and reference:

GitHub logo

gameworkerkim
/
CYBER-THREAT-INTELLIGENCE-REPORT

This report analyzes the collapse of the cyber weapons supply chain and its impact on national security through the case of the Coruna iOS Exploit Kit. Cyber warfare has evolved into a decentralized and commercialized threat ecosystem

Cyber Threat Intelligence Report

독립 사이버 위협 인텔리전스 리포트 아카이브
Independent Cyber Threat Intelligence Archive · OSINT-based Defensive Research

TLP
License
Language
Updated

언어 (Language): 한국어 · English · 日本語 · 中文

본 저장소는 방어·연구·정책 수립 목적의 공개 사이버 위협 인텔리전스(Open CTI) 리포트를 수집·발행하는 독립 아카이브입니다. 모든 리포트는 OSINT 기반으로 작성되며, 특정 조직·기관·국가의 공식 입장을 대변하지 않습니다.

This repository is an independent archive of open-source cyber threat intelligence (CTI) reports, intended for defensive, research, and policy purposes. All reports are OSINT-based and do not represent the official position of any organization.

About the Analyst

이름 (Name) Dennis Kim (김호광 / HoKwang Kim)
역할 (Role) CEO, Betalabs Inc. · 前 Cyworld Z CEO · Independent Threat Intelligence Analyst · Microsoft Azure MVP
전문 분야 Web3·블록체인 보안, 공급망 공격, 제로데이 생태계, 북한·국가배후 위협, AI/LLM 보안, MCP 보안
Email [email protected]
GitHub @gameworkerkim

Latest Reports — Featured

2026-05-20 발행 — 단일 주간 4건 동시 경보

5월 셋째…

GitHub: github.com/gameworkerkim
LinkedIn: testcode

If you work in security, cloud, or Web3 — or you just like a good data-recovery story — say hi in the comments. I’d love to know what you’re building.
Thanks for reading, and glad to be here. 🙏

Most Student Founders Don’t Fail Because of Bad Ideas

They fail because they don’t know what to do next.

One video says:
“Build an MVP.”

Another says:
“Do marketing.”

Another says:
“Learn sales.”

But beginners are stuck asking:
“What should I actually focus on today?”

That’s the exact reason I started building Vaxyro.

Vaxyro is a platform designed for student and first-time founders that provides:

stage-based startup guidance
structured progress
daily actionable tasks
founder-focused direction

Instead of consuming random startup content for months, users get clarity on what matters at their current stage.

I’m currently building the platform publicly while learning:

Python
TypeScript
APIs
SEO
Product systems
Startup growth

One thing I’ve learned quickly:
Consistency beats perfection.

The internet rewards people who keep building.

So I decided to document everything publicly:

wins
failures
experiments
product updates
growth strategies

🌐 Website: vaxyro.tech

Would love feedback from founders, developers, and builders here.

What’s the hardest part about starting a startup for beginners?

startup #webdev #buildinpublic #saas

Google I/O 2026: La era de los agentes llegó para quedarse

Google I/O 2026 — La era de los agentes

Google I/O 2026 — La era de los agentes

Ayer arrancó el Google I/O 2026 en el Shoreline Amphitheatre de Mountain View, California, y Sundar Pichai no se guardó nada. Si 2025 fue el año de los modelos de lenguaje, 2026 es —en sus propias palabras— el año en que la IA pasa de responder preguntas a ejecutar tareas por ti. Agentes, agentes y más agentes.

Esto es lo que importa si eres developer, founder o estás montando producto con IA.

1. Gemini 3.5 Flash: el nuevo motor por defecto

El anuncio estrella. Gemini 3.5 Flash es el nuevo modelo flagship de Google y a partir de ayer es el default en la app de Gemini, AI Mode en Search, Antigravity 2.0 y la Gemini API.

Por qué importa:

  • Supera a Gemini 3.1 Pro en todos los benchmarks: coding, tareas agénticas y multimodalidad.
  • Es 4x más rápido que otros modelos frontier en tokens por segundo — y cuesta la mitad o hasta un tercio que modelos comparables.
  • Mejores guardrails: menos falsos rechazos en queries seguras, menos generación de contenido dañino.
  • Gemini 3.5 Pro viene en junio (ya en pruebas internas).

Traducción: ya no tienes que elegir entre calidad y velocidad. Eso cambia el cálculo para apps en producción.

2. Antigravity 2.0: de IDE con AI a plataforma de agentes

Esto es probablemente lo más relevante para developers. El año pasado Google lanzó Antigravity como respuesta a Cursor y Copilot. Este año lo convirtieron en otra cosa.

Antigravity 2.0 es ahora una aplicación de escritorio independiente, separada del IDE, diseñada 100% alrededor de orquestación de agentes:

  • Múltiples agentes en paralelo: orquestas varios agentes ejecutando tareas simultáneamente.
  • Subagentes dinámicos: workflows paralelizados donde un agente despacha a otros.
  • Tareas programadas: los agentes corren en background automáticamente sin que los invoques manualmente. Pipeline de automatización persistente.
  • Comandos por voz: sí, puedes hablarle a Antigravity como a Gmail o Docs.
  • Integraciones nativas: AI Studio, Android, Firebase y Google Cloud.

Antigravity CLI: para los que viven en la terminal. Mismo agent harness que la versión desktop, sin GUI. Reemplaza al difunto Gemini CLI (Google pide migrar). Mantiene Skills, Hooks, Subagents y Extensions (ahora “plugins”).

Antigravity SDK: acceso programático al mismo harness que usa Google internamente. Optimizado para Gemini. Puedes definir agentes custom y hostearlos en tu propia infraestructura.

Managed Agents (Gemini API): con una sola API call levantas un agente en un entorno Linux aislado, con estado persistente entre sesiones. Corre código, usa tools, razona. Disponible vía Interactions API y AI Studio.

Dato brutal: Google afirma que Antigravity 2.0 construyó un sistema operativo funcional en 12 horas.

3. AI Studio: del prompt al Play Store sin escalas

Google AI Studio también recibió upgrades pesados:

  • App móvil: pre-registro abierto. Capturas una idea desde el celular y cuando llegas al escritorio tienes un prototipo andando.
  • Vibe coding para Android nativo: creas apps Android completas con un prompt. Incluye emulador embebido para previsualizar y editar. Conectas tu teléfono por USB y pruebas directo.
  • Export a Antigravity: un clic para llevar proyectos enteros de AI Studio a Antigravity local, con todo el contexto.
  • Publicación directa al Play Store: desde AI Studio al test track de Google Play Console. Próximamente, publicación solo para amigos y familia.
  • Integración con Firebase: en camino.
  • Workspace APIs: los agentes pueden llamar nativamente Google Docs, Sheets, Calendar y demás.

4. Gemini Spark: tu agente personal 24/7

Lo más ambicioso en agentes de consumo. Gemini Spark es un agente siempre activo que corre en VMs de Google Cloud 24/7 y ejecuta tareas por ti:

  • Lee y escribe en Gmail, Docs, Sheets, Slides.
  • Se conecta con apps de terceros (Canva, Instacart) — y este verano se expande vía MCP (Model Context Protocol).
  • Acceso a archivos locales desde la app Gemini en macOS próximamente.
  • Disponible primero para suscriptores AI Ultra en USA.

Además: Daily Brief — un digest matutino que cruza Gmail, Calendar y Tasks, prioriza tu día y sugiere próximos pasos. Para AI Plus, Pro y Ultra.

Android Halo: una barra sutil en el tope de la pantalla del teléfono que te muestra qué está haciendo tu agente en ese momento, sin interrumpir lo que estés haciendo.

5. Búsqueda y Workspace: IA por todos lados

Search:

  • Nueva caja de búsqueda inteligente que se expande, con sugerencias generadas por IA que anticipan tu intención.
  • Input multimodal: texto, imágenes, archivos, video, ¡y pestañas de Chrome!
  • Information Agents: agentes que monitorean temas 24/7 (blogs, noticias, redes sociales, datos financieros) y te avisan cuando hay cambios relevantes. Para Pro y Ultra este verano.
  • Mini apps en Search: dashboards y trackers generados para tareas recurrentes.
  • Generative UI: visuales, simulaciones, tablas y gráficos interactivos generados al vuelo.

Workspace:

  • Gmail Live: búsqueda conversacional por voz en tu inbox.
  • Docs Live + Keep Live: crear y editar docs por voz, organizar notas dictadas.
  • Google Pics: nueva app de diseño y generación de imágenes con edición iterativa (comentas sobre partes de la imagen, no necesitas reescribir todo el prompt). Corre sobre Nano Banana 2 y Gemini.

YouTube:

  • Ask YouTube: búsquedas complejas con follow-ups. Respuestas estructuradas con los videos más relevantes.
  • Gemini Omni integrado en YouTube Shorts Remix.

6. Gemini Omni: el modelo que entiende el mundo físico

Nueva familia de modelos. Omni Flash acepta texto, imágenes, audio y video como input — y genera video como output.

  • Edición de video por lenguaje natural: “toma este video y cambia lo que está pasando, añade un personaje”.
  • Corre en la app de Gemini, Google Flow y YouTube Shorts.
  • A diferencia de Veo (solo texto→video), Omni es multimodal→video.
  • Google dice que eventualmente podrá “crear cualquier cosa desde cualquier input”.

7. Precios: la guerra de los $100/mes

Google reestructuró AI Ultra:

  • $100/mes: 5x más límites que Pro en Gemini app y Antigravity.
  • $200/mes: 20x más límites + acceso a Project Genie.
  • El plan viejo de $250 baja a $200.

El modelo de límites cambia: adiós a los “prompts por día”, ahora es cómputo utilizado — factoring de complejidad del prompt, features usadas y longitud del chat.

Para developers: nuevos suscriptores Ultra reciben $100 en créditos bonus para Antigravity (reclamar antes del 25 de mayo).

8. Android XR y hardware

  • Project Aura: nueva versión de los smart glasses con compute puck rediseñado, sensor de huella.
  • Android XR glasses: dos modelos este otoño — uno diseñado por Warby Parker, otro por Gentle Monster. Audio-only (sin display), con traducción en vivo, navegación Gemini y resúmenes de notificaciones. Se emparejan con Android y iPhone.
  • Google Beam + Sophie: agente de video con presencia humana, capaz de leer documentos que le muestras a la cámara, buscar recomendaciones y mantener conversación natural.

9. Lo que importa para desarrolladores (TL;DR)

Área Novedad Disponibilidad
Modelo Gemini 3.5 Flash (4x más rápido, supera 3.1 Pro) Ya
IDE/Agentes Antigravity 2.0 desktop + CLI + SDK Ya
API Managed Agents (1 API call = agente en Linux aislado) Ya
Mobile dev Vibe coding Android nativo → Play Store Ya (pre-registro)
Agentes Gemini Spark (agente 24/7 con Workspace + MCP) Beta próxima semana (USA)
Búsqueda Information Agents monitoreo 24/7 Verano (Pro/Ultra)
Video Gemini Omni Flash (multimodal → video) Ya (Plus/Pro/Ultra)
Precio AI Ultra desde $100/mes Ya

¿Qué significa esto para tu empresa?

Google está apostando a tres jugadas simultáneas:

  1. Commoditizar el desarrollo: cualquiera puede “vibe-codear” una app Android y publicarla. La barrera de entrada al software se desploma. Lo que valía saber hacer ayer, hoy lo hace un agente.

  2. El agente como producto: Gemini Spark no es un chatbot — es un empleado digital 24/7 que lee tu correo, escribe docs, agenda cosas. La interfaz de usuario del futuro no es una app, es un agente que entiende contexto.

  3. Infraestructura para builders: Antigravity 2.0 + Managed Agents es la respuesta de Google a “cómo construimos software cuando el código lo escriben agentes”. No es un autocompletado fancy — es orquestación de múltiples agentes con estado persistente.

El mensaje es claro: el que no esté construyendo con agentes en 2026, va a estar compitiendo contra ellos en 2027.

Cómo tu empresa puede subirse a esta ola (antes que tu competencia)

Todo esto suena increíble en un keynote. Pero cuando eres CTO o CEO, la pregunta real es: ¿cómo demonios implemento esto en mi negocio sin descarrilar lo que ya funciona?

Aquí van tres aterrizajes concretos de lo anunciado en este I/O:

1. Agentes internos sobre tus propios datos

Managed Agents en la Gemini API + Gemini Spark significan que ya no necesitas un equipo de ML para tener un agente que trabaje sobre tus documentos, tu base de conocimiento o tus procesos internos. Con una API call levantas un entorno aislado que razona, ejecuta código y mantiene estado. Imagina un agente que procesa tus órdenes de compra, audita tus facturas o responde preguntas de onboarding sin que RRHH mueva un dedo.

2. Automatización de flujos de negocio con MCP

El Model Context Protocol que Google está adoptando para Gemini Spark es el mismo estándar que Anthropic impulsó — y que permite conectar agentes a tus herramientas existentes: CRM, ERP, base de datos, lo que sea. Un agente que monitorea tu pipeline de ventas, detecta leads fríos y dispara secuencias de follow-up automáticas. Sin integraciones custom de 6 meses.

3. Desarrollo acelerado con Antigravity 2.0

Si estás compitiendo en tech, tu velocidad de ejecución es tu ventaja competitiva. Antigravity 2.0 te permite prototipar en AI Studio, iterar con agentes en paralelo y publicar al Play Store — todo desde la misma plataforma. El ciclo “idea → MVP → producción” se comprime de meses a días.

El elefante en la habitación

Nada de esto funciona out-of-the-box para una empresa real. Conectar agentes a tus sistemas legacy, diseñar los prompts correctos, definir los guardrails de seguridad, asegurar que el output sea confiable y no alucine sobre tus datos financieros — eso requiere expertise real en integraciones enterprise y arquitectura de agentes.

No es magia. Es ingeniería.

¿Quieres que tu empresa opere con agentes antes de que tu competencia sepa qué es un MCP?

En Guayoyo diseñamos e implementamos automatizaciones con IA agéntica para empresas que necesitan resultados, no demos bonitos. Desde agentes que procesan documentos y disparan workflows hasta pipelines de ventas automatizados con inteligencia contextual.

Agenda una llamada de descubrimiento gratuita de 15 minutos →

Hablamos de tu caso específico, sin compromiso, sin humo.

LeNet-5: A Visual Guide

An interactive guide to the neural network that learned to read handwritten digits.

Draw a digit and watch how it moves through each layer of LeNet-5 in real time.

What’s covered

  • Convolution and pooling layers
  • Feature maps and filters
  • RBF output layer
  • SDNN sequence recognition

Includes interactive visualizations for every layer.

https://sbondaryev.dev/articles/lenet

I built a Vue-to-React migration tool that writes native React code for you

VuReact walkthrough

I’d like to share my open-source project VuReact — a compiler toolchain for migrating from Vue to React, while also enabling a “write React with Vue syntax” workflow.

🤔 Why I Built It

I love Vue’s <script setup>, Composition API, and its intuitive mental model.

But many projects still require React.

Until now, the options were usually:

  • Rewrite everything manually
  • Rely on unreliable syntax converters or AI rewrites
  • Run Vue and React side-by-side at runtime and deal with the resulting complexity

So I built VuReact to explore a cleaner and more maintainable migration approach.

✨ Key Features

  • ✅ Pure compile-time output
    Analyzes Vue source code and generates statically optimized, standard React code — no runtime wrapper or compatibility layer required.

  • ✅ Semantic-level transformation
    Deeply understands Vue semantics and supports <script setup>, components, slots, reactivity (ref, reactive, computed, etc.), event emitting, and more.
    The generated React code remains readable and maintainable.

  • ✅ Progressive migration
    Convert files or modules incrementally instead of rewriting everything at once.

  • ✅ Native-like developer experience
    Includes both build and watch modes, with a workflow similar to Vite.

👍 Use Cases

  • Teams migrating from Vue 3 to React incrementally without starting from scratch
  • Developers who prefer Vue’s mental model but need to work in React ecosystems
  • Backend developers who find Vue easier and more intuitive, and don’t want to learn two frontend frameworks
  • Projects that need fully native React output without carrying both Vue and React runtimes

Showcase (Vue project on left → generated React app on right):
VuReact walkthrough

Repo: https://github.com/vureact-js/core

Docs: https://vureact.top/en

Playground: https://codesandbox.io/p/github/vureact-js/example-customer-support-hub/master?import=true