<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: vicentereig</title><link>https://news.ycombinator.com/user?id=vicentereig</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sun, 03 May 2026 17:30:49 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=vicentereig" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by vicentereig in "Ask HN: Share your personal website"]]></title><description><![CDATA[
<p><a href="https://vicente.services" rel="nofollow">https://vicente.services</a></p>
]]></description><pubDate>Wed, 14 Jan 2026 19:10:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=46621065</link><dc:creator>vicentereig</dc:creator><comments>https://news.ycombinator.com/item?id=46621065</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46621065</guid></item><item><title><![CDATA[New comment by vicentereig in "Building an AI agent inside a 7-year-old Rails monolith"]]></title><description><![CDATA[
<p>I appreciate your time checking it out! I've used and keep using DSPy a lot for work, and I felt I was missing a limb in my Rails-related projects. Let me know if you have any thoughts or feedback, every person has a different perspective and I always learn something new.</p>
]]></description><pubDate>Fri, 26 Dec 2025 14:14:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=46392153</link><dc:creator>vicentereig</dc:creator><comments>https://news.ycombinator.com/item?id=46392153</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46392153</guid></item><item><title><![CDATA[New comment by vicentereig in "Building an AI agent inside a 7-year-old Rails monolith"]]></title><description><![CDATA[
<p>Thanks for sharing your experience! I know there's many of us out there dabbling with LLMs and some solid businesess built on Ruby, lurking in the background without publishing much.<p>Your single-tool approach is a solid starting point. As it grows, you might hit context window limits and find the prompt getting unwieldy. Things like why is this prompt choking on 1.5MB of JSON coming from this other API/Tool?<p>When you look at systems like Codex CLI, they run at least four separate LLM subsystems: (1) the main agent prompt, (2) a summarizer model that watches the reasoning trace and produces user-facing updates like "Searching for test files...", (3) compaction and (4) a reviewer agent. Each one only sees the context it needs. Like a function with their inputs and outputs. Total tokens stay similar, but signal density per prompt goes up.<p>DSPy.rb[0] enables this pattern in Ruby: define typed Signatures for each concern, compose them as Modules/Prompting Techniques (simple predictor, CoT, ReAct, CodeAct, your own, ...), and let each maintain its own memory scope. Three articles that show this:<p>- "Ephemeral Memory Chat"[1] — the Two-Struct pattern (rich storage vs. lean prompt context) plus cost-based routing between cheap and expensive models.<p>- "Evaluator Loops"[2] — decompose generation from evaluation: a cheap model drafts, a smarter model critiques, each with its own focused signature.<p>- "Workflow Router"[3] — route requests to the right model based on complexity, only escalate to expensive LLMs when needed.<p>And since you're already using RubyLLM, the dspy-ruby_llm adapter lets you keep your provider setup while gaining the decomposition benefits.<p>Thanks for coming to my TED talk. Let me know if you need someone to bounce ideas off.<p>[0] <a href="https://github.com/vicentereig/dspy.rb" rel="nofollow">https://github.com/vicentereig/dspy.rb</a><p>[1] <a href="https://oss.vicente.services/dspy.rb/blog/articles/ephemeral-memory-chat-router/" rel="nofollow">https://oss.vicente.services/dspy.rb/blog/articles/ephemeral...</a><p>[2] <a href="https://oss.vicente.services/dspy.rb/blog/articles/evaluator_loop_in_ruby/" rel="nofollow">https://oss.vicente.services/dspy.rb/blog/articles/evaluator...</a><p>[3] <a href="https://oss.vicente.services/dspy.rb/blog/articles/workflow-routing-with-dspy.rb/" rel="nofollow">https://oss.vicente.services/dspy.rb/blog/articles/workflow-...</a><p>(edit: minor formatting)</p>
]]></description><pubDate>Fri, 26 Dec 2025 12:01:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=46391295</link><dc:creator>vicentereig</dc:creator><comments>https://news.ycombinator.com/item?id=46391295</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46391295</guid></item><item><title><![CDATA[New comment by vicentereig in "Building an AI agent inside a 7-year-old Rails monolith"]]></title><description><![CDATA[
<p>Maintainer of DSPy.rb here. The key difference is the level of abstraction:<p>RubyLLM gives you a clean API for LLM calls and tool definitions. You're still writing prompts and managing conversations directly.<p>DSPy.rb treats prompts as functions with typed signatures. You define inputs/outputs and the framework handles prompt construction, JSON parsing, and structured extraction. Two articles that might help:<p>1. "Building Your First ReAct Agent" shows how to build tool-using agents with type-safe tool definitions [0].<p>2. "Building Chat Agents with Ephemeral Memory" demonstrates context engineering patterns (what the LLM sees vs. what you store), cost-based routing between models, and memory management [1].<p>The article's approach (RubyLLM + single tool) works great for simple cases. DSPy.rb shines when you need to decompose into multiple specialized modules with different concerns. Some examples: separate signatures for classification vs. response generation, each optimized independently with separate context windows and memory to maintain.<p>Would love to learn how dspy.rb is working for you!<p>Note that RubyLLM and DSPy.rb aren't mutually exclusive (`gem 'dspy-ruby_llm'`) adapter gives us access to a TON of providers.<p>[0] <a href="https://oss.vicente.services/dspy.rb/blog/articles/react-agent-tutorial/" rel="nofollow">https://oss.vicente.services/dspy.rb/blog/articles/react-age...</a>
[1] <a href="https://oss.vicente.services/dspy.rb/blog/articles/ephemeral-memory-chat-router/" rel="nofollow">https://oss.vicente.services/dspy.rb/blog/articles/ephemeral...</a></p>
]]></description><pubDate>Fri, 26 Dec 2025 11:43:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=46391217</link><dc:creator>vicentereig</dc:creator><comments>https://news.ycombinator.com/item?id=46391217</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46391217</guid></item><item><title><![CDATA[New comment by vicentereig in "Ruby 4.0.0"]]></title><description><![CDATA[
<p>Same here. T::Struct and T::Enums at API boundaries has been the sweet spot—typed request/response models, runtime validation at ingress/egress.<p>I’ve been using this pattern for API clients[0] and CLIs[1]: define the shape once with Sorbet, get automatic JSON Schema generation when you need it.<p>[0] <a href="https://github.com/vicentereig/exa-ruby" rel="nofollow">https://github.com/vicentereig/exa-ruby</a>
[1] <a href="https://github.com/vicentereig/lf-cli" rel="nofollow">https://github.com/vicentereig/lf-cli</a></p>
]]></description><pubDate>Thu, 25 Dec 2025 09:18:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=46383234</link><dc:creator>vicentereig</dc:creator><comments>https://news.ycombinator.com/item?id=46383234</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46383234</guid></item><item><title><![CDATA[New comment by vicentereig in "Ruby 4.0.0"]]></title><description><![CDATA[
<p>I’ve been leaning hard into Sorbet runtime types for DSPy.rb[0] and finding real value. T::Struct at API boundaries, typed props for config, runtime validation where data enters the system.<p>For generating (with LLMs) API clients and CLIs it’s especially useful—define the shape once, get validation at ingress/egress for free.<p>Maybe momentum is happening in new projects rather than retrofits?
[0] <a href="https://oss.vicente.services/dspy.rb" rel="nofollow">https://oss.vicente.services/dspy.rb</a></p>
]]></description><pubDate>Thu, 25 Dec 2025 09:12:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=46383200</link><dc:creator>vicentereig</dc:creator><comments>https://news.ycombinator.com/item?id=46383200</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46383200</guid></item><item><title><![CDATA[New comment by vicentereig in "Show HN: Stepped Actions – distributed workflow orchestration for Rails"]]></title><description><![CDATA[
<p>You’re right they’re different models. The path would be Falcon + async-job-adapter-active_job. I am exploring eliminating worker processes, so jobs run as fibers in the same process, yielding during I/O.</p>
]]></description><pubDate>Sun, 21 Dec 2025 21:54:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=46348920</link><dc:creator>vicentereig</dc:creator><comments>https://news.ycombinator.com/item?id=46348920</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46348920</guid></item><item><title><![CDATA[New comment by vicentereig in "Show HN: Stepped Actions – distributed workflow orchestration for Rails"]]></title><description><![CDATA[
<p>Both model prompts as functions. BAML is a DSL - write .baml files, generate code, get validated structured outputs.<p>DSPy is a programming paradigm. I like to look at it like the MVC for the Web. You define Signatures[0]: typed contracts governing the relationship between your models and your app. Signatures model prompts as functions too, without leaving Ruby. Then compose them into modules (Predict, ChainOfThought, ReAct, your own). The framework can automatically optimize prompts based on your metrics.<p>DSPy.rb brings the DSPy paradigm's tooling (optimizers, evaluation loops) to Ruby. Comes with OpenTelemetry OOTB. It also borrows BAML's schema format for 85% token savings vs JSON Schema in complex signatures. [1]<p>Everyone is talking about prompt, context, and harness engineering -and I agree they are good ways to frame how to build workflows and agents- this is just programming really.<p>[0] <a href="https://oss.vicente.services/dspy.rb/core-concepts/signatures/" rel="nofollow">https://oss.vicente.services/dspy.rb/core-concepts/signature...</a><p>[1] <a href="https://oss.vicente.services/dspy.rb/articles/baml-schema-format/#baml-the-simple-fix" rel="nofollow">https://oss.vicente.services/dspy.rb/articles/baml-schema-fo...</a></p>
]]></description><pubDate>Fri, 19 Dec 2025 21:36:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=46331242</link><dc:creator>vicentereig</dc:creator><comments>https://news.ycombinator.com/item?id=46331242</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46331242</guid></item><item><title><![CDATA[New comment by vicentereig in "Show HN: Stepped Actions – distributed workflow orchestration for Rails"]]></title><description><![CDATA[
<p>Nice work. Thanks for sharing it! I've been thinking about using something like this for LLM agent workflows - the outbound action pattern would work well for tool calls that need to wait on external APIs.<p>I'm working on DSPy.rb [1] and this could pair nicely for multi-step reasoning chains.<p>Curious - any plans for async gem support?<p>[1] <a href="https://oss.vicente.services/dspy.rb/" rel="nofollow">https://oss.vicente.services/dspy.rb/</a></p>
]]></description><pubDate>Fri, 19 Dec 2025 16:09:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=46327348</link><dc:creator>vicentereig</dc:creator><comments>https://news.ycombinator.com/item?id=46327348</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46327348</guid></item><item><title><![CDATA[New comment by vicentereig in "Ask HN: What are you working on? (October 2025)"]]></title><description><![CDATA[
<p>I work with DSPy in Python and felt it was missing in the Ruby ecosystem.<p>So I started <a href="https://github.com/vicentereig/dspy.rb" rel="nofollow">https://github.com/vicentereig/dspy.rb</a>: a composable, type-safe version built for Rubyists who want to design and optimize prompts, and reuse LLM pipelines without leaving their language of choice. Working with DSPy::Signatures reminds me a bit of designing a db schema with an ORM.<p>It’s still early, but it already lets you define structured modules, instrument them in Langfuse, wire them up like functional components, and experiment with signature optimization. All in plain Ruby.</p>
]]></description><pubDate>Mon, 13 Oct 2025 11:37:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=45567236</link><dc:creator>vicentereig</dc:creator><comments>https://news.ycombinator.com/item?id=45567236</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45567236</guid></item><item><title><![CDATA[Exploring server-side diffing in Turbo]]></title><description><![CDATA[
<p>Article URL: <a href="https://dev.37signals.com/exploring-server-side-diffing-in-turbo/">https://dev.37signals.com/exploring-server-side-diffing-in-turbo/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=38018140">https://news.ycombinator.com/item?id=38018140</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Wed, 25 Oct 2023 20:46:09 +0000</pubDate><link>https://dev.37signals.com/exploring-server-side-diffing-in-turbo/</link><dc:creator>vicentereig</dc:creator><comments>https://news.ycombinator.com/item?id=38018140</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38018140</guid></item><item><title><![CDATA[New comment by vicentereig in "Ask HN: Anyone use an external tool to maintain contentful?"]]></title><description><![CDATA[
<p>It's a _headless_ Content Management System. <a href="https://www.contentful.com/" rel="nofollow">https://www.contentful.com/</a><p>They are useful in organizations where the people who author and publish the content aren't the same people who known how to code a website.</p>
]]></description><pubDate>Thu, 16 Mar 2023 14:34:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=35182539</link><dc:creator>vicentereig</dc:creator><comments>https://news.ycombinator.com/item?id=35182539</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35182539</guid></item><item><title><![CDATA[New comment by vicentereig in "Ask HN: Anyone use an external tool to maintain contentful?"]]></title><description><![CDATA[
<p>Hey Bryan,<p>It'd be helpful if you could provide a couple of examples of that _boilerplate content_ looks like.<p>I led the team migrating to Contentful (CF) a hefty  documentation website [1] from a homegrown CMS based on MDX. 600+ mdx articles, multiple GBs of media. This was about a year ago, so my knowledge might be outdated.<p>What worked for us was focusing our workflow as if CF were a database. I personally borrowed a bunch of concepts of how Rails' Active Record allows you, or your CI pipeline, to manage your database schema. Things like:<p>- have CF doing some gymnastics to keep track of migrations ran.<p>- supporting ephemeral CF environments so each developer could work without stepping on each others toes.<p>- promoting environments on PR merges<p>Being able to track changes in CF's schema through migrations, allowed us to build other useful stuff like:<p>- structuring articles in a way that the navigation under each section is not a pain to rebuild.<p>This might be what you mean when you talk about _boilerplate content_. Didn't find anything at the time, but it's possible that someone else has built a framework of sorts.<p>It took us a few weeks to prepare ours before working on actually migrating content. However, it supported our work along the way during the incremental and continuous migration we planned.<p>And then we were in a good spot to actually start migrating content. Transpiling the MDX to the JSON CF can ingest, uploading media assets, rewiring the UI (nextjs) to fetch contents from CF instead of the local MDX source.<p>Anyway, let me know if you want to bounce some ideas off. Contact details in my profile.<p>[1] <a href="https://tray.io/documentation/" rel="nofollow">https://tray.io/documentation/</a></p>
]]></description><pubDate>Thu, 16 Mar 2023 14:13:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=35182246</link><dc:creator>vicentereig</dc:creator><comments>https://news.ycombinator.com/item?id=35182246</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35182246</guid></item><item><title><![CDATA[New comment by vicentereig in "Ask HN: How to Manage Group Texts?"]]></title><description><![CDATA[
<p>Long story, short: I don't keep track of them.<p>I felt the need to protect myself from these sources of FOMO.<p>When it is necessary to set up a group chat, I like them short-lived. You organize an event with friends. The event is over. I delete the chat for all. Sometimes I lack the ability to do so. So I just leave, usually leaving a see-you-soon note. You know, ruthlessly prioritizing where I am spending my attention, while not acting like a d*ck.<p>I keep less than a handful of evergreen group chats with family and close friends. All of them with notifications on mute. No read, played, delivered ticks as well. If I need confirmation I'll just call them on the phone!<p>I leave notifications on for a few folks like my dad. He can get my attention anytime, anywhere. A good old phone call will definitely catch my attention too.<p>In return, I get to spend real good quality time, when they are not around, with my partner, family, close friends, and acquaintances. And hopefully they do too. :)</p>
]]></description><pubDate>Tue, 14 Jun 2022 16:26:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=31741760</link><dc:creator>vicentereig</dc:creator><comments>https://news.ycombinator.com/item?id=31741760</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=31741760</guid></item><item><title><![CDATA[New comment by vicentereig in "Commuting by bike – tips and tricks"]]></title><description><![CDATA[
<p>Totally agree, as an avid cyclist and commuter in SF. Check his commute, 60mi/6,000ft days are fun, and a hell of a workout! ;) Definitely he's wearing a kit for a reason!</p>
]]></description><pubDate>Tue, 13 Nov 2018 23:47:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=18445984</link><dc:creator>vicentereig</dc:creator><comments>https://news.ycombinator.com/item?id=18445984</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=18445984</guid></item><item><title><![CDATA[New comment by vicentereig in "Ask HN: Who is hiring? (November 2017)"]]></title><description><![CDATA[
<p>New Relic, Inc | Growth Engineering | San Francisco, CA | On-site | Full-time<p>I am building the Growth Engineering team in the Commercial Business Segment organization at New Relic, Inc. I am looking for several Software Engineers to drive acquisition, monetization, on boarding, and retention.<p>We are a disciplined and focused engineering team, measuring every single experiment and incremental changes to validate, or invalidate, our hypotheses to drive growth.<p>On the technical side of things, we work on Ruby, Elixir, and modern JavaScript (Angular and ReactJS).<p>If being in the middle of fast paced growth team in a successful SaaS company rings a bell, I would love to talk to you.<p>I am happy to answer questions here or by email! vicente@newrelic.com<p>- Sr Growth Software Eng (5+ years): <a href="http://jobs.jobvite.com/newrelic/job/osn55fwJ" rel="nofollow">http://jobs.jobvite.com/newrelic/job/osn55fwJ</a><p>- Growth Software Eng  (3+ years): <a href="http://jobs.jobvite.com/newrelic/job/otId6fwe" rel="nofollow">http://jobs.jobvite.com/newrelic/job/otId6fwe</a></p>
]]></description><pubDate>Wed, 01 Nov 2017 17:21:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=15603437</link><dc:creator>vicentereig</dc:creator><comments>https://news.ycombinator.com/item?id=15603437</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=15603437</guid></item><item><title><![CDATA[New comment by vicentereig in "Ask HN: Who is hiring? (October 2017)"]]></title><description><![CDATA[
<p>New Relic, Inc | Senior Software Engineer | San Francisco | ON SITE<p>The Growth Engineering Team is looking for a great Senior Software Engineer to join us in building customer experiences to drive acquisition, onboarding, monetization, organic/viral growth, and retention across the New Relic product suite. Please include a short cover letter, telling us why you’re interested in this position and why you think we should work together.<p>As a good fit for this role, you…<p>* Have a least 5 years of industry experience working in a team environment building production web applications with modern OO languages such as Ruby or functional languages like Elixir. You have built Single Page Apps in AngularJS, and backend services in Rails and Elixir.<p>* Possess a Growth Engineering mindset focused on continuously improving the customer experience to help drive engagement and sales. You are curious at heart and ship iterative changes and experiments with instrumentation to improve key metrics. You minimize risk introduced by these changes with an ironclad test suite.<p>* Actively participate in code and UI design reviews, weekly sprint planning meetings and team retrospectives to ensure we are all building at our best while driving key business goals.<p>* Have strong opinions, weakly held and rooted in personal experience. Can easily disregard prior held biases and opinions in the face of new information and use cases.<p>* Be part of a disciplined team that follows best Agile practices. Can build strong alliances with Product and Engineering Managers, using your knowledge to influence task prioritization.<p>* Relish the chance to mentor others and are passionate about improving software and your teammates’ skills.<p>Apply here in our Careers website! <a href="https://newrelic.com/about/careers?p=job%2Fosn55fwJ" rel="nofollow">https://newrelic.com/about/careers?p=job%2Fosn55fwJ</a></p>
]]></description><pubDate>Mon, 02 Oct 2017 17:14:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=15385752</link><dc:creator>vicentereig</dc:creator><comments>https://news.ycombinator.com/item?id=15385752</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=15385752</guid></item><item><title><![CDATA[New comment by vicentereig in "Ffffound is shutting down"]]></title><description><![CDATA[
<p>Unsplash.com seems to be gaining some momentum in comparison since Jan 2016 <a href="https://trends.google.com/trends/explore?date=all&q=FFFFOUND,unsplash" rel="nofollow">https://trends.google.com/trends/explore?date=all&q=FFFFOUND...</a></p>
]]></description><pubDate>Wed, 26 Apr 2017 18:38:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=14205733</link><dc:creator>vicentereig</dc:creator><comments>https://news.ycombinator.com/item?id=14205733</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=14205733</guid></item><item><title><![CDATA[New comment by vicentereig in "[dead]"]]></title><description><![CDATA[
<p>Hey Helena, another Spaniard here based in SF. Happy to grab a coffee and share anything that you guys may find useful in case you decide to move over to this side of the pond. Feel free to hit me up at vicente@newrelic.com<p>Cheers,
Vicente.</p>
]]></description><pubDate>Mon, 30 Jan 2017 19:37:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=13524290</link><dc:creator>vicentereig</dc:creator><comments>https://news.ycombinator.com/item?id=13524290</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=13524290</guid></item><item><title><![CDATA[New comment by vicentereig in "Ask HN: Any way to measure how much I speak?"]]></title><description><![CDATA[
<p>I'd recommend you to join a Toastmasters group! It's fun, scary, and highly rewarding!<p><a href="http://www.toastmasters.org" rel="nofollow">http://www.toastmasters.org</a></p>
]]></description><pubDate>Thu, 17 Nov 2016 20:29:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=12981188</link><dc:creator>vicentereig</dc:creator><comments>https://news.ycombinator.com/item?id=12981188</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=12981188</guid></item></channel></rss>