{"slug": "tinkuy-0-1-0-donde-los-rios-se-encuentran", "title": "Tinkuy 0.1.0 — Donde los ríos se encuentran", "summary": "Carlos Cortez released Tinkuy 0.1.0, a minimalist agent framework written in 467 lines that provides a provider-agnostic loop for LLM tool calls. The framework, published on npm as @carloscortezcloud/tinkuy-agent, includes optional budget guards and supports any router that meets its interface.", "body_md": "\n\n```\ntitle: \"Tinkuy 0.1.0 — Donde los ríos se encuentran: un agent framework de 467 líneas\"\nslug: tinkuy-0-1-0-donde-los-rios-se-encuentran\nversion: 0.1.0\ndate: 2026-07-22\ntag: v0.1.0\nnpm: https://www.npmjs.com/package/@carloscortezcloud/tinkuy-agent/v/0.1.0\ngithub: https://github.com/breakingthecloud/tinkuy/releases/tag/v0.1.0\ncover: /banners/tinkuy/tinkuy-0-1-0.png\ncoverDevTo: /banners/tinkuy/tinkuy-0-1-0-devto.png\ncoverOg: https://tinkuylabs.finoptix.dev/banners/tinkuy/tinkuy-0-1-0.png\ncommit: e534b48\nseries: tinkuy-changelog\norder: 1\n```\n\nTL;DR:El primer commit que lo inicia todo. Un loop mínimo`LLM → tool_calls → execute → feedback`\n\nen 467 líneas, provider-agnostic, con budget opcional. Publicado a npm como`@carloscortezcloud/tinkuy-agent@0.1.0`\n\n.\n\nTinkuy (quechua: *encuentro de ríos*) es donde tus tools, modelos y budgets convergen en un solo loop. En vez de un framework opinado de 10k líneas, Tinkuy propone ~200 líneas de lógica core y cero lock-in: cualquier `Router`\n\nque cumpla la interfaz funciona, cualquier `Guard`\n\n(Sayay) es opcional.\n\n`src/core/agent.ts`\n\n— el loop principal: `agent.run(prompt)`\n\n→ `AgentResult`\n\n`src/tools/index.ts`\n\n— `defineTool({ name, description, parameters, execute })`\n\n`src/state/index.ts`\n\n+ `src/types/index.ts`\n\n— tipos y estado mínimo`dist/`\n\n+ `types`\n\n), única dep runtime `yaml`\n\n, peers opcionales `@carloscortezcloud/sayay-guard`\n\ny `@carloscortezcloud/styrr-llm`\n\n`\".\"`\n\n, `\"./agent\"`\n\n, `\"./tools\"`\n\n, `\"./state\"`\n\n**Metadata:** Tag `v0.1.0`\n\n@ `e534b48`\n\n· npm `0.1.0`\n\n@ 2026-07-22T23:32:13.858Z · Tarball 22 files, 36,209 unpacked\n\n``` js\nimport { Agent, defineTool } from '@carloscortezcloud/tinkuy-agent';\nimport { StyrRouter } from '@carloscortezcloud/styrr-llm';\nimport { SayayGuard, MemoryStorage } from '@carloscortezcloud/sayay-guard';\n\nconst getWeather = defineTool({\n  name: 'get_weather',\n  description: 'Get current weather for a city',\n  parameters: { type: 'object', properties: { city: { type: 'string' } }, required: ['city'] },\n  execute: async ({ city }) => ({ temp: 22, condition: 'sunny', city }),\n});\n\nconst agent = new Agent({\n  router: new StyrRouter({ apiKey: process.env.OPENROUTER_API_KEY!, models: [{ id: 'meta-llama/llama-3.3-70b-instruct:free' }] }),\n  guard: new SayayGuard({ storage: new MemoryStorage(), budget: { dailyUsd: 5.0 } }),\n  tools: [getWeather],\n  systemPrompt: 'You are a helpful assistant. Use tools when needed.',\n});\n\nconst result = await agent.run('What is the weather in Lima?');\n// → { text, toolsUsed, iterations, latencyMs, costUsd, toolResults }\n```\n\nVer `examples/01-minimal-agent.mjs`\n\n.\n\nDefine el contrato minimalista que todo lo demás extiende: `Agent({ router, guard, tools, systemPrompt })`\n\n+ `agent.run()`\n\n+ `AgentResult`\n\n. Sin eso no hay ToolRegistry, ni memoria, ni streaming.\n\n[0.1.1 — ESM fix](//./02-v0.1.1-esm-fix.md) → `type: module`\n\npara Node 20+.\n\n*Verifica: git show v0.1.0 --stat · npm view @carloscortezcloud/tinkuy-agent@0.1.0 --json*", "url": "https://wpnews.pro/news/tinkuy-0-1-0-donde-los-rios-se-encuentran", "canonical_source": "https://dev.to/ccortezb/tinkuy-010-donde-los-rios-se-encuentran-pjb", "published_at": "2026-08-27 16:20:59+00:00", "updated_at": "2026-08-27 16:49:04.342767+00:00", "lang": "en", "topics": ["ai-agents", "developer-tools", "ai-infrastructure"], "entities": ["Carlos Cortez", "Tinkuy", "@carloscortezcloud/tinkuy-agent", "npm", "GitHub"], "alternates": {"html": "https://wpnews.pro/news/tinkuy-0-1-0-donde-los-rios-se-encuentran", "markdown": "https://wpnews.pro/news/tinkuy-0-1-0-donde-los-rios-se-encuentran.md", "text": "https://wpnews.pro/news/tinkuy-0-1-0-donde-los-rios-se-encuentran.txt", "jsonld": "https://wpnews.pro/news/tinkuy-0-1-0-donde-los-rios-se-encuentran.jsonld"}}