<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: SAMEER SRIVASTAV</title>
    <description>The latest articles on DEV Community by SAMEER SRIVASTAV (@sameer_srivastav_1d22aed3).</description>
    <link>https://dev.to/sameer_srivastav_1d22aed3</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3983001%2F6c3a49de-be26-42aa-a0e5-437ecc1fe3bc.png</url>
      <title>DEV Community: SAMEER SRIVASTAV</title>
      <link>https://dev.to/sameer_srivastav_1d22aed3</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sameer_srivastav_1d22aed3"/>
    <language>en</language>
    <item>
      <title>[Boost]</title>
      <dc:creator>SAMEER SRIVASTAV</dc:creator>
      <pubDate>Tue, 18 Aug 2026 18:18:54 +0000</pubDate>
      <link>https://dev.to/sameer_srivastav_1d22aed3/-3bh7</link>
      <guid>https://dev.to/sameer_srivastav_1d22aed3/-3bh7</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/sameer_srivastav_1d22aed3/we-killed-the-900ms-silence-timer-and-made-the-phone-stack-agent-first-2pe1" class="crayons-story__hidden-navigation-link"&gt;We killed the 900ms silence timer and made the phone stack agent-first&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/sameer_srivastav_1d22aed3" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3983001%2F6c3a49de-be26-42aa-a0e5-437ecc1fe3bc.png" alt="sameer_srivastav_1d22aed3 profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/sameer_srivastav_1d22aed3" class="crayons-story__secondary fw-medium m:hidden"&gt;
              SAMEER SRIVASTAV
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                SAMEER SRIVASTAV
                
                
              
              &lt;div id="story-author-preview-content-4428386" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/sameer_srivastav_1d22aed3" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3983001%2F6c3a49de-be26-42aa-a0e5-437ecc1fe3bc.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;SAMEER SRIVASTAV&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/sameer_srivastav_1d22aed3/we-killed-the-900ms-silence-timer-and-made-the-phone-stack-agent-first-2pe1" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Aug 18&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/sameer_srivastav_1d22aed3/we-killed-the-900ms-silence-timer-and-made-the-phone-stack-agent-first-2pe1" id="article-link-4428386"&gt;
          We killed the 900ms silence timer and made the phone stack agent-first
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/programming"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;programming&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/python"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;python&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/opensource"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;opensource&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/sameer_srivastav_1d22aed3/we-killed-the-900ms-silence-timer-and-made-the-phone-stack-agent-first-2pe1#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              1&lt;span class="hidden s:inline"&gt;&amp;nbsp;comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            6 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>We killed the 900ms silence timer and made the phone stack agent-first</title>
      <dc:creator>SAMEER SRIVASTAV</dc:creator>
      <pubDate>Tue, 18 Aug 2026 18:16:51 +0000</pubDate>
      <link>https://dev.to/sameer_srivastav_1d22aed3/we-killed-the-900ms-silence-timer-and-made-the-phone-stack-agent-first-2pe1</link>
      <guid>https://dev.to/sameer_srivastav_1d22aed3/we-killed-the-900ms-silence-timer-and-made-the-phone-stack-agent-first-2pe1</guid>
      <description>&lt;p&gt;Human conversation does not wait 900ms after every pause.&lt;/p&gt;

&lt;p&gt;Stivers et al. (PNAS, 2009) measured turn transitions across ten languages. The mode is 0–200ms. Levinson later pointed out the awkward implication: language production takes ~600ms to plan a word, so people are already encoding the reply while the other person is still talking. A voice agent that waits a fixed 0.9s after Deepgram says &lt;code&gt;speech_final&lt;/code&gt; is not being careful. It is being obviously not-human.&lt;/p&gt;

&lt;p&gt;That was us, six weeks ago. Fixed debounce after every pause. It felt polite in the lab and dead on a real phone. "What's your name?" sat in silence. "My number is…" got cut off. Same timer, opposite failure modes. Silence timers cannot tell "finished" from "thinking." LiveKit's open eot-bench puts numbers on this: a VAD threshold sits around ~1600ms of dead air to match the interruption rate a semantic detector hits at ~543ms.&lt;/p&gt;

&lt;p&gt;We threw the timer out.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The new loop is one decision: did they hand the floor over?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pipeline is still the boring one everyone has:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PSTN → SignalWire Stream → Deepgram (mulaw) → LLM → Cartesia → PSTN
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The interesting part is what happens at the pause.&lt;/p&gt;

&lt;p&gt;Deepgram &lt;code&gt;speech_final&lt;/code&gt; is only a &lt;em&gt;candidate&lt;/em&gt; end of turn. A cheap classifier then estimates P(caller finished), from the utterance plus the last few dialogue turns. Extra wait is a decreasing function of that probability:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;P ≥ 0.75 → commit now (crisp question / complete request)&lt;/li&gt;
&lt;li&gt;P ≤ 0.25 → wait up to 1.1s (trailing "and the…", "my number is")&lt;/li&gt;
&lt;li&gt;in between → linear ramp 1.1s → 0s&lt;/li&gt;
&lt;li&gt;classifier late or missing → 0.55s fallback&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Obvious cases never hit the model. A trailing conjunction (&lt;code&gt;and&lt;/code&gt;, &lt;code&gt;but&lt;/code&gt;, &lt;code&gt;because&lt;/code&gt;, &lt;code&gt;the&lt;/code&gt;, &lt;code&gt;to&lt;/code&gt;…) returns P=0.05 in a few microseconds. A question mark returns 0.95. One- or two-word acknowledgements ("okay", "yeah") lean incomplete, because on a phone they usually mean more is coming. Ambiguous text goes to a 4-token &lt;code&gt;gpt-4o-mini&lt;/code&gt; call that is only allowed to emit a float.&lt;/p&gt;

&lt;p&gt;The classifier runs in the background on every finalized STT segment, not at the endpoint. By the time Deepgram fires &lt;code&gt;speech_final&lt;/code&gt;, a fresh P is usually already cached. Decision budget is 45ms of waiting for an in-flight score; if it misses, the HTTP call is &lt;em&gt;shielded&lt;/em&gt; so the result warms the next pause instead of being thrown away. That is the difference between "classifier on the hot path" and "classifier adjacent to the hot path."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Speculative generation hides the remaining wait&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;While we decide, we already started LLM → streaming TTS into an asyncio queue. Committing a complete turn means flushing audio that already exists. The caller hears the first Cartesia chunk almost as they finish. If they resume mid-window we cancel the task, drop the queue, and &lt;em&gt;reseed&lt;/em&gt; the turn detector with the earlier fragment so the next endpoint concatenates old + new words. The LLM never sees a half-thought as a finished turn.&lt;/p&gt;

&lt;p&gt;That join matters more than it sounds. Without it you get:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Human: "My account number is"&lt;br&gt;
(pause, we almost answer)&lt;br&gt;
Human: "44821"&lt;br&gt;
LLM hears only "44821"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;With reseed it hears "My account number is 44821". Same audio. Different product.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Barge-in is a VAD event, not a transcript event&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The playback loop used to notice interruptions when it got around to checking a flag. If TTS was starved, &lt;code&gt;await audio_queue.get()&lt;/code&gt; parked and the agent talked over the human for another 200–400ms. That is the failure people describe as "it won't shut up."&lt;/p&gt;

&lt;p&gt;&lt;code&gt;SpeechStarted&lt;/code&gt; from Deepgram fires on voice energy, before any words. We now:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;set the barge-in flag immediately&lt;/li&gt;
&lt;li&gt;flush the provider audio buffer &lt;em&gt;in the VAD handler&lt;/em&gt;, not in the playback loop (~50ms)&lt;/li&gt;
&lt;li&gt;poll the flag at least every 50ms even when the TTS queue is empty&lt;/li&gt;
&lt;li&gt;ignore barge-in for the first 250ms / 3 chunks of playback, because analogue line echo of the agent's own first syllable looks exactly like the caller starting to speak&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Only words actually heard get committed. Partial agent replies are stored with &lt;code&gt;[interrupted]&lt;/code&gt; so the next LLM turn knows what the human already heard. Context matching reality is a latency feature. A model that thinks it finished a sentence the caller never heard will double-speak.&lt;/p&gt;

&lt;p&gt;Transcript writes, voice persistence, webhook fan-out for non-live events — all &lt;code&gt;asyncio.create_task&lt;/code&gt;. The hot path is: receive mulaw, maybe cancel, maybe flush, maybe start generation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Agent-first" is not a landing-page adjective&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The latency work is useless if the thing on the other end of the call is a dashboard a human has to click. The customer for AgentLine is an agent runtime — Hermes, OpenClaw, Claude Code, Codex, Claude.ai via MCP — that needs a real PSTN number.&lt;/p&gt;

&lt;p&gt;That forced a different product surface.&lt;/p&gt;

&lt;p&gt;Signup is email OTP over plain REST. MCP itself requires a Bearer key to connect, so you cannot put signup behind MCP. &lt;code&gt;POST /v1/auth/otp&lt;/code&gt; then &lt;code&gt;POST /v1/auth/verify&lt;/code&gt; creates the account and returns a key. Same email always maps to the same account, so the agent that signed up and the human who later logs in with that inbox are not two users. There is no "create account" form an agent can get stuck on.&lt;/p&gt;

&lt;p&gt;Keys start with &lt;code&gt;al_live_&lt;/code&gt;, not &lt;code&gt;sk_live_&lt;/code&gt;. That is not branding. Stripe's secret-key pattern is in every agent runtime's redaction list. We shipped &lt;code&gt;sk_live_&lt;/code&gt; first. Hermes/OpenClaw/Warp ate the key and the agent only ever saw &lt;code&gt;&amp;lt;REDACTED:STRIPE_SECRET&amp;gt;&lt;/code&gt;. The account existed. The tool output was empty. We renamed the prefix.&lt;/p&gt;

&lt;p&gt;Live turns do not go through a human inbox. A one-file relay (&lt;code&gt;agentline_relay.py install --agent-id agt_xxx&lt;/code&gt;) detects the local runtime, installs a user service (systemd / launchd / Task Scheduler), and holds a WebSocket. Each phone call maps to one persistent runtime session — Claude &lt;code&gt;--resume&lt;/code&gt;, Codex thread id, Hermes &lt;code&gt;X-Hermes-Session-Key&lt;/code&gt;, OpenClaw &lt;code&gt;--session-key&lt;/code&gt;. Untrusted SMS and lifecycle events land in a local inbox the agent consumes later. Live utterances invoke the runtime now.&lt;/p&gt;

&lt;p&gt;The webhook/WS payload carries a &lt;code&gt;push_token&lt;/code&gt;. The agent POSTs the spoken answer back with &lt;code&gt;X-Push-Token&lt;/code&gt;. No API key on the hot path, because the most common 401 we saw was "runtime has the key in env but the model refused to put it in the header." The text it pushes is spoken &lt;em&gt;verbatim&lt;/em&gt;. If it writes a Slack message instead, the caller hears "let me check…" until the turn expires. That is why the event is loud about &lt;code&gt;ACTION_REQUIRED: LIVE CALLER WAITING&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Hosted voice LLM handles social turns locally ("hey, how are you"). Factual / tool turns emit &lt;code&gt;[CHECKING]&lt;/code&gt;, play a stall phrase, and wait for the agent's push. If the webhook is known-dead we stop emitting &lt;code&gt;call.utterance&lt;/code&gt; for the rest of the call and answer hosted. A dead agent must not hold the PSTN stream.&lt;/p&gt;

&lt;p&gt;Inbound answer XML is the other sacred path. &lt;code&gt;publish_event()&lt;/code&gt; inserts the mailbox row and schedules webhook delivery as a background task. We used to await the webhook before returning LaML. Slow or missing endpoints meant Stream never started, duration=0, &lt;code&gt;failed&lt;/code&gt; / &lt;code&gt;no-answer&lt;/code&gt;. A webhook that cannot delay the phone from ringing is an agent-first constraint, not a reliability nice-to-have.&lt;/p&gt;

&lt;p&gt;Claude.ai talks to us over MCP + OAuth 2.1 (PKCE, dynamic client registration). Desktop uses &lt;code&gt;mcp-remote&lt;/code&gt; + the Bearer key. Same tools either way: provision a number, start a call, push context, hang up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What this actually sounds like&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Caller: "Can you check if John emailed me back?"&lt;br&gt;
Agent (hosted, 0 extra wait — it's a complete question): "Hmm, let me check that for you…"&lt;br&gt;
&lt;code&gt;[CHECKING]&lt;/code&gt;&lt;br&gt;
Relay hits the local runtime, runtime reads mail, POSTs:&lt;br&gt;
&lt;code&gt;"Yeah — John replied twenty minutes ago, he can do Thursday at 2."&lt;/code&gt;&lt;br&gt;
Cartesia speaks that sentence. Caller never sees a dashboard.&lt;/p&gt;

&lt;p&gt;Caller: "My order number is…"&lt;br&gt;
Classifier: P≈0.05, we wait. They continue "…44821."&lt;br&gt;
Joined turn goes to the LLM once.&lt;/p&gt;

&lt;p&gt;Caller talks over the agent two words in. Provider buffer clears on &lt;code&gt;SpeechStarted&lt;/code&gt;. Transcript stores what was actually heard. Next turn does not repeat it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Honest limits&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The classifier is still a tiny chat completion, not a local audio turn-detector. We left the same &lt;code&gt;decide_wait&lt;/code&gt; interface so we can swap in LiveKit's ONNX turn-detector (~50ms CPU), Pipecat SmartTurn, or a VAP model (Ekstedt &amp;amp; Skantze / MaAI) without touching the pipeline. Text-only P(finished) cannot hear a drawn-out "soooo…" that means "still thinking." Acoustic fusion is the next obvious cut.&lt;/p&gt;

&lt;p&gt;We also do not claim sub-200ms end-to-end on PSTN. Carrier jitter, Deepgram endpointing (~300ms), Cartesia TTFA, and the PSTN itself are a floor. What we removed is the &lt;em&gt;self-inflicted&lt;/em&gt; 900ms, the barge-in that waited on a playback loop, and the product shape that assumed a human would operate the phone.&lt;/p&gt;

&lt;p&gt;If you have an agent that already does work, it can have a phone number. If you have been fighting a silence timer, steal the probability-to-wait function — it is forty lines and it is the whole trick.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentline.cloud" rel="noopener noreferrer"&gt;https://agentline.cloud&lt;/a&gt;&lt;br&gt;
&lt;a href="https://api.agentline.cloud/mcp" rel="noopener noreferrer"&gt;https://api.agentline.cloud/mcp&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>python</category>
      <category>opensource</category>
    </item>
    <item>
      <title>The internet has a new power user. It's not human.</title>
      <dc:creator>SAMEER SRIVASTAV</dc:creator>
      <pubDate>Sun, 05 Jul 2026 07:15:13 +0000</pubDate>
      <link>https://dev.to/sameer_srivastav_1d22aed3/the-internet-has-a-new-power-user-its-not-human-282l</link>
      <guid>https://dev.to/sameer_srivastav_1d22aed3/the-internet-has-a-new-power-user-its-not-human-282l</guid>
      <description>&lt;p&gt;Agents with access to a SKILL.md file for a service are 4-5x more likely to successfully integrate it on the first try vs. reading raw API docs. They make fewer mistakes, waste fewer tokens, and produce better results.&lt;br&gt;
Your API docs were written for humans. Your SKILL.md is written for agents. You need both. So what makes a software agent ready.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Agent-Native Payments&lt;/strong&gt;&lt;br&gt;
Agents don't have wallets. They don't have credit cards. They can't fill out billing forms.&lt;br&gt;
But they CAN:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pay per call via MCP Payment protocol&lt;/li&gt;
&lt;li&gt;Handle HTTP 402 Payment Required responses&lt;/li&gt;
&lt;li&gt;Use prepaid API credits deducted automatically
The x402 standard is especially elegant, when an agent hits a paywalled endpoint, it receives an HTTP 402 with payment details, pays programmatically, and retries. All in milliseconds. No human involved.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Imagine an agent that needs to verify a phone number.&lt;/strong&gt;&lt;br&gt;
It discovers AgentLine → reads our SKILL.md → hits the number provisioning endpoint → receives an HTTP 402 → pays from its MCP wallet → gets the number → sends a verification call.&lt;br&gt;
That entire flow took 3 seconds and 0 humans. That's the future.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. llms.txt — Your Service's Front Door&lt;/strong&gt;&lt;br&gt;
Robots.txt told crawlers what to index. llms.txt tells AI agents what your service IS. An example looks like-&lt;/p&gt;

&lt;h1&gt;
  
  
  agentline.cloud/llms.txt
&lt;/h1&gt;

&lt;p&gt;AgentLine provides phone numbers for AI agents.&lt;br&gt;
API base: &lt;a href="https://api.agentline.cloud/v1" rel="noopener noreferrer"&gt;https://api.agentline.cloud/v1&lt;/a&gt;&lt;br&gt;
Auth: Bearer token in header&lt;br&gt;
SKILL.md: &lt;a href="https://agentline.cloud/skill.md" rel="noopener noreferrer"&gt;https://agentline.cloud/skill.md&lt;/a&gt;&lt;br&gt;
One file at your root domain. Every AI that crawls the web sees it. Don't leave this blank it's your first impression to the agent economy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Design APIs for Machine Consumers First&lt;/strong&gt;&lt;br&gt;
This one is controversial but hear me out.&lt;br&gt;
When you design an endpoint, ask: "Could an agent call this without reading a tutorial?" If the answer is no, simplify it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Consistent JSON responses (not HTML wrapped in JSON)&lt;/li&gt;
&lt;li&gt;Clear error messages with actionable codes&lt;/li&gt;
&lt;li&gt;Idempotency keys for safe retries&lt;/li&gt;
&lt;li&gt;Pagination that works without guessing&lt;/li&gt;
&lt;li&gt;Rate limit headers that agents can read and respect
Humans can deal with quirky APIs. Agents can't. Clean design compounds.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;5. Let me give you a concrete example of what NOT to do:&lt;/strong&gt;&lt;br&gt;
I tried integrating a popular CRM's API for my agent. The docs were 200 pages. Authentication required registering an app in their developer portal (which took 2 days to approve). The webhook system required me to host a server.&lt;br&gt;
My agent couldn't use it. I switched to a competitor that had API keys, a SKILL.md, and webhook URLs I could configure in one POST request. Done in 10 minutes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. The companies that win the agent era won't have the best UI.&lt;/strong&gt;&lt;br&gt;
They'll have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The clearest SKILL.md&lt;/li&gt;
&lt;li&gt;The most programmatic auth&lt;/li&gt;
&lt;li&gt;The simplest agent payment flow&lt;/li&gt;
&lt;li&gt;The most discoverable llms.txt
These are moats that compound. Every agent that successfully integrates your API becomes a distribution channel. Every SKILL.md shared in an agent community is free marketing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;7. We're already seeing this play out.&lt;/strong&gt;&lt;br&gt;
The tools agents recommend to each other aren't the ones with the best landing pages or the biggest ad budgets. They're the ones that work reliably when an agent calls them at 3 AM with zero human supervision.&lt;br&gt;
AgentLine is also trying its best to Be that tool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8. If you're building something right now, here's your checklist:&lt;/strong&gt;&lt;br&gt;
→ llms.txt at your root domain&lt;br&gt;
→ SKILL.md for every API surface&lt;br&gt;
→ Programmatic auth (API keys + machine-to-machine OAuth)&lt;br&gt;
→ Agent payment support (MCP Payment / x402)&lt;br&gt;
→ Clean, consistent, well-documented endpoints&lt;br&gt;
Do these 5 things and you're ahead of most of the services on the internet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;9. AgentLine is our bet on this future.&lt;/strong&gt;&lt;br&gt;
Phone numbers for agents. No dashboards. No forms. No humans required. Because "&lt;em&gt;The most important user of the next decade won't have thumbs.&lt;/em&gt;"&lt;br&gt;
agentline.cloud&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>automation</category>
      <category>api</category>
    </item>
    <item>
      <title>How AgentLine solves calling for Agents.</title>
      <dc:creator>SAMEER SRIVASTAV</dc:creator>
      <pubDate>Fri, 26 Jun 2026 11:32:43 +0000</pubDate>
      <link>https://dev.to/sameer_srivastav_1d22aed3/how-agentline-solves-calling-for-agents-gok</link>
      <guid>https://dev.to/sameer_srivastav_1d22aed3/how-agentline-solves-calling-for-agents-gok</guid>
      <description>&lt;p&gt;&lt;strong&gt;AgentLine&lt;/strong&gt; is solving one of the most important problems that AI agents face today. Agents can do a lot of tasks now because the models behind them have become more intelligent and the context size has also increased rapidly so they are doing more and more tasks now. Also after the release of openclaw and Hermes, agents have gone into mainstream and people are using them in their day-to-day life to automate different tasks for themselves. For, say, managing their emails, they give their agents an email to manage it, send emails, and do all kinds of tasks around it. At the same time the agents already have access to their file systems and terminal so that agents can write code, create images, read files, and manipulate things in all kinds of ways. Agents also have web access so they can search out things if they don't know something. Agents can be given access to external tools as well, such as your calendar, your Google meet, etc., so that they can manage them as well.&lt;/p&gt;

&lt;p&gt;For an agent to act in the way a human does and complete tasks end-to-end, it must have all the necessary tools that a human has, like from email to phone numbers to access to the physical world to access to a payment method. Most of the tasks need at least one or two of these things combined to complete it end-to-end and not having one of these tools might break the task in between. The agent will probably offload that particular point of the task to their owner. Now email is already solved for agents by AgentMail. Payments are yet to be solved. Companies like rent a human etc. are giving AI agents a physical body in the real world to complete tasks. Phone number and calling was still one of these things that wasn't solved yet and AgentLine is solving it gracefully.&lt;/p&gt;

&lt;p&gt;Getting a phone for IVR takes a lot of regulations and API tweaking in order to give it to agents. What people have been doing before is they wind up Twilio APIs with ElevenLabs APIs and then give it to their agents. They cannot manage the latency well. They themselves have to get approvals from Twilio in order to use it for longer periods. All these things AgentLine is solving by handling all these regulatory issues themselves: the speech-to-text and the text-to-speech themselves and also the phone number provisioning, everything on the backend. You don't have to wind up anything. They also take a look at latency and how the users are using it so it's very agent-specific and not built for humans.&lt;/p&gt;

&lt;p&gt;Now how you can get a phone number for your agent: the easiest way is to give it a skill file and it will arrange everything on its own. That's how AgentLine does it. You just have to point your agent to agentline.cloud/skill.md. It will provision the phone number on its own. It will set the tone for itself. It will set its persona and call you all on its own. AgentLine has reduced the latency of these calls to less than 2 seconds, which is very human when it comes to the responses.&lt;/p&gt;

&lt;p&gt;At the same time AgentLine is cost effective too. Other IVR providers or agents are costing more than $3 a number whereas AgentLine costs less than $2 a number per month, which makes sense for daily life use case because nobody is going to spend a dollar for booking a flight ticket for himself by calling an attendant. Now a lot of people don't find use cases at the forefront so giving your agent a phone number now is always a better choice so that the spectrum of tasks getting completed increases rapidly.&lt;/p&gt;

&lt;p&gt;At the same time as you progress, giving more autonomy to your agent, you'll get to know what are the use cases of it. Having a phone number is very important because the agent might have to log in to some place where two-factor authentication is required so it can get the SMS and log into that place using its phone number. Sometimes people are also using it as a support agent. They just ask their agent to turn this number into a support agent and all the support calls are handled by their agent. This is one of the use cases.&lt;/p&gt;

&lt;p&gt;Other use cases such as outbound sales calling: some people are using it for outbound sales calling. The agent calls them, books the meeting, and handles everything on its own. Some people are using it for feedback collection from their users. The agent calls their company users or their customers at definite amounts of interval and collects feedback from their customers. It notes it down, analyzes it, and plans its next move.&lt;/p&gt;

&lt;p&gt;Now this was a small brief about AgentLine and how telephony for AI agents is changing the way agents interact with the real world. If you want a phone number for your agent as well, you can get it from &lt;a href="https://agentline.cloud" rel="noopener noreferrer"&gt;AgentLine&lt;/a&gt;. &lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>agentskills</category>
      <category>agents</category>
    </item>
  </channel>
</rss>
