<?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: Roman </title>
    <description>The latest articles on DEV Community by Roman  (@openverb).</description>
    <link>https://dev.to/openverb</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%2F3764860%2F2b70aaef-5716-4164-bca5-2ff317c1bcc5.png</url>
      <title>DEV Community: Roman </title>
      <link>https://dev.to/openverb</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/openverb"/>
    <language>en</language>
    <item>
      <title>How I Built Semantic Monetization Into SaaS With OpenVerb + PaywallOS</title>
      <dc:creator>Roman </dc:creator>
      <pubDate>Mon, 24 Aug 2026 14:12:42 +0000</pubDate>
      <link>https://dev.to/openverb/how-i-built-semantic-monetization-into-saas-with-openverb-paywallos-1aoj</link>
      <guid>https://dev.to/openverb/how-i-built-semantic-monetization-into-saas-with-openverb-paywallos-1aoj</guid>
      <description>&lt;p&gt;Most SaaS paywalls are still implemented as scattered conditional logic.&lt;/p&gt;

&lt;p&gt;You start with something simple:&lt;/p&gt;

&lt;p&gt;if (user.isPaid) {&lt;br&gt;
  enableExport()&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Then the product grows.&lt;/p&gt;

&lt;p&gt;Now you have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Free users&lt;/li&gt;
&lt;li&gt;Pro users&lt;/li&gt;
&lt;li&gt;Business users&lt;/li&gt;
&lt;li&gt;usage limits&lt;/li&gt;
&lt;li&gt;feature-specific restrictions&lt;/li&gt;
&lt;li&gt;trials&lt;/li&gt;
&lt;li&gt;team permissions&lt;/li&gt;
&lt;li&gt;billing state&lt;/li&gt;
&lt;li&gt;upgrade prompts&lt;/li&gt;
&lt;li&gt;API enforcement&lt;/li&gt;
&lt;li&gt;backend authorization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before long, monetization logic is spread across frontend components, API routes, middleware, database checks, and billing code.&lt;/p&gt;

&lt;p&gt;That is the problem I wanted to solve with PaywallOS.&lt;/p&gt;

&lt;p&gt;PaywallOS is an AI-powered semantic monetization and paywall platform built on top of OpenVerb, an open execution layer for AI actions.&lt;/p&gt;

&lt;p&gt;The core idea is simple:&lt;/p&gt;

&lt;p&gt;Instead of monetizing pages, monetize actions.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;The Problem With Traditional Paywalls&lt;/p&gt;

&lt;p&gt;Traditional SaaS products often think in terms of routes or features.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;/dashboard → Free&lt;br&gt;
/reports → Pro&lt;br&gt;
/admin → Business&lt;/p&gt;

&lt;p&gt;That model works for some products, but it becomes limiting when the same interface contains actions that belong to different pricing tiers.&lt;/p&gt;

&lt;p&gt;Imagine a data platform where every user can open the dashboard.&lt;/p&gt;

&lt;p&gt;A Free user might be able to:&lt;/p&gt;

&lt;p&gt;view_data&lt;br&gt;
search_records&lt;br&gt;
create_project&lt;/p&gt;

&lt;p&gt;A Pro user might additionally have access to:&lt;/p&gt;

&lt;p&gt;export_data&lt;br&gt;
generate_report&lt;br&gt;
ai_suggestions&lt;/p&gt;

&lt;p&gt;And a Business user might unlock:&lt;/p&gt;

&lt;p&gt;bulk_export&lt;br&gt;
team_management&lt;br&gt;
advanced_analytics&lt;/p&gt;

&lt;p&gt;The page itself is not really what you are selling.&lt;/p&gt;

&lt;p&gt;The capabilities are.&lt;/p&gt;

&lt;p&gt;That is where semantic monetization becomes useful.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Treating Product Features as Verbs&lt;/p&gt;

&lt;p&gt;OpenVerb is built around the idea that software actions can be represented as semantic verbs.&lt;/p&gt;

&lt;p&gt;Instead of thinking about a button as merely a UI component:&lt;/p&gt;

&lt;p&gt;Export&lt;/p&gt;

&lt;p&gt;I can describe what the button actually does:&lt;/p&gt;

&lt;p&gt;export_data&lt;/p&gt;

&lt;p&gt;The same approach works for many different capabilities:&lt;/p&gt;

&lt;p&gt;generate_report&lt;br&gt;
create_workspace&lt;br&gt;
invite_member&lt;br&gt;
ai_suggestions&lt;br&gt;
download_pdf&lt;br&gt;
run_analysis&lt;br&gt;
publish_project&lt;/p&gt;

&lt;p&gt;These become part of the product’s semantic action layer.&lt;/p&gt;

&lt;p&gt;PaywallOS can then map those verbs to commercial rules.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;tiers:&lt;br&gt;
  free:&lt;br&gt;
    actions:&lt;br&gt;
      - view_data&lt;br&gt;
      - search_records&lt;br&gt;
  pro:&lt;br&gt;
    actions:&lt;br&gt;
      - view_data&lt;br&gt;
      - search_records&lt;br&gt;
      - export_data&lt;br&gt;
      - generate_report&lt;br&gt;
      - ai_suggestions&lt;br&gt;
  business:&lt;br&gt;
    actions:&lt;br&gt;
      - "*"&lt;/p&gt;

&lt;p&gt;Now the pricing model is expressed in terms of what users are allowed to do.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Frontend Integration&lt;/p&gt;

&lt;p&gt;The frontend can remain relatively simple.&lt;/p&gt;

&lt;p&gt;Initialize PaywallOS with the current application and user context:&lt;/p&gt;

&lt;p&gt;initPaywallOS(&lt;br&gt;
  apiKey,&lt;br&gt;
  appId,&lt;br&gt;
  userId,&lt;br&gt;
  userTier&lt;br&gt;
)&lt;/p&gt;

&lt;p&gt;Then actionable components can be tagged with semantic verbs:&lt;/p&gt;

&lt;p&gt;&lt;br&gt;
  Export&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
  Generate Report&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
  AI Suggestions&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;The important part is that the UI does not need to contain the full pricing policy.&lt;/p&gt;

&lt;p&gt;The component simply declares intent.&lt;/p&gt;

&lt;p&gt;verb="export_data"&lt;/p&gt;

&lt;p&gt;PaywallOS determines whether that action is allowed.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;What Happens When the User Clicks?&lt;/p&gt;

&lt;p&gt;Suppose a Free user clicks:&lt;/p&gt;

&lt;p&gt;&lt;br&gt;
  Export&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;The application can send an authorization request conceptually like:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "userId": "user_123",&lt;br&gt;
  "tier": "free",&lt;br&gt;
  "verb": "export_data"&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;PaywallOS evaluates the request.&lt;/p&gt;

&lt;p&gt;The result might be:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "allowed": false,&lt;br&gt;
  "reason": "tier_required",&lt;br&gt;
  "requiredTier": "pro"&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;The frontend can then show the appropriate upgrade experience.&lt;/p&gt;

&lt;p&gt;For an authorized user:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "allowed": true&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;The application continues with the action.&lt;/p&gt;

&lt;p&gt;This creates a clean separation between:&lt;/p&gt;

&lt;p&gt;User intent&lt;br&gt;
    ↓&lt;br&gt;
Monetization policy&lt;br&gt;
    ↓&lt;br&gt;
Authorization&lt;br&gt;
    ↓&lt;br&gt;
Execution&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Centralizing Monetization Logic&lt;/p&gt;

&lt;p&gt;One of my main goals with PaywallOS was eliminating pricing logic scattered throughout an application.&lt;/p&gt;

&lt;p&gt;Without a centralized system, you eventually get code like:&lt;/p&gt;

&lt;p&gt;if (&lt;br&gt;
  user.plan === "pro" ||&lt;br&gt;
  user.plan === "business" ||&lt;br&gt;
  user.isAdmin ||&lt;br&gt;
  user.hasLegacyAccess&lt;br&gt;
) {&lt;br&gt;
  // ...&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Then another component has slightly different logic.&lt;/p&gt;

&lt;p&gt;And another API endpoint checks something else.&lt;/p&gt;

&lt;p&gt;Eventually nobody is completely sure which rules are authoritative.&lt;/p&gt;

&lt;p&gt;With an action-centric model, the product can have a centralized policy configuration:&lt;/p&gt;

&lt;p&gt;actions:&lt;br&gt;
  export_data:&lt;br&gt;
    minimumTier: pro&lt;br&gt;
  generate_report:&lt;br&gt;
    minimumTier: pro&lt;br&gt;
    monthlyLimit: 50&lt;br&gt;
  ai_suggestions:&lt;br&gt;
    minimumTier: pro&lt;br&gt;
    monthlyLimit: 100&lt;br&gt;
  bulk_export:&lt;br&gt;
    minimumTier: business&lt;br&gt;
  team_management:&lt;br&gt;
    minimumTier: business&lt;/p&gt;

&lt;p&gt;Now monetization becomes configuration rather than duplicated application logic.&lt;/p&gt;

&lt;p&gt;That is a major architectural difference.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Usage-Based Monetization&lt;/p&gt;

&lt;p&gt;Tier access is only one part of the problem.&lt;/p&gt;

&lt;p&gt;AI products especially are increasingly usage-based.&lt;/p&gt;

&lt;p&gt;A Pro subscription might include:&lt;/p&gt;

&lt;p&gt;100 AI generations / month&lt;br&gt;
50 reports / month&lt;br&gt;
10 exports / day&lt;/p&gt;

&lt;p&gt;That means authorization needs to understand more than:&lt;/p&gt;

&lt;p&gt;Does this user have Pro?&lt;/p&gt;

&lt;p&gt;It may also need to ask:&lt;/p&gt;

&lt;p&gt;Has this user reached the action limit?&lt;/p&gt;

&lt;p&gt;The action model makes this natural.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;ai_suggestions:&lt;br&gt;
  minimumTier: pro&lt;br&gt;
  limits:&lt;br&gt;
    monthly: 100&lt;/p&gt;

&lt;p&gt;An authorization result could then return:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "allowed": false,&lt;br&gt;
  "reason": "usage_limit",&lt;br&gt;
  "limit": 100,&lt;br&gt;
  "used": 100,&lt;br&gt;
  "resetAt": "2026-09-01T00:00:00Z"&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;The product can respond accordingly.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Stripe Handles Billing. PaywallOS Handles Meaning.&lt;/p&gt;

&lt;p&gt;Stripe is excellent at managing the financial side of subscriptions.&lt;/p&gt;

&lt;p&gt;It understands things like:&lt;/p&gt;

&lt;p&gt;customer&lt;br&gt;
subscription&lt;br&gt;
price&lt;br&gt;
invoice&lt;br&gt;
payment&lt;/p&gt;

&lt;p&gt;But your application still needs to understand what those billing states mean inside the product.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;Stripe price_123&lt;/p&gt;

&lt;p&gt;does not inherently mean:&lt;/p&gt;

&lt;p&gt;allow export_data&lt;br&gt;
allow generate_report&lt;br&gt;
deny bulk_export&lt;br&gt;
limit ai_suggestions to 100/month&lt;/p&gt;

&lt;p&gt;That semantic mapping belongs to the application layer.&lt;/p&gt;

&lt;p&gt;PaywallOS sits between billing state and product capability.&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;/p&gt;

&lt;p&gt;Stripe&lt;br&gt;
  ↓&lt;br&gt;
Subscription state&lt;br&gt;
  ↓&lt;br&gt;
PaywallOS&lt;br&gt;
  ↓&lt;br&gt;
Semantic action policy&lt;br&gt;
  ↓&lt;br&gt;
Application&lt;/p&gt;

&lt;p&gt;Stripe remains the billing infrastructure.&lt;/p&gt;

&lt;p&gt;PaywallOS interprets that billing state as executable product permissions.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Why OpenVerb Fits This Model&lt;/p&gt;

&lt;p&gt;OpenVerb treats actions as structured verbs.&lt;/p&gt;

&lt;p&gt;A verb can define things such as:&lt;/p&gt;

&lt;p&gt;name&lt;br&gt;
description&lt;br&gt;
input schema&lt;br&gt;
output schema&lt;br&gt;
policy&lt;br&gt;
execution behavior&lt;br&gt;
receipt&lt;/p&gt;

&lt;p&gt;That architecture maps naturally to monetization.&lt;/p&gt;

&lt;p&gt;If the system already understands:&lt;/p&gt;

&lt;p&gt;export_data&lt;/p&gt;

&lt;p&gt;as an action, then commercial policy can become another policy applied to that action.&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;/p&gt;

&lt;p&gt;Intent&lt;br&gt;
  ↓&lt;br&gt;
Verb&lt;br&gt;
  ↓&lt;br&gt;
Authentication&lt;br&gt;
  ↓&lt;br&gt;
Monetization policy&lt;br&gt;
  ↓&lt;br&gt;
Usage policy&lt;br&gt;
  ↓&lt;br&gt;
Execution&lt;br&gt;
  ↓&lt;br&gt;
Receipt&lt;/p&gt;

&lt;p&gt;This is especially interesting for AI systems.&lt;/p&gt;

&lt;p&gt;An AI agent may decide that it wants to perform:&lt;/p&gt;

&lt;p&gt;generate_report&lt;/p&gt;

&lt;p&gt;The runtime should still be able to determine whether that user is commercially authorized to execute the verb.&lt;/p&gt;

&lt;p&gt;The AI does not need to understand the entire pricing implementation.&lt;/p&gt;

&lt;p&gt;It simply expresses the intended action.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;AI-Native Paywall Configuration&lt;/p&gt;

&lt;p&gt;Another area I am exploring with PaywallOS is using AI to generate the initial action library.&lt;/p&gt;

&lt;p&gt;A developer could describe an application:&lt;/p&gt;

&lt;p&gt;My SaaS product lets users create projects, run AI analysis,&lt;br&gt;
export reports, invite teammates, and perform bulk exports.&lt;/p&gt;

&lt;p&gt;An AI-assisted setup process could propose:&lt;/p&gt;

&lt;p&gt;create_project&lt;br&gt;
run_ai_analysis&lt;br&gt;
export_report&lt;br&gt;
invite_member&lt;br&gt;
bulk_export&lt;/p&gt;

&lt;p&gt;It could then suggest an initial tier structure:&lt;/p&gt;

&lt;p&gt;Free:&lt;br&gt;
  create_project&lt;br&gt;
Pro:&lt;br&gt;
  run_ai_analysis&lt;br&gt;
  export_report&lt;br&gt;
Business:&lt;br&gt;
  invite_member&lt;br&gt;
  bulk_export&lt;/p&gt;

&lt;p&gt;The developer still controls the final policy.&lt;/p&gt;

&lt;p&gt;But AI can dramatically reduce the amount of configuration required to get started.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;The Backend Still Has to Enforce It&lt;/p&gt;

&lt;p&gt;Frontend paywalls should never be treated as security boundaries.&lt;/p&gt;

&lt;p&gt;Hiding or disabling a button is useful UX, but users can still call APIs directly.&lt;/p&gt;

&lt;p&gt;That means the same semantic authorization needs to happen on the backend.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;app.post("/api/export", async (req, res) =&amp;gt; {&lt;br&gt;
  const decision = await paywall.authorize({&lt;br&gt;
    userId: req.user.id,&lt;br&gt;
    verb: "export_data"&lt;br&gt;
  })&lt;br&gt;
  if (!decision.allowed) {&lt;br&gt;
    return res.status(403).json(decision)&lt;br&gt;
  }&lt;br&gt;
  return exportData(req, res)&lt;br&gt;
})&lt;/p&gt;

&lt;p&gt;The frontend improves the experience.&lt;/p&gt;

&lt;p&gt;The backend provides the enforcement.&lt;/p&gt;

&lt;p&gt;Both systems use the same semantic action.&lt;/p&gt;

&lt;p&gt;That prevents the frontend and backend from developing separate interpretations of the pricing model.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;A Better Developer Mental Model&lt;/p&gt;

&lt;p&gt;The biggest change is not really technical.&lt;/p&gt;

&lt;p&gt;It is conceptual.&lt;/p&gt;

&lt;p&gt;Instead of asking:&lt;/p&gt;

&lt;p&gt;Which page does this plan unlock?&lt;/p&gt;

&lt;p&gt;I want developers to ask:&lt;/p&gt;

&lt;p&gt;Which actions can this user perform?&lt;/p&gt;

&lt;p&gt;That creates a more flexible monetization model.&lt;/p&gt;

&lt;p&gt;The same action can appear:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;on multiple pages&lt;/li&gt;
&lt;li&gt;in a mobile app&lt;/li&gt;
&lt;li&gt;in a desktop application&lt;/li&gt;
&lt;li&gt;through an API&lt;/li&gt;
&lt;li&gt;inside an AI agent&lt;/li&gt;
&lt;li&gt;through an automation workflow&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The commercial rule remains attached to the action.&lt;/p&gt;

&lt;p&gt;Not the interface.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Where This Could Go&lt;/p&gt;

&lt;p&gt;Action-based monetization opens up some interesting possibilities.&lt;/p&gt;

&lt;p&gt;A product could eventually define:&lt;/p&gt;

&lt;p&gt;generate_image → $0.10&lt;br&gt;
run_analysis → $1.00&lt;br&gt;
export_dataset → Pro&lt;br&gt;
bulk_processing → Business&lt;br&gt;
premium_model → 5 credits&lt;/p&gt;

&lt;p&gt;The same semantic execution layer could support:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;subscriptions&lt;/li&gt;
&lt;li&gt;credits&lt;/li&gt;
&lt;li&gt;usage-based pricing&lt;/li&gt;
&lt;li&gt;per-action pricing&lt;/li&gt;
&lt;li&gt;API metering&lt;/li&gt;
&lt;li&gt;AI agent permissions&lt;/li&gt;
&lt;li&gt;enterprise feature controls&lt;/li&gt;
&lt;li&gt;marketplace actions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At that point, monetization becomes part of application architecture rather than a layer added after the product is built.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Final Thoughts&lt;/p&gt;

&lt;p&gt;The main idea behind PaywallOS is straightforward:&lt;/p&gt;

&lt;p&gt;Product capabilities should be first-class objects in the monetization system.&lt;/p&gt;

&lt;p&gt;Instead of spreading pricing logic across dozens of components:&lt;/p&gt;

&lt;p&gt;if paid&lt;br&gt;
if pro&lt;br&gt;
if business&lt;br&gt;
if credits &amp;gt; 0&lt;/p&gt;

&lt;p&gt;describe the action:&lt;/p&gt;

&lt;p&gt;export_data&lt;/p&gt;

&lt;p&gt;Then let a centralized policy determine:&lt;/p&gt;

&lt;p&gt;Who can execute it?&lt;br&gt;
Which tier includes it?&lt;br&gt;
How often can it run?&lt;br&gt;
Does it consume usage?&lt;br&gt;
Should an upgrade be shown?&lt;/p&gt;

&lt;p&gt;OpenVerb provides the semantic action model.&lt;/p&gt;

&lt;p&gt;Stripe can provide the billing infrastructure.&lt;/p&gt;

&lt;p&gt;PaywallOS connects those pieces into an action-centric monetization layer.&lt;/p&gt;

&lt;p&gt;That is the architecture I am experimenting with at:&lt;/p&gt;

&lt;p&gt;paywallos.openverb.org&lt;/p&gt;

&lt;p&gt;If you are building SaaS, AI tools, agents, or usage-based products, I think action-level monetization is going to become increasingly useful as applications become more dynamic and less page-centric.&lt;/p&gt;

&lt;h1&gt;
  
  
  opensource #saas #ai #webdev #typescript
&lt;/h1&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>PaywallOS: What an OpenVerb Domain Implementation Looks Like</title>
      <dc:creator>Roman </dc:creator>
      <pubDate>Thu, 20 Aug 2026 14:56:25 +0000</pubDate>
      <link>https://dev.to/openverb/paywallos-what-an-openverb-domain-implementation-looks-like-4827</link>
      <guid>https://dev.to/openverb/paywallos-what-an-openverb-domain-implementation-looks-like-4827</guid>
      <description>&lt;p&gt;PaywallOS: What an OpenVerb Domain Implementation Looks Like&lt;/p&gt;

&lt;p&gt;This week, I want to show one of the clearest examples of what OpenVerb can look like when it is applied to a real software domain.&lt;/p&gt;

&lt;p&gt;That example is PaywallOS.&lt;/p&gt;

&lt;p&gt;OpenVerb provides a common way to define actions as verbs, validate inputs, apply policies, execute actions, and return receipts.&lt;/p&gt;

&lt;p&gt;PaywallOS takes that model and applies it to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;subscription tiers&lt;/li&gt;
&lt;li&gt;entitlements&lt;/li&gt;
&lt;li&gt;feature access&lt;/li&gt;
&lt;li&gt;usage limits&lt;/li&gt;
&lt;li&gt;upgrade decisions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The important part is that PaywallOS is not a separate idea from OpenVerb.&lt;/p&gt;

&lt;p&gt;It is an example of what can be built on top of the OpenVerb execution model.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;The Problem&lt;/p&gt;

&lt;p&gt;Most SaaS applications start with simple subscription checks.&lt;/p&gt;

&lt;p&gt;Something like:&lt;/p&gt;

&lt;p&gt;if (user.plan === "pro") {&lt;br&gt;
  exportData()&lt;br&gt;
} else {&lt;br&gt;
  showUpgradeModal()&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;That works at first.&lt;/p&gt;

&lt;p&gt;Then the product grows.&lt;/p&gt;

&lt;p&gt;Now you have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Free, Pro, and Business tiers&lt;/li&gt;
&lt;li&gt;usage limits&lt;/li&gt;
&lt;li&gt;unlimited features&lt;/li&gt;
&lt;li&gt;AI quotas&lt;/li&gt;
&lt;li&gt;custom entitlements&lt;/li&gt;
&lt;li&gt;different upgrade paths&lt;/li&gt;
&lt;li&gt;enterprise exceptions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Soon, feature-access logic starts spreading across the codebase.&lt;/p&gt;

&lt;p&gt;function handleExport() {&lt;br&gt;
  if (!user.subscription) {&lt;br&gt;
    showUpgradeModal()&lt;br&gt;
  } else if (user.plan === "free") {&lt;br&gt;
    showUpgradeModal()&lt;br&gt;
  } else if (&lt;br&gt;
    user.plan === "pro" &amp;amp;&amp;amp;&lt;br&gt;
    exportsThisMonth &amp;gt;= 50&lt;br&gt;
  ) {&lt;br&gt;
    showLimitModal()&lt;br&gt;
  } else {&lt;br&gt;
    exportData()&lt;br&gt;
  }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;The application now has to understand pricing logic everywhere.&lt;/p&gt;

&lt;p&gt;PaywallOS approaches this differently.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Step 1: Define Product Capabilities as Verbs&lt;/p&gt;

&lt;p&gt;Instead of thinking first about buttons and routes, define the actual action.&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "verbs": [&lt;br&gt;
    {&lt;br&gt;
      "name": "dashboard.view",&lt;br&gt;
      "description": "Access the analytics dashboard"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "name": "data.export",&lt;br&gt;
      "description": "Export reports and raw data"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "name": "ai.insights",&lt;br&gt;
      "description": "Generate automated AI insights"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "name": "ai.forecast",&lt;br&gt;
      "description": "Generate predictive forecasts"&lt;br&gt;
    }&lt;br&gt;
  ]&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Now these actions have stable identities.&lt;/p&gt;

&lt;p&gt;data.export means one thing regardless of where the button appears.&lt;/p&gt;

&lt;p&gt;ai.insights means one thing regardless of which frontend component triggers it.&lt;/p&gt;

&lt;p&gt;That is the OpenVerb idea.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Step 2: Connect Verbs to Tiers&lt;/p&gt;

&lt;p&gt;Now define which subscription tiers can execute which verbs.&lt;/p&gt;

&lt;p&gt;Free&lt;/p&gt;

&lt;p&gt;dashboard.view&lt;/p&gt;

&lt;p&gt;Pro&lt;/p&gt;

&lt;p&gt;dashboard.view&lt;br&gt;
data.export&lt;br&gt;
ai.insights&lt;/p&gt;

&lt;p&gt;Business&lt;/p&gt;

&lt;p&gt;dashboard.view&lt;br&gt;
data.export&lt;br&gt;
ai.insights&lt;br&gt;
ai.forecast&lt;br&gt;
team.collaboration&lt;br&gt;
api.custom_keys&lt;br&gt;
support.priority&lt;/p&gt;

&lt;p&gt;At this point, the pricing model becomes much easier to inspect.&lt;/p&gt;

&lt;p&gt;Instead of asking:&lt;/p&gt;

&lt;p&gt;Where in the codebase do we check for Pro?&lt;/p&gt;

&lt;p&gt;you can ask:&lt;/p&gt;

&lt;p&gt;Which verbs does Pro allow?&lt;/p&gt;

&lt;p&gt;That is a much cleaner boundary.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Step 3: Add Usage Policies&lt;/p&gt;

&lt;p&gt;Not every entitlement needs to be unlimited.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;dashboard.view&lt;br&gt;
Free: unlimited&lt;br&gt;
Pro: unlimited&lt;br&gt;
Business: unlimited&lt;br&gt;
data.export&lt;br&gt;
Free: denied&lt;br&gt;
Pro: 50/month&lt;br&gt;
Business: unlimited&lt;br&gt;
ai.insights&lt;br&gt;
Free: denied&lt;br&gt;
Pro: 20/month&lt;br&gt;
Business: unlimited&lt;br&gt;
ai.forecast&lt;br&gt;
Free: denied&lt;br&gt;
Pro: denied&lt;br&gt;
Business: unlimited&lt;/p&gt;

&lt;p&gt;Now the system can answer more than a simple yes or no.&lt;/p&gt;

&lt;p&gt;It can determine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;whether the action is included&lt;/li&gt;
&lt;li&gt;whether a limit applies&lt;/li&gt;
&lt;li&gt;how much usage remains&lt;/li&gt;
&lt;li&gt;whether the user needs to upgrade&lt;/li&gt;
&lt;li&gt;whether the monthly quota has been reached&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Step 4: Let the UI Describe the Action&lt;/p&gt;

&lt;p&gt;The frontend can simply declare what action the user wants to perform.&lt;/p&gt;

&lt;p&gt;&lt;br&gt;
  Export&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
  Generate Insights&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
  Forecast&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Now the UI does not need to understand the entire pricing system.&lt;/p&gt;

&lt;p&gt;It only needs to say:&lt;/p&gt;

&lt;p&gt;The user wants to execute data.export.&lt;/p&gt;

&lt;p&gt;PaywallOS can evaluate the entitlement.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Complete Example&lt;/p&gt;

&lt;p&gt;Suppose Alex is on the Free plan.&lt;/p&gt;

&lt;p&gt;Alex clicks:&lt;/p&gt;

&lt;p&gt;&lt;br&gt;
  Export&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;The system evaluates:&lt;/p&gt;

&lt;p&gt;User: Alex&lt;br&gt;
Tier: Free&lt;br&gt;
Verb: data.export&lt;br&gt;
Decision: DENY&lt;br&gt;
Reason:&lt;br&gt;
data.export requires Pro or Business&lt;/p&gt;

&lt;p&gt;The application can show the appropriate upgrade experience.&lt;/p&gt;

&lt;p&gt;Now Alex upgrades to Pro.&lt;/p&gt;

&lt;p&gt;The exact same button remains:&lt;/p&gt;

&lt;p&gt;&lt;br&gt;
  Export&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;But the evaluation changes:&lt;/p&gt;

&lt;p&gt;User: Alex&lt;br&gt;
Tier: Pro&lt;br&gt;
Verb: data.export&lt;br&gt;
Usage:&lt;br&gt;
17 / 50&lt;br&gt;
Decision:&lt;br&gt;
ALLOW&lt;/p&gt;

&lt;p&gt;The export runs.&lt;/p&gt;

&lt;p&gt;Usage becomes:&lt;/p&gt;

&lt;p&gt;18 / 50&lt;/p&gt;

&lt;p&gt;No new conditional.&lt;/p&gt;

&lt;p&gt;No change to the button.&lt;/p&gt;

&lt;p&gt;No duplicated subscription logic.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;When the Limit Is Reached&lt;/p&gt;

&lt;p&gt;Eventually Alex reaches:&lt;/p&gt;

&lt;p&gt;50 / 50&lt;/p&gt;

&lt;p&gt;The next request can return:&lt;/p&gt;

&lt;p&gt;Decision: DENY&lt;br&gt;
Reason:&lt;br&gt;
monthly_limit_reached&lt;br&gt;
Limit:&lt;br&gt;
50&lt;/p&gt;

&lt;p&gt;The system can then show a quota message instead of an upgrade message.&lt;/p&gt;

&lt;p&gt;Same verb.&lt;/p&gt;

&lt;p&gt;Different policy result.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;The Same Pattern Works for AI Features&lt;/p&gt;

&lt;p&gt;Consider:&lt;/p&gt;

&lt;p&gt;&lt;br&gt;
  Analyze Dataset&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;A Free user:&lt;/p&gt;

&lt;p&gt;DENY&lt;br&gt;
Upgrade required&lt;/p&gt;

&lt;p&gt;A Pro user with 7 of 20 uses consumed:&lt;/p&gt;

&lt;p&gt;ALLOW&lt;br&gt;
Usage: 8 / 20&lt;/p&gt;

&lt;p&gt;A Pro user at the limit:&lt;/p&gt;

&lt;p&gt;DENY&lt;br&gt;
Monthly limit reached&lt;/p&gt;

&lt;p&gt;A Business user:&lt;/p&gt;

&lt;p&gt;ALLOW&lt;br&gt;
Unlimited&lt;/p&gt;

&lt;p&gt;The feature remains:&lt;/p&gt;

&lt;p&gt;ai.insights&lt;/p&gt;

&lt;p&gt;The policy determines whether it can execute.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;The Architecture&lt;/p&gt;

&lt;p&gt;The complete flow looks like this:&lt;/p&gt;

&lt;p&gt;UI&lt;br&gt;
verb="ai.insights"&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;OpenVerb&lt;br&gt;
What action is being requested?&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;PaywallOS&lt;br&gt;
Who is requesting it?&lt;br&gt;
What tier are they on?&lt;br&gt;
Is the verb included?&lt;br&gt;
Does it have a limit?&lt;br&gt;
How much has been used?&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Decision&lt;br&gt;
ALLOW&lt;br&gt;
DENY&lt;br&gt;
UPGRADE&lt;br&gt;
LIMIT_REACHED&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Application&lt;br&gt;
Execute the action&lt;br&gt;
or&lt;br&gt;
present the appropriate paywall&lt;/p&gt;

&lt;p&gt;This separation is the important part.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Why This Matters Beyond Paywalls&lt;/p&gt;

&lt;p&gt;PaywallOS is interesting because it demonstrates that OpenVerb does not need to directly implement every domain.&lt;/p&gt;

&lt;p&gt;OpenVerb provides a common execution language.&lt;/p&gt;

&lt;p&gt;The domain system adds its own interpretation.&lt;/p&gt;

&lt;p&gt;PaywallOS asks:&lt;/p&gt;

&lt;p&gt;Who is allowed to execute this verb?&lt;/p&gt;

&lt;p&gt;A GIS system could ask:&lt;/p&gt;

&lt;p&gt;Which mapping environment can execute this verb?&lt;/p&gt;

&lt;p&gt;An enterprise agent system could ask:&lt;/p&gt;

&lt;p&gt;Which agent is authorized to execute this verb?&lt;/p&gt;

&lt;p&gt;A workflow engine could ask:&lt;/p&gt;

&lt;p&gt;Is this verb allowed at the current workflow stage?&lt;/p&gt;

&lt;p&gt;A physical-device runtime could ask:&lt;/p&gt;

&lt;p&gt;Which device can execute this action?&lt;/p&gt;

&lt;p&gt;Same execution model.&lt;/p&gt;

&lt;p&gt;Different domain.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;OpenVerb as the Shared Layer&lt;/p&gt;

&lt;p&gt;You can think of the architecture like this:&lt;/p&gt;

&lt;p&gt;OpenVerb&lt;br&gt;
   ↓&lt;br&gt;
PaywallOS&lt;/p&gt;

&lt;p&gt;But that same model could also support:&lt;/p&gt;

&lt;p&gt;OpenVerb&lt;br&gt;
   ↓&lt;br&gt;
GIS execution layer&lt;/p&gt;

&lt;p&gt;or:&lt;/p&gt;

&lt;p&gt;OpenVerb&lt;br&gt;
   ↓&lt;br&gt;
CRM execution layer&lt;/p&gt;

&lt;p&gt;or:&lt;/p&gt;

&lt;p&gt;OpenVerb&lt;br&gt;
   ↓&lt;br&gt;
Browser automation&lt;/p&gt;

&lt;p&gt;or:&lt;/p&gt;

&lt;p&gt;OpenVerb&lt;br&gt;
   ↓&lt;br&gt;
AI-native IDE&lt;/p&gt;

&lt;p&gt;That is the larger direction.&lt;/p&gt;

&lt;p&gt;OpenVerb defines the common language of execution.&lt;/p&gt;

&lt;p&gt;Domain systems build on top of it.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;The Bigger Idea&lt;/p&gt;

&lt;p&gt;Traditional software often looks like:&lt;/p&gt;

&lt;p&gt;User clicks button&lt;br&gt;
↓&lt;br&gt;
Application runs custom logic&lt;/p&gt;

&lt;p&gt;An OpenVerb-style system can look more like:&lt;/p&gt;

&lt;p&gt;Human or AI requests an action&lt;br&gt;
↓&lt;br&gt;
Action is represented as a verb&lt;br&gt;
↓&lt;br&gt;
Policy determines whether it can execute&lt;br&gt;
↓&lt;br&gt;
The correct runtime executes it&lt;br&gt;
↓&lt;br&gt;
A receipt describes what happened&lt;/p&gt;

&lt;p&gt;That gives AI systems a structured boundary between:&lt;/p&gt;

&lt;p&gt;deciding what should happen&lt;/p&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;p&gt;actually making it happen&lt;/p&gt;

&lt;p&gt;PaywallOS is one concrete example of that idea.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Explore It&lt;/p&gt;

&lt;p&gt;PaywallOS:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://paywallos.openverb.org" rel="noopener noreferrer"&gt;https://paywallos.openverb.org&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;OpenVerb:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://openverb.org" rel="noopener noreferrer"&gt;https://openverb.org&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Install:&lt;/p&gt;

&lt;p&gt;npm install openverb&lt;/p&gt;

&lt;p&gt;or:&lt;/p&gt;

&lt;p&gt;pip install openverb&lt;/p&gt;

&lt;p&gt;If you are building AI agents, SaaS platforms, developer tools, automation systems, or domain-specific execution environments, I would be interested to see what this model could look like in your architecture.&lt;/p&gt;

&lt;p&gt;OpenVerb: open execution for AI.&lt;/p&gt;

&lt;h1&gt;
  
  
  OpenVerb #AI #OpenSource #DevTools #AIAgents #SaaS #TypeScript #Python
&lt;/h1&gt;

&lt;p&gt;&lt;a href="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%2Farticles%2Fs6cebb18zxajh88x7bu6.png" class="article-body-image-wrapper"&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%2Farticles%2Fs6cebb18zxajh88x7bu6.png" alt=" " width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Building Topics Archive: What Happens When Generative Media Needs an Archive?</title>
      <dc:creator>Roman </dc:creator>
      <pubDate>Wed, 12 Aug 2026 14:48:43 +0000</pubDate>
      <link>https://dev.to/openverb/building-topics-archive-what-happens-when-generative-media-needs-an-archive-f8e</link>
      <guid>https://dev.to/openverb/building-topics-archive-what-happens-when-generative-media-needs-an-archive-f8e</guid>
      <description>&lt;p&gt;We’ve spent enormous effort figuring out how to generate AI media.&lt;/p&gt;

&lt;p&gt;I’ve been thinking about a different problem:&lt;/p&gt;

&lt;p&gt;Where does all of it go?&lt;/p&gt;

&lt;p&gt;If AI makes media effectively unlimited, generation eventually stops being the only interesting problem.&lt;/p&gt;

&lt;p&gt;Organization becomes infrastructure.&lt;/p&gt;

&lt;p&gt;That’s what I’m exploring with Topics Archive.&lt;/p&gt;

&lt;p&gt;From Feeds to Topics&lt;/p&gt;

&lt;p&gt;Most internet media is organized around feeds.&lt;/p&gt;

&lt;p&gt;Creator&lt;br&gt;
  ↓&lt;br&gt;
Post&lt;br&gt;
  ↓&lt;br&gt;
Feed&lt;br&gt;
  ↓&lt;br&gt;
Gone from attention&lt;/p&gt;

&lt;p&gt;Topics Archive explores a different structure:&lt;/p&gt;

&lt;p&gt;Topic&lt;br&gt;
  ↓&lt;br&gt;
Identity&lt;br&gt;
  ↓&lt;br&gt;
Metadata&lt;br&gt;
  ↓&lt;br&gt;
Generated Artifacts&lt;br&gt;
  ↓&lt;br&gt;
Relationships&lt;br&gt;
  ↓&lt;br&gt;
Discovery&lt;/p&gt;

&lt;p&gt;Instead of making the post the primary unit, make the subject persistent.&lt;/p&gt;

&lt;p&gt;A topic could be:&lt;/p&gt;

&lt;p&gt;a person&lt;br&gt;
a country&lt;br&gt;
a city&lt;br&gt;
an animal&lt;br&gt;
a historical event&lt;br&gt;
a Bible story&lt;br&gt;
a soccer match&lt;br&gt;
a scientific concept&lt;/p&gt;

&lt;p&gt;Then generated songs, images, videos, biographies, metadata, and other artifacts can accumulate around it.&lt;/p&gt;

&lt;p&gt;Testing the Model With Music&lt;/p&gt;

&lt;p&gt;I’ve already experimented with the concept through several archives.&lt;/p&gt;

&lt;p&gt;One is the Bible Musical Archive, where stories and subjects become musical artifacts.&lt;/p&gt;

&lt;p&gt;Another is the World Cup Musical Archive, where matches can become persistent topics with generated music associated with them.&lt;/p&gt;

&lt;p&gt;I’ve also built a large biography collection.&lt;/p&gt;

&lt;p&gt;The point isn’t simply:&lt;/p&gt;

&lt;p&gt;AI can make a song about anything.&lt;/p&gt;

&lt;p&gt;We already know generative models can create enormous quantities of media.&lt;/p&gt;

&lt;p&gt;The interesting question is:&lt;/p&gt;

&lt;p&gt;How do we organize generated culture when creating it becomes nearly free?&lt;/p&gt;

&lt;p&gt;The Technical Problem&lt;/p&gt;

&lt;p&gt;A topic-based archive starts resembling a graph more than a traditional music library.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;World Cup&lt;br&gt;
   ↓&lt;br&gt;
Tournament&lt;br&gt;
   ↓&lt;br&gt;
Match&lt;br&gt;
 ↙     ↘&lt;br&gt;
Team A  Team B&lt;br&gt;
   ↓&lt;br&gt;
Location&lt;br&gt;
   ↓&lt;br&gt;
Generated Song&lt;/p&gt;

&lt;p&gt;Now the media is connected to structured entities.&lt;/p&gt;

&lt;p&gt;That opens possibilities around APIs, geographic interfaces, search, recommendation, automated generation pipelines, and programmatic archives.&lt;/p&gt;

&lt;p&gt;Why I Think This Matters&lt;/p&gt;

&lt;p&gt;Generative media is going to produce an enormous amount of cultural material.&lt;/p&gt;

&lt;p&gt;Feeds are optimized for what’s new.&lt;/p&gt;

&lt;p&gt;Archives are optimized for what persists.&lt;/p&gt;

&lt;p&gt;I’m interested in building for the second problem.&lt;/p&gt;

&lt;p&gt;Maybe the next major challenge in generative media isn’t generating another billion artifacts.&lt;/p&gt;

&lt;p&gt;Maybe it’s creating structures that make those artifacts discoverable, contextual, and worth preserving.&lt;/p&gt;

&lt;p&gt;Topics Archive:&lt;br&gt;
&lt;a href="https://topicsarchive.openverb.org" rel="noopener noreferrer"&gt;https://topicsarchive.openverb.org&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  generativeai #musictech #archives #knowledgegraphs #ai
&lt;/h1&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Building OpenVerb: An Open Execution Layer Between AI and Software</title>
      <dc:creator>Roman </dc:creator>
      <pubDate>Wed, 12 Aug 2026 14:47:15 +0000</pubDate>
      <link>https://dev.to/openverb/building-openverb-an-open-execution-layer-between-ai-and-software-445o</link>
      <guid>https://dev.to/openverb/building-openverb-an-open-execution-layer-between-ai-and-software-445o</guid>
      <description>&lt;p&gt;The more capable LLMs become, the more interested I am in what happens after reasoning.&lt;/p&gt;

&lt;p&gt;Suppose an AI understands:&lt;/p&gt;

&lt;p&gt;Create a CRM contact for Sarah Chen.&lt;/p&gt;

&lt;p&gt;Understanding the request isn’t the difficult part anymore.&lt;/p&gt;

&lt;p&gt;Execution is.&lt;/p&gt;

&lt;p&gt;That’s the problem behind OpenVerb.&lt;/p&gt;

&lt;p&gt;Actions as Verbs&lt;/p&gt;

&lt;p&gt;OpenVerb represents application capabilities as structured verbs:&lt;/p&gt;

&lt;p&gt;crm.create_contact&lt;br&gt;
email.send&lt;br&gt;
gis.add_layer&lt;br&gt;
file.move&lt;/p&gt;

&lt;p&gt;Instead of giving an AI unrestricted control over software, applications expose known capabilities.&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;/p&gt;

&lt;p&gt;Intent&lt;br&gt;
  ↓&lt;br&gt;
Verb&lt;br&gt;
  ↓&lt;br&gt;
Schema&lt;br&gt;
  ↓&lt;br&gt;
Policy&lt;br&gt;
  ↓&lt;br&gt;
Executor&lt;br&gt;
  ↓&lt;br&gt;
Receipt&lt;/p&gt;

&lt;p&gt;This creates a boundary between intelligence and execution.&lt;/p&gt;

&lt;p&gt;The model determines intent.&lt;/p&gt;

&lt;p&gt;The execution infrastructure determines what that intent is allowed to become.&lt;/p&gt;

&lt;p&gt;The Ecosystem&lt;/p&gt;

&lt;p&gt;OpenVerb started as a protocol and has expanded into a larger developer ecosystem.&lt;/p&gt;

&lt;p&gt;I’ve built or experimented with:&lt;/p&gt;

&lt;p&gt;Protocol&lt;br&gt;
Framework&lt;br&gt;
Runtime&lt;br&gt;
Policy&lt;br&gt;
SDK&lt;br&gt;
CLI&lt;br&gt;
Core&lt;br&gt;
.ov&lt;br&gt;
Viewer&lt;br&gt;
Studio&lt;br&gt;
CRM&lt;br&gt;
GIS&lt;br&gt;
IDE&lt;br&gt;
Pulse&lt;br&gt;
Stdlib&lt;br&gt;
Markdown&lt;br&gt;
Python Core&lt;br&gt;
Fellowship&lt;/p&gt;

&lt;p&gt;These aren’t intended to be unrelated packages.&lt;/p&gt;

&lt;p&gt;They’re different pieces of the same execution problem.&lt;/p&gt;

&lt;p&gt;Portable Workflows&lt;/p&gt;

&lt;p&gt;One extension of this architecture is .ov.&lt;/p&gt;

&lt;p&gt;AI can generate workflows today, but they’re frequently trapped inside the application that created them.&lt;/p&gt;

&lt;p&gt;.ov explores:&lt;/p&gt;

&lt;p&gt;Prompt&lt;br&gt;
 ↓&lt;br&gt;
Generate workflow&lt;br&gt;
 ↓&lt;br&gt;
Save .ov&lt;br&gt;
 ↓&lt;br&gt;
Inspect&lt;br&gt;
 ↓&lt;br&gt;
Execute&lt;br&gt;
 ↓&lt;br&gt;
Reuse&lt;/p&gt;

&lt;p&gt;The workflow becomes an artifact instead of temporary conversation state.&lt;/p&gt;

&lt;p&gt;Policy and Receipts&lt;/p&gt;

&lt;p&gt;Execution introduces consequences.&lt;/p&gt;

&lt;p&gt;The fact that an agent knows about:&lt;/p&gt;

&lt;p&gt;email.send&lt;/p&gt;

&lt;p&gt;doesn’t mean it should always execute it.&lt;/p&gt;

&lt;p&gt;That’s why policy sits directly in the OpenVerb model.&lt;/p&gt;

&lt;p&gt;And afterward, a receipt provides evidence of execution.&lt;/p&gt;

&lt;p&gt;I think those concepts become increasingly important as AI moves from:&lt;/p&gt;

&lt;p&gt;“Here’s what you should do.”&lt;/p&gt;

&lt;p&gt;to:&lt;/p&gt;

&lt;p&gt;“I did it.”&lt;/p&gt;

&lt;p&gt;The Long-Term Idea&lt;/p&gt;

&lt;p&gt;I’m exploring OpenVerb as something approaching a universal runner for AI actions.&lt;/p&gt;

&lt;p&gt;Applications provide capabilities.&lt;/p&gt;

&lt;p&gt;Models provide intelligence.&lt;/p&gt;

&lt;p&gt;OpenVerb provides the execution contract between them.&lt;/p&gt;

&lt;p&gt;Models can change.&lt;/p&gt;

&lt;p&gt;Agents can change.&lt;/p&gt;

&lt;p&gt;Applications can change.&lt;/p&gt;

&lt;p&gt;The capability interface can remain understandable.&lt;/p&gt;

&lt;p&gt;OpenVerb:&lt;br&gt;
&lt;a href="https://openverb.org" rel="noopener noreferrer"&gt;https://openverb.org&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;NPM:&lt;br&gt;
&lt;a href="https://www.npmjs.com/package/openverb" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/openverb&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;OpenVerb is open infrastructure, so if you’re building agents, copilots, automation systems, or developer tools, I’d be particularly interested in what you’d build on top of it.&lt;/p&gt;

&lt;h1&gt;
  
  
  ai #agents #opensource #developerexperience #automation
&lt;/h1&gt;

</description>
    </item>
    <item>
      <title>Building PaywallOS: Separating Payments From Entitlements</title>
      <dc:creator>Roman </dc:creator>
      <pubDate>Wed, 12 Aug 2026 14:44:33 +0000</pubDate>
      <link>https://dev.to/openverb/building-paywallos-separating-payments-from-entitlements-flh</link>
      <guid>https://dev.to/openverb/building-paywallos-separating-payments-from-entitlements-flh</guid>
      <description>&lt;p&gt;A surprisingly common SaaS anti-pattern looks something like:&lt;/p&gt;

&lt;p&gt;if (user.plan === "pro") {&lt;br&gt;
  showFeature();&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;It works.&lt;/p&gt;

&lt;p&gt;Until it doesn’t.&lt;/p&gt;

&lt;p&gt;Add multiple tiers.&lt;/p&gt;

&lt;p&gt;Usage limits.&lt;/p&gt;

&lt;p&gt;Trials.&lt;/p&gt;

&lt;p&gt;One-time purchases.&lt;/p&gt;

&lt;p&gt;Organizations.&lt;/p&gt;

&lt;p&gt;Add-ons.&lt;/p&gt;

&lt;p&gt;API access.&lt;/p&gt;

&lt;p&gt;AI credits.&lt;/p&gt;

&lt;p&gt;Suddenly payment state and authorization logic are spread throughout the application.&lt;/p&gt;

&lt;p&gt;That’s the infrastructure problem I’ve been exploring with PaywallOS.&lt;/p&gt;

&lt;p&gt;Payments Aren’t Entitlements&lt;/p&gt;

&lt;p&gt;A payment provider answers questions about transactions and subscriptions.&lt;/p&gt;

&lt;p&gt;Your application has a different question:&lt;/p&gt;

&lt;p&gt;What is this user actually allowed to do?&lt;/p&gt;

&lt;p&gt;Those concerns are related, but they aren’t identical.&lt;/p&gt;

&lt;p&gt;I think about the architecture as:&lt;/p&gt;

&lt;p&gt;Payment&lt;br&gt;
   ↓&lt;br&gt;
Subscription / Purchase&lt;br&gt;
   ↓&lt;br&gt;
Entitlement&lt;br&gt;
   ↓&lt;br&gt;
Resource / Capability&lt;br&gt;
   ↓&lt;br&gt;
Access Decision&lt;/p&gt;

&lt;p&gt;That separation creates a cleaner boundary between billing infrastructure and application authorization.&lt;/p&gt;

&lt;p&gt;Why This Matters for AI&lt;/p&gt;

&lt;p&gt;The problem gets even more interesting with agents.&lt;/p&gt;

&lt;p&gt;Traditional SaaS might ask:&lt;/p&gt;

&lt;p&gt;Can this user access FEATURE_X?&lt;/p&gt;

&lt;p&gt;An agentic application may need to ask:&lt;/p&gt;

&lt;p&gt;Can this user execute ai.generate_report?&lt;br&gt;
Does this account have 10 executions remaining?&lt;br&gt;
Can this agent invoke export.create?&lt;br&gt;
Does this plan allow this model?&lt;/p&gt;

&lt;p&gt;Now entitlement infrastructure starts intersecting with capability-based execution.&lt;/p&gt;

&lt;p&gt;That’s one reason PaywallOS also connects conceptually with some of the work I’ve been doing on OpenVerb.&lt;/p&gt;

&lt;p&gt;OpenVerb asks:&lt;/p&gt;

&lt;p&gt;Is this action structurally valid and permitted?&lt;/p&gt;

&lt;p&gt;PaywallOS asks:&lt;/p&gt;

&lt;p&gt;Does this account possess the entitlement required to access it?&lt;/p&gt;

&lt;p&gt;Those are different layers, but they can complement each other.&lt;/p&gt;

&lt;p&gt;The Bigger Idea&lt;/p&gt;

&lt;p&gt;I don’t think every SaaS developer should have to reinvent entitlement logic throughout their application.&lt;/p&gt;

&lt;p&gt;The goal behind PaywallOS is to explore a dedicated infrastructure layer for:&lt;/p&gt;

&lt;p&gt;Identity&lt;br&gt;
  +&lt;br&gt;
Payment State&lt;br&gt;
  +&lt;br&gt;
Entitlements&lt;br&gt;
  +&lt;br&gt;
Usage&lt;br&gt;
  ↓&lt;br&gt;
Access Decision&lt;/p&gt;

&lt;p&gt;Checkout is only the beginning of a paywall.&lt;/p&gt;

&lt;p&gt;The interesting engineering starts after someone pays.&lt;/p&gt;

&lt;p&gt;PaywallOS:&lt;br&gt;
&lt;a href="https://paywallos.openverb.org" rel="noopener noreferrer"&gt;https://paywallos.openverb.org&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  saas #payments #authorization #developerexperience #architecture
&lt;/h1&gt;

</description>
    </item>
    <item>
      <title>Building Elevatr: Treating Professional Experience as Structured Data</title>
      <dc:creator>Roman </dc:creator>
      <pubDate>Wed, 12 Aug 2026 14:41:03 +0000</pubDate>
      <link>https://dev.to/openverb/building-elevatr-treating-professional-experience-as-structured-data-5dh9</link>
      <guid>https://dev.to/openverb/building-elevatr-treating-professional-experience-as-structured-data-5dh9</guid>
      <description>&lt;p&gt;Most career software models employment.&lt;/p&gt;

&lt;p&gt;I became interested in modeling something different:&lt;/p&gt;

&lt;p&gt;experience itself.&lt;/p&gt;

&lt;p&gt;I built Elevatr after dealing with the complexity of documenting professional experience for licensure.&lt;/p&gt;

&lt;p&gt;A résumé might say:&lt;/p&gt;

&lt;p&gt;Company&lt;br&gt;
Role&lt;br&gt;
2024–2026&lt;/p&gt;

&lt;p&gt;But a licensing process may care about what actually happened during those years.&lt;/p&gt;

&lt;p&gt;Projects.&lt;/p&gt;

&lt;p&gt;Hours.&lt;/p&gt;

&lt;p&gt;Responsibilities.&lt;/p&gt;

&lt;p&gt;Experience categories.&lt;/p&gt;

&lt;p&gt;Supervision.&lt;/p&gt;

&lt;p&gt;Verification.&lt;/p&gt;

&lt;p&gt;That requires a different data model.&lt;/p&gt;

&lt;p&gt;Modeling Experience&lt;/p&gt;

&lt;p&gt;Conceptually, Elevatr looks more like:&lt;/p&gt;

&lt;p&gt;Professional&lt;br&gt;
   ↓&lt;br&gt;
Employer&lt;br&gt;
   ↓&lt;br&gt;
Project&lt;br&gt;
   ↓&lt;br&gt;
Experience Entry&lt;br&gt;
   ↓&lt;br&gt;
Category + Hours + Responsibility&lt;br&gt;
   ↓&lt;br&gt;
Evidence&lt;br&gt;
   ↓&lt;br&gt;
Verification&lt;/p&gt;

&lt;p&gt;Now experience becomes queryable.&lt;/p&gt;

&lt;p&gt;How many hours were accumulated in a category?&lt;/p&gt;

&lt;p&gt;Which projects demonstrate a particular competency?&lt;/p&gt;

&lt;p&gt;Which entries have been verified?&lt;/p&gt;

&lt;p&gt;Who supervised them?&lt;/p&gt;

&lt;p&gt;Which requirements remain incomplete?&lt;/p&gt;

&lt;p&gt;Multiple Platforms&lt;/p&gt;

&lt;p&gt;I’ve been building Elevatr across:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Desktop&lt;/li&gt;
&lt;li&gt;Web&lt;/li&gt;
&lt;li&gt;Mobile&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The interfaces serve different purposes.&lt;/p&gt;

&lt;p&gt;Mobile  → capture&lt;br&gt;
Desktop → dedicated workspace&lt;br&gt;
Web     → manage/access&lt;/p&gt;

&lt;p&gt;They ultimately revolve around the same professional record.&lt;/p&gt;

&lt;p&gt;I’ve also worked on verification workflows, including DocuSign integration.&lt;/p&gt;

&lt;p&gt;That’s important because there’s a major difference between:&lt;/p&gt;

&lt;p&gt;"I recorded this experience."&lt;/p&gt;

&lt;p&gt;and:&lt;/p&gt;

&lt;p&gt;"This experience was verified."&lt;/p&gt;

&lt;p&gt;Why This Gets Interesting With AI&lt;/p&gt;

&lt;p&gt;Once professional experience has structure, AI can potentially help convert natural descriptions into categorized records.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;Prepared an ALTA/NSPS Land Title Survey draft, incorporated legal and surveyor comments, updated Exhibit A and Schedule B, and revised plan notes.&lt;/p&gt;

&lt;p&gt;That can potentially be transformed into structured experience rather than disappearing inside a timesheet.&lt;/p&gt;

&lt;p&gt;The model becomes:&lt;/p&gt;

&lt;p&gt;Natural-language work description&lt;br&gt;
            ↓&lt;br&gt;
       Extraction&lt;br&gt;
            ↓&lt;br&gt;
 Project + Tasks + Categories&lt;br&gt;
            ↓&lt;br&gt;
     Experience Record&lt;br&gt;
            ↓&lt;br&gt;
        Verification&lt;/p&gt;

&lt;p&gt;That’s the technical direction I find most interesting.&lt;/p&gt;

&lt;p&gt;Elevatr isn’t intended to be another employee timesheet.&lt;/p&gt;

&lt;p&gt;A timesheet belongs primarily to the employer.&lt;/p&gt;

&lt;p&gt;Your professional experience belongs to your career.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://elevatr.dev" rel="noopener noreferrer"&gt;https://elevatr.dev&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  careerdevelopment #saas #ai #engineering #softwaredevelopment
&lt;/h1&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Building FolderCopilot: What Happens When AI Becomes a Layer Above the Filesystem?</title>
      <dc:creator>Roman </dc:creator>
      <pubDate>Wed, 12 Aug 2026 14:39:51 +0000</pubDate>
      <link>https://dev.to/openverb/building-foldercopilot-what-happens-when-ai-becomes-a-layer-above-the-filesystem-2oec</link>
      <guid>https://dev.to/openverb/building-foldercopilot-what-happens-when-ai-becomes-a-layer-above-the-filesystem-2oec</guid>
      <description>&lt;p&gt;The filesystem is one of the oldest interfaces we still use every day.&lt;/p&gt;

&lt;p&gt;We create folders.&lt;/p&gt;

&lt;p&gt;We name files.&lt;/p&gt;

&lt;p&gt;We drag them around.&lt;/p&gt;

&lt;p&gt;We download something and promise ourselves we’ll organize it later.&lt;/p&gt;

&lt;p&gt;AI changes what should be possible here.&lt;/p&gt;

&lt;p&gt;That’s the idea behind FolderCopilot, a project I’ve been building around AI-assisted file and workspace organization.&lt;/p&gt;

&lt;p&gt;The Problem&lt;/p&gt;

&lt;p&gt;Traditional filesystems understand structure:&lt;/p&gt;

&lt;p&gt;/projects&lt;br&gt;
  /client-a&lt;br&gt;
    /documents&lt;br&gt;
    /images&lt;/p&gt;

&lt;p&gt;But they don’t understand why that structure exists.&lt;/p&gt;

&lt;p&gt;A file manager knows that:&lt;/p&gt;

&lt;p&gt;proposal-final-v3.pdf&lt;/p&gt;

&lt;p&gt;is a PDF.&lt;/p&gt;

&lt;p&gt;It doesn’t inherently know that it’s a client proposal belonging to a particular project and should live alongside related contracts and correspondence.&lt;/p&gt;

&lt;p&gt;FolderCopilot explores adding that contextual layer.&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;/p&gt;

&lt;p&gt;File&lt;br&gt;
 ↓&lt;br&gt;
Metadata / Content&lt;br&gt;
 ↓&lt;br&gt;
Context&lt;br&gt;
 ↓&lt;br&gt;
Role&lt;br&gt;
 ↓&lt;br&gt;
Workspace&lt;br&gt;
 ↓&lt;br&gt;
Organization&lt;/p&gt;

&lt;p&gt;More Than One Interface&lt;/p&gt;

&lt;p&gt;I’ve been developing FolderCopilot as an ecosystem rather than a single utility.&lt;/p&gt;

&lt;p&gt;That includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Desktop application&lt;/li&gt;
&lt;li&gt;Web experience&lt;/li&gt;
&lt;li&gt;Browser-extension workflows&lt;/li&gt;
&lt;li&gt;Role-based organization&lt;/li&gt;
&lt;li&gt;Workspace templates&lt;/li&gt;
&lt;li&gt;AI-assisted organization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The desktop layer is particularly important because the local filesystem remains where a huge amount of real work happens.&lt;/p&gt;

&lt;p&gt;The browser matters because that’s where much of the mess originates.&lt;/p&gt;

&lt;p&gt;Downloads, PDFs, screenshots, research documents, and attachments constantly enter the filesystem through it.&lt;/p&gt;

&lt;p&gt;Role-Based Organization&lt;/p&gt;

&lt;p&gt;One design decision I made was not to assume everyone should organize files the same way.&lt;/p&gt;

&lt;p&gt;A developer might think in terms of:&lt;/p&gt;

&lt;p&gt;repositories&lt;br&gt;
documentation&lt;br&gt;
assets&lt;br&gt;
builds&lt;br&gt;
configuration&lt;/p&gt;

&lt;p&gt;A researcher might care about:&lt;/p&gt;

&lt;p&gt;papers&lt;br&gt;
references&lt;br&gt;
datasets&lt;br&gt;
notes&lt;br&gt;
results&lt;/p&gt;

&lt;p&gt;So FolderCopilot includes role-oriented experiences for developers, students, researchers, teachers, project managers, and others.&lt;/p&gt;

&lt;p&gt;I’ve also built workspace templates around academic work, development, clients, small businesses, research, and job searches.&lt;/p&gt;

&lt;p&gt;The bigger goal isn’t automated folder creation.&lt;/p&gt;

&lt;p&gt;It’s giving AI enough context to reason about:&lt;/p&gt;

&lt;p&gt;Where does this file belong within the way this particular person works?&lt;/p&gt;

&lt;p&gt;That’s a much more interesting problem.&lt;/p&gt;

&lt;p&gt;Where I’m Taking It&lt;/p&gt;

&lt;p&gt;I don’t think AI file management should mean giving a model uncontrolled permission to rearrange your drive.&lt;/p&gt;

&lt;p&gt;The interesting architecture is somewhere between AI reasoning and controlled filesystem operations.&lt;/p&gt;

&lt;p&gt;That’s the layer I’m continuing to explore.&lt;/p&gt;

&lt;p&gt;FolderCopilot isn’t meant to replace the filesystem.&lt;/p&gt;

&lt;p&gt;It’s an experiment in what happens when the filesystem finally gets an intelligent organizational layer.&lt;/p&gt;

&lt;p&gt;FolderCopilot:&lt;br&gt;
&lt;a href="https://foldercopilot.com" rel="noopener noreferrer"&gt;https://foldercopilot.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you’re working on local-first AI, file organization, desktop AI, or intelligent workspace tooling, I’d be interested in comparing approaches.&lt;/p&gt;

&lt;h1&gt;
  
  
  ai #productivity #desktop #filesystem #automation
&lt;/h1&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
    <item>
      <title>⚡ OpenVerb Is Becoming an Ecosystem for AI Execution</title>
      <dc:creator>Roman </dc:creator>
      <pubDate>Wed, 12 Aug 2026 14:34:21 +0000</pubDate>
      <link>https://dev.to/openverb/openverb-is-becoming-an-ecosystem-for-ai-execution-10df</link>
      <guid>https://dev.to/openverb/openverb-is-becoming-an-ecosystem-for-ai-execution-10df</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/..." class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/..." alt="Uploading image" width="800" height="400"&gt;&lt;/a&gt;OpenVerb started with a relatively simple question:&lt;/p&gt;

&lt;p&gt;How should AI actually take actions inside software?&lt;/p&gt;

&lt;p&gt;Not generate instructions for an action.&lt;/p&gt;

&lt;p&gt;Not tell the user which buttons to click.&lt;/p&gt;

&lt;p&gt;Actually execute it.&lt;/p&gt;

&lt;p&gt;That question started with the OpenVerb Protocol and has since expanded into an ecosystem of frameworks, developer packages, applications, portable workflow files, policy infrastructure, and execution tooling.&lt;/p&gt;

&lt;p&gt;Here’s what I’ve been building.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The OpenVerb Protocol&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;At the foundation is the concept of a verb.&lt;/p&gt;

&lt;p&gt;Applications expose capabilities using structured names:&lt;/p&gt;

&lt;p&gt;email.send&lt;br&gt;
crm.create_contact&lt;br&gt;
gis.add_layer&lt;br&gt;
file.move&lt;/p&gt;

&lt;p&gt;Instead of giving an agent unrestricted application access, the AI requests a known capability.&lt;/p&gt;

&lt;p&gt;The basic execution model is:&lt;/p&gt;

&lt;p&gt;Intent&lt;br&gt;
  ↓&lt;br&gt;
Verb&lt;br&gt;
  ↓&lt;br&gt;
Schema&lt;br&gt;
  ↓&lt;br&gt;
Policy&lt;br&gt;
  ↓&lt;br&gt;
Executor&lt;br&gt;
  ↓&lt;br&gt;
Receipt&lt;/p&gt;

&lt;p&gt;The AI provides intelligence.&lt;/p&gt;

&lt;p&gt;OpenVerb provides the execution contract.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The OpenVerb Framework&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A protocol isn’t particularly useful if developers can’t implement it.&lt;/p&gt;

&lt;p&gt;So I built the framework around it.&lt;/p&gt;

&lt;p&gt;The developer stack includes components such as:&lt;/p&gt;

&lt;p&gt;Runtime&lt;br&gt;
Policy&lt;br&gt;
SDK&lt;br&gt;
CLI&lt;br&gt;
Core&lt;/p&gt;

&lt;p&gt;The Runtime handles execution.&lt;/p&gt;

&lt;p&gt;The Policy Engine controls whether execution is permitted.&lt;/p&gt;

&lt;p&gt;The SDK provides programmatic access.&lt;/p&gt;

&lt;p&gt;The CLI provides developer tooling.&lt;/p&gt;

&lt;p&gt;And Core provides shared foundations across the ecosystem.&lt;/p&gt;

&lt;p&gt;An application can register capabilities while OpenVerb handles the infrastructure surrounding their execution.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Policy-Controlled Execution&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;One of the ideas I care about most in OpenVerb is separating:&lt;/p&gt;

&lt;p&gt;CAN EXECUTE&lt;/p&gt;

&lt;p&gt;from:&lt;/p&gt;

&lt;p&gt;SHOULD EXECUTE&lt;/p&gt;

&lt;p&gt;An agent might know that email.send exists.&lt;/p&gt;

&lt;p&gt;That doesn’t automatically mean it should be allowed to execute it.&lt;/p&gt;

&lt;p&gt;Policy can sit directly in the execution path:&lt;/p&gt;

&lt;p&gt;Agent&lt;br&gt;
  ↓&lt;br&gt;
Verb Request&lt;br&gt;
  ↓&lt;br&gt;
Validation&lt;br&gt;
  ↓&lt;br&gt;
Policy&lt;br&gt;
  ↓&lt;br&gt;
Execution&lt;/p&gt;

&lt;p&gt;As agents gain more autonomy, I think this distinction becomes increasingly important.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Receipts&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Execution also needs evidence.&lt;/p&gt;

&lt;p&gt;If an agent says:&lt;/p&gt;

&lt;p&gt;“I updated the CRM.”&lt;/p&gt;

&lt;p&gt;I want infrastructure capable of answering:&lt;/p&gt;

&lt;p&gt;What changed?&lt;/p&gt;

&lt;p&gt;Which verb executed?&lt;/p&gt;

&lt;p&gt;What inputs were used?&lt;/p&gt;

&lt;p&gt;Did execution succeed?&lt;/p&gt;

&lt;p&gt;What happened afterward?&lt;/p&gt;

&lt;p&gt;That’s why receipts are part of the OpenVerb architecture.&lt;/p&gt;

&lt;p&gt;Request → Execute → Result → Receipt&lt;/p&gt;

&lt;p&gt;The goal is to make AI execution more observable and auditable.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;.ov — Portable AI Workflows&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Then I started thinking about another problem.&lt;/p&gt;

&lt;p&gt;AI can generate workflows, but those workflows are frequently trapped inside the application or conversation that generated them.&lt;/p&gt;

&lt;p&gt;So I created the .ov format.&lt;/p&gt;

&lt;p&gt;The idea:&lt;/p&gt;

&lt;p&gt;Prompt&lt;br&gt;
  ↓&lt;br&gt;
Generate Workflow&lt;br&gt;
  ↓&lt;br&gt;
Save .ov&lt;br&gt;
  ↓&lt;br&gt;
Inspect&lt;br&gt;
  ↓&lt;br&gt;
Execute&lt;br&gt;
  ↓&lt;br&gt;
Share&lt;br&gt;
  ↓&lt;br&gt;
Reuse&lt;/p&gt;

&lt;p&gt;Instead of an AI workflow being temporary application state, it can become a portable artifact.&lt;/p&gt;

&lt;p&gt;A .ov workflow can describe things such as:&lt;/p&gt;

&lt;p&gt;name: client-onboarding&lt;br&gt;
steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;verb: crm.create_contact&lt;/li&gt;
&lt;li&gt;verb: document.generate&lt;/li&gt;
&lt;li&gt;verb: email.send&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now the workflow is something that can potentially be versioned, inspected, shared, and executed by compatible environments.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;OpenVerb Viewer&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once .ov became a file format, another question appeared:&lt;/p&gt;

&lt;p&gt;What opens the file?&lt;/p&gt;

&lt;p&gt;That’s what led to OpenVerb Viewer.&lt;/p&gt;

&lt;p&gt;I’ve been building Viewer as a cross-platform application for interacting with .ov files, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;workflow visualization&lt;/li&gt;
&lt;li&gt;graph views&lt;/li&gt;
&lt;li&gt;strict validation&lt;/li&gt;
&lt;li&gt;inspection&lt;/li&gt;
&lt;li&gt;offline verb simulation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One way I think about it:&lt;/p&gt;

&lt;p&gt;If .ov is the portable workflow, Viewer is the reader.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;OpenVerb Studio&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Viewer handles inspection.&lt;/p&gt;

&lt;p&gt;Studio explores creation and execution.&lt;/p&gt;

&lt;p&gt;The workflow I’m building toward is:&lt;/p&gt;

&lt;p&gt;Describe workflow&lt;br&gt;
      ↓&lt;br&gt;
AI generates .ov&lt;br&gt;
      ↓&lt;br&gt;
Inspect&lt;br&gt;
      ↓&lt;br&gt;
Provide inputs&lt;br&gt;
      ↓&lt;br&gt;
Execute&lt;br&gt;
      ↓&lt;br&gt;
Output&lt;br&gt;
      ↓&lt;br&gt;
Save&lt;/p&gt;

&lt;p&gt;That creates an interesting bridge between natural-language AI and deterministic workflow infrastructure.&lt;/p&gt;

&lt;p&gt;AI helps create the workflow.&lt;/p&gt;

&lt;p&gt;OpenVerb provides the structure around executing it.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;OpenVerb CRM&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I’ve also been building applications on top of the execution model.&lt;/p&gt;

&lt;p&gt;One example is OpenVerb CRM.&lt;/p&gt;

&lt;p&gt;A request such as:&lt;/p&gt;

&lt;p&gt;"Create a contact for Sarah Chen at Atlas Engineering."&lt;/p&gt;

&lt;p&gt;can become:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "verb": "crm.create_contact",&lt;br&gt;
  "input": {&lt;br&gt;
    "first_name": "Sarah",&lt;br&gt;
    "last_name": "Chen",&lt;br&gt;
    "company": "Atlas Engineering"&lt;br&gt;
  }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;That request can then move through validation, policy, execution, and receipt generation.&lt;/p&gt;

&lt;p&gt;The CRM isn’t just another OpenVerb package.&lt;/p&gt;

&lt;p&gt;It’s an example of what software looks like when its capabilities are designed around structured AI execution.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;OpenVerb GIS&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;My background is in GIS and land surveying, so I also started applying the architecture to geospatial software.&lt;/p&gt;

&lt;p&gt;Imagine a GIS environment exposing:&lt;/p&gt;

&lt;p&gt;gis.create_project&lt;br&gt;
gis.add_layer&lt;br&gt;
gis.query_features&lt;br&gt;
gis.transform&lt;br&gt;
gis.export&lt;/p&gt;

&lt;p&gt;Now an AI doesn’t need arbitrary control over the entire GIS interface.&lt;/p&gt;

&lt;p&gt;It requests defined geospatial capabilities.&lt;/p&gt;

&lt;p&gt;Natural Language&lt;br&gt;
      ↓&lt;br&gt;
GIS Verb&lt;br&gt;
      ↓&lt;br&gt;
Schema&lt;br&gt;
      ↓&lt;br&gt;
Policy&lt;br&gt;
      ↓&lt;br&gt;
GIS Executor&lt;br&gt;
      ↓&lt;br&gt;
Receipt&lt;/p&gt;

&lt;p&gt;That’s the idea behind OpenVerb GIS.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Broader Developer Ecosystem&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;OpenVerb has continued expanding into supporting packages and experiments.&lt;/p&gt;

&lt;p&gt;The ecosystem now includes work around:&lt;/p&gt;

&lt;p&gt;Runtime&lt;br&gt;
Policy&lt;br&gt;
SDK&lt;br&gt;
CLI&lt;br&gt;
Core&lt;br&gt;
IDE&lt;br&gt;
CRM&lt;br&gt;
GIS&lt;br&gt;
Pulse&lt;br&gt;
Stdlib&lt;br&gt;
Markdown&lt;br&gt;
.ov&lt;br&gt;
Viewer&lt;br&gt;
Studio&lt;/p&gt;

&lt;p&gt;And OpenVerb isn’t limited to TypeScript.&lt;/p&gt;

&lt;p&gt;I’ve also been building the Python side of the ecosystem, including:&lt;/p&gt;

&lt;p&gt;OpenVerb Core&lt;br&gt;
Fellowship&lt;/p&gt;

&lt;p&gt;The goal isn’t to force developers into one giant framework.&lt;/p&gt;

&lt;p&gt;It’s to make the architecture modular.&lt;/p&gt;

&lt;p&gt;Use the pieces you need.&lt;/p&gt;

&lt;p&gt;Extend the parts relevant to your application.&lt;/p&gt;

&lt;p&gt;Build new verbs.&lt;/p&gt;

&lt;p&gt;Build new executors.&lt;/p&gt;

&lt;p&gt;Build new tooling.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Toward a Universal Execution Layer&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The larger architecture I’m exploring looks something like this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;          AI / AGENT / COPILOT
                   │
                   ▼
              OPENVERB
                   │
      ┌────────────┼────────────┐
      ▼            ▼            ▼
     CRM          GIS         EMAIL
      │            │            │
    VERBS        VERBS        VERBS
      │            │            │
      └────────────┼────────────┘
                   ▼
          POLICY + EXECUTION
                   │
                   ▼
                RECEIPT
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Models can change.&lt;/p&gt;

&lt;p&gt;Agents can change.&lt;/p&gt;

&lt;p&gt;Applications can change.&lt;/p&gt;

&lt;p&gt;The execution contract remains understandable.&lt;/p&gt;

&lt;p&gt;That’s why I’ve increasingly thought about OpenVerb as a potential universal runner for AI actions.&lt;/p&gt;

&lt;p&gt;Applications provide capabilities.&lt;/p&gt;

&lt;p&gt;Models provide intelligence.&lt;/p&gt;

&lt;p&gt;OpenVerb sits between intelligence and execution.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;The Ecosystem Is Still Growing&lt;/p&gt;

&lt;p&gt;What began as the OpenVerb Protocol has expanded into:&lt;/p&gt;

&lt;p&gt;Protocol → Framework → Runtime → Policy → SDK → CLI → .ov → Viewer → Studio → CRM → GIS → IDE → Pulse → Stdlib → Python → Fellowship&lt;/p&gt;

&lt;p&gt;But all of those projects revolve around the same underlying idea:&lt;/p&gt;

&lt;p&gt;AI needs an execution layer.&lt;/p&gt;

&lt;p&gt;As AI systems move from generating answers toward performing real work, I think we’ll need infrastructure for defining capabilities, validating requests, enforcing policies, executing actions, and proving what happened.&lt;/p&gt;

&lt;p&gt;That’s what I’m building with OpenVerb.&lt;/p&gt;

&lt;p&gt;⚡ OpenVerb&lt;br&gt;
&lt;a href="https://openverb.dev" rel="noopener noreferrer"&gt;https://openverb.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📦 NPM&lt;br&gt;
&lt;a href="https://www.npmjs.com/package/openverb" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/openverb&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you’re building agents, copilots, automation systems, developer tools, or AI infrastructure, I’d love to hear what you think — and especially what you’d build on top of an open execution layer.&lt;/p&gt;

&lt;h1&gt;
  
  
  OpenVerb #AI #AIAgents #OpenSource #AIInfrastructure #DeveloperTools #Automation #TypeScript #Python
&lt;/h1&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
    <item>
      <title>⚡ OpenVerb Hackathon: Build AI That Actually Takes Action</title>
      <dc:creator>Roman </dc:creator>
      <pubDate>Wed, 12 Aug 2026 14:31:32 +0000</pubDate>
      <link>https://dev.to/openverb/openverb-hackathon-build-ai-that-actually-takes-action-4pol</link>
      <guid>https://dev.to/openverb/openverb-hackathon-build-ai-that-actually-takes-action-4pol</guid>
      <description>&lt;p&gt;AI is getting very good at telling us what to do.&lt;/p&gt;

&lt;p&gt;The next challenge is letting AI actually do it — without giving an agent uncontrolled access to everything.&lt;/p&gt;

&lt;p&gt;That’s the idea behind the OpenVerb Hackathon.&lt;/p&gt;

&lt;p&gt;I’m inviting developers, students, AI engineers, open-source contributors, founders, and anyone interested in agent infrastructure to build something using OpenVerb.&lt;/p&gt;

&lt;p&gt;What is OpenVerb?&lt;/p&gt;

&lt;p&gt;OpenVerb is an open execution layer for AI actions.&lt;/p&gt;

&lt;p&gt;Applications expose capabilities as structured verbs:&lt;/p&gt;

&lt;p&gt;email.send&lt;br&gt;
crm.create_contact&lt;br&gt;
calendar.create_event&lt;br&gt;
gis.add_layer&lt;br&gt;
file.organize&lt;/p&gt;

&lt;p&gt;Instead of letting an AI generate arbitrary commands, the execution path can be structured:&lt;/p&gt;

&lt;p&gt;Intent&lt;br&gt;
  ↓&lt;br&gt;
Verb&lt;br&gt;
  ↓&lt;br&gt;
Schema&lt;br&gt;
  ↓&lt;br&gt;
Policy&lt;br&gt;
  ↓&lt;br&gt;
Executor&lt;br&gt;
  ↓&lt;br&gt;
Receipt&lt;/p&gt;

&lt;p&gt;The model figures out what it wants to do.&lt;/p&gt;

&lt;p&gt;OpenVerb provides infrastructure around how that action is represented, validated, authorized, executed, and recorded.&lt;/p&gt;

&lt;p&gt;What Can You Build?&lt;/p&gt;

&lt;p&gt;I’m intentionally keeping the hackathon broad.&lt;/p&gt;

&lt;p&gt;🤖 Build an Agent&lt;/p&gt;

&lt;p&gt;Give an agent explicitly defined capabilities instead of unrestricted access to an application.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;research.search&lt;br&gt;
document.create&lt;br&gt;
email.send&lt;br&gt;
calendar.create_event&lt;/p&gt;

&lt;p&gt;Then use OpenVerb policies to control what the agent can actually execute.&lt;/p&gt;

&lt;p&gt;🧩 Build an Integration&lt;/p&gt;

&lt;p&gt;Connect an existing application or API to OpenVerb.&lt;/p&gt;

&lt;p&gt;Create verbs for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub&lt;/li&gt;
&lt;li&gt;Slack&lt;/li&gt;
&lt;li&gt;Notion&lt;/li&gt;
&lt;li&gt;GIS platforms&lt;/li&gt;
&lt;li&gt;CRMs&lt;/li&gt;
&lt;li&gt;developer tools&lt;/li&gt;
&lt;li&gt;productivity software&lt;/li&gt;
&lt;li&gt;hardware&lt;/li&gt;
&lt;li&gt;your own API&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The interesting question is:&lt;/p&gt;

&lt;p&gt;What capabilities should this application expose to AI?&lt;/p&gt;

&lt;p&gt;🛠️ Build Developer Tools&lt;/p&gt;

&lt;p&gt;The OpenVerb ecosystem itself creates opportunities for tooling.&lt;/p&gt;

&lt;p&gt;You could build:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a verb debugger&lt;/li&gt;
&lt;li&gt;schema generator&lt;/li&gt;
&lt;li&gt;visual policy editor&lt;/li&gt;
&lt;li&gt;receipt explorer&lt;/li&gt;
&lt;li&gt;verb registry browser&lt;/li&gt;
&lt;li&gt;workflow visualizer&lt;/li&gt;
&lt;li&gt;testing framework&lt;/li&gt;
&lt;li&gt;new executor&lt;/li&gt;
&lt;li&gt;development environment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📄 Build With .ov&lt;/p&gt;

&lt;p&gt;One of the newer parts of OpenVerb is the .ov workflow format.&lt;/p&gt;

&lt;p&gt;The idea is to make AI-generated workflows portable:&lt;/p&gt;

&lt;p&gt;Prompt&lt;br&gt;
  ↓&lt;br&gt;
Generate workflow&lt;br&gt;
  ↓&lt;br&gt;
Save .ov&lt;br&gt;
  ↓&lt;br&gt;
Inspect&lt;br&gt;
  ↓&lt;br&gt;
Execute&lt;br&gt;
  ↓&lt;br&gt;
Share&lt;br&gt;
  ↓&lt;br&gt;
Reuse&lt;/p&gt;

&lt;p&gt;Instead of an automation disappearing inside a chat session, it becomes an artifact.&lt;/p&gt;

&lt;p&gt;That means you could build a .ov generator, editor, runner, library, marketplace, converter, visualizer — or something completely different.&lt;/p&gt;

&lt;p&gt;🗺️ Build Something Unexpected&lt;/p&gt;

&lt;p&gt;This is probably what I’m most excited about.&lt;/p&gt;

&lt;p&gt;Use OpenVerb for GIS.&lt;/p&gt;

&lt;p&gt;Robotics.&lt;/p&gt;

&lt;p&gt;Music.&lt;/p&gt;

&lt;p&gt;Research.&lt;/p&gt;

&lt;p&gt;Education.&lt;/p&gt;

&lt;p&gt;Business automation.&lt;/p&gt;

&lt;p&gt;Accessibility.&lt;/p&gt;

&lt;p&gt;Developer infrastructure.&lt;/p&gt;

&lt;p&gt;Games.&lt;/p&gt;

&lt;p&gt;Scientific workflows.&lt;/p&gt;

&lt;p&gt;Land surveying.&lt;/p&gt;

&lt;p&gt;Or a use case nobody involved with OpenVerb has considered yet.&lt;/p&gt;

&lt;p&gt;A Simple Example&lt;/p&gt;

&lt;p&gt;Imagine the user says:&lt;/p&gt;

&lt;p&gt;“Add Sarah Chen from Atlas Engineering to my CRM.”&lt;/p&gt;

&lt;p&gt;The model could translate that into:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "verb": "crm.create_contact",&lt;br&gt;
  "input": {&lt;br&gt;
    "first_name": "Sarah",&lt;br&gt;
    "last_name": "Chen",&lt;br&gt;
    "company": "Atlas Engineering"&lt;br&gt;
  }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;OpenVerb can then validate the request.&lt;/p&gt;

&lt;p&gt;Policy determines whether the operation is permitted.&lt;/p&gt;

&lt;p&gt;The appropriate executor performs the action.&lt;/p&gt;

&lt;p&gt;A receipt records the result.&lt;/p&gt;

&lt;p&gt;Natural Language&lt;br&gt;
      ↓&lt;br&gt;
Structured Intent&lt;br&gt;
      ↓&lt;br&gt;
crm.create_contact&lt;br&gt;
      ↓&lt;br&gt;
Validate&lt;br&gt;
      ↓&lt;br&gt;
Policy&lt;br&gt;
      ↓&lt;br&gt;
Execute&lt;br&gt;
      ↓&lt;br&gt;
Receipt&lt;/p&gt;

&lt;p&gt;That’s the pattern I want developers to experiment with.&lt;/p&gt;

&lt;p&gt;🛡️ The Trust Problem&lt;/p&gt;

&lt;p&gt;The hackathon isn’t only about whether an agent can perform an action.&lt;/p&gt;

&lt;p&gt;I want projects to explore whether it should.&lt;/p&gt;

&lt;p&gt;Take:&lt;/p&gt;

&lt;p&gt;email.send&lt;/p&gt;

&lt;p&gt;A useful implementation should be able to think about questions like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Who is the recipient?&lt;/li&gt;
&lt;li&gt;Is this agent allowed to send email?&lt;/li&gt;
&lt;li&gt;Does this action require confirmation?&lt;/li&gt;
&lt;li&gt;Are certain domains prohibited?&lt;/li&gt;
&lt;li&gt;What information can be included?&lt;/li&gt;
&lt;li&gt;How do we prove what was actually sent?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As agents become more capable, these questions become infrastructure problems.&lt;/p&gt;

&lt;p&gt;That’s why schemas, policies, executors, and receipts are important parts of OpenVerb.&lt;/p&gt;

&lt;p&gt;What I’m Looking For&lt;/p&gt;

&lt;p&gt;The biggest project won’t necessarily win.&lt;/p&gt;

&lt;p&gt;I’d rather see three beautifully designed verbs than 100 poorly controlled tools.&lt;/p&gt;

&lt;p&gt;Projects should focus on four things:&lt;/p&gt;

&lt;p&gt;Creativity — Apply OpenVerb somewhere interesting.&lt;/p&gt;

&lt;p&gt;Execution — Make the AI actually accomplish something.&lt;/p&gt;

&lt;p&gt;Structure — Define clear capabilities and interfaces.&lt;/p&gt;

&lt;p&gt;Trust — Think about validation, policies, permissions, and receipts.&lt;/p&gt;

&lt;p&gt;The Ecosystem&lt;/p&gt;

&lt;p&gt;OpenVerb has grown beyond the original protocol.&lt;/p&gt;

&lt;p&gt;The ecosystem includes work around:&lt;/p&gt;

&lt;p&gt;Protocol&lt;br&gt;
Framework&lt;br&gt;
Runtime&lt;br&gt;
Policy&lt;br&gt;
SDK&lt;br&gt;
CLI&lt;br&gt;
Core&lt;br&gt;
.ov&lt;br&gt;
Viewer&lt;br&gt;
Studio&lt;br&gt;
CRM&lt;br&gt;
GIS&lt;br&gt;
IDE&lt;br&gt;
Pulse&lt;br&gt;
Stdlib&lt;br&gt;
Markdown&lt;br&gt;
Python Core&lt;br&gt;
Fellowship&lt;/p&gt;

&lt;p&gt;You don’t need to use everything.&lt;/p&gt;

&lt;p&gt;Choose the part that makes sense for your project.&lt;/p&gt;

&lt;p&gt;Or build something that extends the ecosystem itself.&lt;/p&gt;

&lt;p&gt;Why I’m Doing This&lt;/p&gt;

&lt;p&gt;I’ve spent a lot of time thinking about what OpenVerb could become.&lt;/p&gt;

&lt;p&gt;But that’s also a limitation.&lt;/p&gt;

&lt;p&gt;I know what I would build with it.&lt;/p&gt;

&lt;p&gt;An open protocol becomes much more interesting when someone else looks at the same primitives and says:&lt;/p&gt;

&lt;p&gt;“Wait — I could use this for something completely different.”&lt;/p&gt;

&lt;p&gt;That’s what I want this hackathon to uncover.&lt;/p&gt;

&lt;p&gt;Build. Share. Execute.&lt;/p&gt;

&lt;p&gt;Full dates, rules, registration, judging, prizes, and submission details will be announced separately.&lt;/p&gt;

&lt;p&gt;For now, start thinking about one question:&lt;/p&gt;

&lt;p&gt;What would you build if AI could reliably take action?&lt;/p&gt;

&lt;p&gt;⚡ OpenVerb&lt;br&gt;
&lt;a href="https://openverb.dev" rel="noopener noreferrer"&gt;https://openverb.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📦 NPM&lt;br&gt;
&lt;a href="https://www.npmjs.com/package/openverb" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/openverb&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you’re interested in participating, contributing, mentoring, judging, sponsoring, or partnering with the OpenVerb Hackathon, reach out.&lt;/p&gt;

&lt;p&gt;Don’t just make AI talk. Make it act.&lt;/p&gt;

&lt;h1&gt;
  
  
  OpenVerb #AI #AIAgents #Hackathon #OpenSource #AIInfrastructure #DeveloperTools #Automation #TypeScript #Pyth
&lt;/h1&gt;

</description>
    </item>
    <item>
      <title>The Missing Piece of AI Automation: Portable Workflow Files (.ov)</title>
      <dc:creator>Roman </dc:creator>
      <pubDate>Fri, 07 Aug 2026 14:13:16 +0000</pubDate>
      <link>https://dev.to/openverb/the-missing-piece-of-ai-automation-portable-workflow-files-ov-47fj</link>
      <guid>https://dev.to/openverb/the-missing-piece-of-ai-automation-portable-workflow-files-ov-47fj</guid>
      <description>&lt;p&gt;Every major AI model today can generate text.&lt;/p&gt;

&lt;p&gt;Many can call tools.&lt;/p&gt;

&lt;p&gt;Some can execute functions.&lt;/p&gt;

&lt;p&gt;But very few can produce something you truly own.&lt;/p&gt;

&lt;p&gt;That’s the problem I’ve been thinking about while building OpenVerb.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;AI conversations disappear. Workflows shouldn’t.&lt;/p&gt;

&lt;p&gt;Imagine spending an hour building an automation with an AI assistant.&lt;/p&gt;

&lt;p&gt;Tomorrow you want to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;run it again,&lt;/li&gt;
&lt;li&gt;edit it,&lt;/li&gt;
&lt;li&gt;review it,&lt;/li&gt;
&lt;li&gt;send it to a coworker,&lt;/li&gt;
&lt;li&gt;store it in Git,&lt;/li&gt;
&lt;li&gt;or execute it from another application.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most AI platforms make this surprisingly difficult because the automation is trapped inside a conversation.&lt;/p&gt;

&lt;p&gt;The workflow isn’t portable.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;What if AI generated documents instead?&lt;/p&gt;

&lt;p&gt;Instead of generating another block of text, what if AI generated a structured execution document?&lt;/p&gt;

&lt;p&gt;That’s the idea behind .ov files.&lt;/p&gt;

&lt;p&gt;A .ov file is a portable workflow that describes what should happen, not just what the AI said.&lt;/p&gt;

&lt;p&gt;Think of it as the equivalent of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PDF for documents&lt;/li&gt;
&lt;li&gt;Markdown for notes&lt;/li&gt;
&lt;li&gt;Docker for containers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;…but for AI execution.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Example&lt;/p&gt;

&lt;p&gt;version: "1.0"&lt;br&gt;
name: New Client Onboarding&lt;br&gt;
actions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;verb: crm.create_contact
params:
  name: "John Doe"
  email: "&lt;a href="mailto:john@example.com"&gt;john@example.com&lt;/a&gt;"&lt;/li&gt;
&lt;li&gt;verb: email.send
params:
  to: "&lt;a href="mailto:john@example.com"&gt;john@example.com&lt;/a&gt;"
  subject: "Welcome!"
  template: "welcome"&lt;/li&gt;
&lt;li&gt;verb: file.create_folder
params:
  path: "/Clients/John Doe"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The AI doesn’t execute these actions.&lt;/p&gt;

&lt;p&gt;It simply generates the workflow.&lt;/p&gt;

&lt;p&gt;An OpenVerb-compatible runtime can then:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;validate it,&lt;/li&gt;
&lt;li&gt;collect missing inputs,&lt;/li&gt;
&lt;li&gt;enforce policies,&lt;/li&gt;
&lt;li&gt;execute each verb,&lt;/li&gt;
&lt;li&gt;produce receipts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Why not just use function calling?&lt;/p&gt;

&lt;p&gt;Function calling is useful, but it’s usually tied to a particular model, SDK, or provider.&lt;/p&gt;

&lt;p&gt;A portable execution document separates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reasoning&lt;/li&gt;
&lt;li&gt;execution&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The model decides what should happen.&lt;/p&gt;

&lt;p&gt;The runtime decides how it happens.&lt;/p&gt;

&lt;p&gt;That makes workflows reusable across applications instead of being locked inside one AI ecosystem.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Why this matters&lt;/p&gt;

&lt;p&gt;Portable workflow files unlock possibilities that conversations can’t.&lt;/p&gt;

&lt;p&gt;Imagine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Version-controlling automations with Git.&lt;/li&gt;
&lt;li&gt;Reviewing AI-generated workflows before execution.&lt;/li&gt;
&lt;li&gt;Sharing workflows with teammates.&lt;/li&gt;
&lt;li&gt;Publishing workflow libraries.&lt;/li&gt;
&lt;li&gt;Executing the same automation across multiple applications.&lt;/li&gt;
&lt;li&gt;Building marketplaces of reusable AI workflows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once workflows become files, they become assets.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;The OpenVerb vision&lt;/p&gt;

&lt;p&gt;OpenVerb isn’t trying to build another chatbot.&lt;/p&gt;

&lt;p&gt;It’s an attempt to build an open execution layer for AI.&lt;/p&gt;

&lt;p&gt;The long-term vision is an ecosystem where applications speak a common language of verbs and portable execution documents, allowing AI-generated workflows to move freely between compatible tools instead of remaining locked inside proprietary platforms.&lt;/p&gt;

&lt;p&gt;The web became powerful because of open standards.&lt;/p&gt;

&lt;p&gt;I believe AI automation needs them too.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;I’m curious:&lt;/p&gt;

&lt;p&gt;If AI could export every automation as a portable workflow file, what would you build with it?&lt;/p&gt;

&lt;h1&gt;
  
  
  ai #automation #opensource #programming #webdev #softwareengineering #developertools #buildinpublic
&lt;/h1&gt;

</description>
    </item>
    <item>
      <title>Building Topics Archive to turn history, science, sports, and more into original music through AI-assisted publishing.

🌐 https://topicsarchive.openverb.org</title>
      <dc:creator>Roman </dc:creator>
      <pubDate>Fri, 17 Jul 2026 10:57:24 +0000</pubDate>
      <link>https://dev.to/openverb/building-topics-archive-to-turn-history-science-sports-and-more-into-original-music-through-2c2g</link>
      <guid>https://dev.to/openverb/building-topics-archive-to-turn-history-science-sports-and-more-into-original-music-through-2c2g</guid>
      <description>&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://topicsarchive.openverb.org" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;topicsarchive.openverb.org&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Built PaywallOS to make subscriptions and feature gating semantic by protecting actions instead of pages.

🌐 https://paywallos.openverb.org</title>
      <dc:creator>Roman </dc:creator>
      <pubDate>Fri, 17 Jul 2026 10:57:08 +0000</pubDate>
      <link>https://dev.to/openverb/built-paywallos-to-make-subscriptions-and-feature-gating-semantic-by-protecting-actions-instead-of-30fd</link>
      <guid>https://dev.to/openverb/built-paywallos-to-make-subscriptions-and-feature-gating-semantic-by-protecting-actions-instead-of-30fd</guid>
      <description>&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://paywallos.openverb.org" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;paywallos.openverb.org&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


</description>
    </item>
  </channel>
</rss>
