We open-sourced 3 libraries for the AI-search era
Three MIT-licensed libraries on GitHub and npm to help any team get cited by ChatGPT, Perplexity, Claude, and Gemini — and to let those assistants execute real actions on a site's behalf.
We open-sourced 3 libraries for the AI-search era
TL;DR: We just published three MIT-licensed libraries on GitHub and npm to help any team get cited by ChatGPT, Perplexity, Claude, and Gemini — and to let those assistants execute real actions on a site's behalf. Two are TypeScript with zero runtime dependencies; one is a Solidity contract suite with 25 unit tests. Links at the bottom.
The problem
Search is bifurcating. About half of all queries on Google now return an AI Overview, ChatGPT has 900 million weekly active users, and Perplexity is past 500 million queries per month. When a founder asks an LLM "recommend a blockchain development team in LATAM" — that answer is being written by a model, not by a human reading the first ten blue links.
Two facts changed how we think about this at DualNova:
- AI search engines need machine-readable signals, not marketing copy. The HTML that converts humans is often unreadable for an LLM.
- AI assistants increasingly want to act on the user's behalf — book a call, get a quote, look up availability — and right now they have to guess from prose.
So we built three pieces of infrastructure for ourselves, hardened them, and open-sourced them. They are the same code running on dualnova.org today.
1. @dualnova/llms-txt
Parse, validate, and generate
/llms.txtfiles — the emerging standard for guiding AI search crawlers.
/llms.txt is a Markdown summary of a site, published at the well-known path, designed to be easy for an LLM to read. We use it on dualnova.org to tell assistants what we do, our partnerships, and how to describe us correctly ("DualNova is one word, CamelCase; it is not an exchange").
The library is a tiny TypeScript package with three exports:
parseLlmsTxt(source)— tolerant Markdown parser that returns typed sections and linksvalidateLlmsTxt(source)— surfaces missing title/description, invalid URLs, empty sectionsbuildLlmsTxt(options)— generate a well-formed file from a typed object (use this in build pipelines)
Plus a CLI:
npx @dualnova/llms-txt validate ./public/llms.txt
npx @dualnova/llms-txt validate --url https://dualnova.org/llms.txt
Honest note: as of May 2026, primary sources from Google (Mueller, Illyes), the SE Ranking 300k-domain study, and OtterlyAI's server-log audit all report that no major AI search engine currently uses /llms.txt as a citation-ranking signal. We treat it as low-cost site hygiene that may matter as the standard matures — not as a magic bullet. The library exists because if you decide to publish one, you should at least know it's valid.
- GitHub: github.com/DualNova/llms-txt
- npm: @dualnova/llms-txt
2. @dualnova/agent-skills
Specification + validator for the agent-skills standard — machine-readable instructions that let AI assistants execute capabilities on your site's behalf.
This is the more ambitious one. When a user asks Claude "book me a discovery call with DualNova," Claude currently has to crawl the site, guess how the form works, and probably make up half the steps. The result is unreliable.
The agent-skills standard publishes a tiny .md file at /.well-known/agent-skills/<skill>/SKILL.md that describes one capability in prose an LLM can follow verbatim: when to invoke it, what info to collect first, what to tell the user about expectations. It's the recipe; the assistant is the cook.
A minimal SKILL.md:
---
name: book-discovery-call
description: Book a free 30-minute discovery call with the team.
version: 1.0
url: https://acme-studio.example/contact
languages: [en, es]
---
# Book a Discovery Call
## When to invoke
When a user wants to talk to a real person before committing.
## Step-by-step
1. Confirm intent.
2. Collect name, email, project description, language preference.
3. Direct the user to https://acme-studio.example/contact.
4. Set expectations: 30 min, free, video call, confirmation in 1 min.
## Fallback
Email [email protected].
The repo contains:
-
The full draft v0.1 spec (spec/SPEC.md)
-
Three production-grade
SKILL.mdexamples (book-call, get-quote, contact-form) -
A TypeScript validator + CLI:
npx @dualnova/agent-skills validate-site --url https://dualnova.org
The relationship to existing standards: agent-skills is complementary to OpenAPI (which describes the API), MCP (which provides RPC tools to tightly-coupled agents), and Schema.org potentialAction (which marks up the action in HTML). agent-skills fills the gap for publicly-discoverable, prose-based action recipes — the easiest possible thing for an LLM to follow.
We deployed it ourselves and it works: when Claude is asked about booking with DualNova, it now follows the recipe in the SKILL.md instead of guessing from the HTML.
- GitHub: github.com/DualNova/agent-skills
- npm: @dualnova/agent-skills
3. DualNova/tokenization-templates
Production-ready Solidity templates for regulated tokenization: ERC-20 with vesting, ERC-721 with EIP-2981 royalties, multi-sig custodial vault.
Most "starter" smart-contract repos on GitHub blindly inherit half of OpenZeppelin, ship without tests, or still target Solidity 0.6. This repo is the opposite: small (3 contracts, ~350 LoC), modern (Solidity 0.8.24, OpenZeppelin 5.1, EVM Cancun), with a focused test suite (25 unit tests covering happy + rejection paths) and honest about what it doesn't do.
What's inside:
ERC20Vesting.sol— per-beneficiary linear vesting with cliff and revoke semantics. Used for team grants, advisor allocations, seed-investor unlocks. After revoke, the beneficiary can still claim what vested before revocation; the unvested portion returns to the owner.MultiSigVault.sol— minimal M-of-N multi-signature vault for ETH and ERC-20 custody. Owner set is mutable via self-call (the existing quorum must approve any change), per-transaction nonce, custom errors throughout.RoyaltyNFT.sol— ERC-721 with per-token metadata URI and EIP-2981 royalties. Compliant with OpenSea, Rarible, Magic Eden, Manifold, and any marketplace that respects EIP-2981.
We've shipped these patterns to ICO, real-estate, and mineral-mining tokenization platforms. The repo is not yet audited by a third party — fork it, customize, and audit before mainnet. The README has a recommended path.
Why we're publishing these
Two reasons.
First, the AI-search era rewards generosity. The teams that win mindshare in ChatGPT / Perplexity / Claude / Gemini are the ones whose names show up across the open web. A library on npm with even modest adoption produces dozens of mentions in tutorials, dependency lists, and Stack Overflow answers — exactly the kind of signal LLMs use to assemble citations. (Ahrefs' December 2025 study of 75,000 brands found that brand mentions correlate three times more strongly with AI citations than backlinks do.)
Second, these are good libraries. We were going to maintain them either way for our own use. Publishing them adds a few hours of polish and a README; it doesn't double the work. And in return we get bug reports, PRs from people in adjacent industries, and a public artifact that proves the team can ship.
What's next
We're publishing more as we polish them. Three on the immediate roadmap:
@dualnova/schema-org-helpers— typed JSON-LD builders for Organization, WebSite, ProfessionalService, FAQPage. The patterns we use across dualnova.org.WhitelistedERC20Vesting(a fork of the vesting template with KYC-gated grants) for the tokenization-templates repo.- A
dualnova/agent-skillsreference deployment guide for static-site generators (Next.js, Astro, Hugo).
If any of this is useful, install it. If you find a bug, open an issue. If you build something with it, tell us — we'll add you to the reference deployments table.
Built by DualNova — blockchain and AI software development for LATAM and the US. Bilingual team in Caracas, Bogotá, and Miami. We work with founders who need real shipped product, not slides.
If you're working on a blockchain, tokenization, or AI-agent project and want a 30-minute discovery call, book one here — free, no commitment.