<?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: chovy</title>
    <description>The latest articles on DEV Community by chovy (@chovy).</description>
    <link>https://dev.to/chovy</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%2F380499%2Fdc7e67ea-7c66-4ee6-87cb-b5efea914c1c.jpeg</url>
      <title>DEV Community: chovy</title>
      <link>https://dev.to/chovy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/chovy"/>
    <language>en</language>
    <item>
      <title>MeshHook now runs your workflows on c0mpute</title>
      <dc:creator>chovy</dc:creator>
      <pubDate>Mon, 02 Nov 2026 14:54:02 +0000</pubDate>
      <link>https://dev.to/chovy/meshhook-now-runs-your-workflows-on-c0mpute-5f6f</link>
      <guid>https://dev.to/chovy/meshhook-now-runs-your-workflows-on-c0mpute-5f6f</guid>
      <description>&lt;h1&gt;
  
  
  MeshHook now runs your workflows on c0mpute
&lt;/h1&gt;

&lt;p&gt;MeshHook is our MIT-licensed, webhook-first workflow engine: you drag nodes onto a canvas, wire them up, and a webhook starts a run. As of today the steps in those runs execute on &lt;a href="https://c0mpute.com" rel="noopener noreferrer"&gt;c0mpute&lt;/a&gt;, our peer-to-peer compute network. Think n8n, except the work happens on other people's machines instead of yours.&lt;/p&gt;

&lt;p&gt;Try it at &lt;a href="https://meshhook.com" rel="noopener noreferrer"&gt;meshhook.com&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What runs where
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AI steps&lt;/strong&gt; call open models on c0mpute nodes through the Infernet open market. They are peer-only: a step never falls back to a paid hosted model. The default is qwen2.5:1.5b, then 0.5b, because several nodes serve them and a JSON-shaped prompt comes back in about 10 seconds. You can pick a bigger model per node if you can wait for it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JMESPath transforms and HTTP calls&lt;/strong&gt; are auctioned as &lt;code&gt;workflow.step&lt;/code&gt; jobs. Any c0mpute worker on 0.2.56 or later bids on them by default. The winner runs the step and returns a result MeshHook checks by hash.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Branches, loops, delays and template transforms&lt;/strong&gt; stay on the MeshHook server. They are cheap, and they need the run's state.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A real run from this afternoon: webhook, then an AI step on a node in Vienna, then a transform and an HTTP call on a c0mpute worker. 25 seconds end to end, and the run log records which worker ran each step and what it cost.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your credentials stay home
&lt;/h2&gt;

&lt;p&gt;A worker sees the whole step it runs, so MeshHook keeps an HTTP call on its own server whenever it carries anything secret: an &lt;code&gt;Authorization&lt;/code&gt; or cookie header, anything that looks like a key or token, &lt;code&gt;user:pass@&lt;/code&gt; in the URL, or a secret template. To send those steps to the network anyway, pin your own workers in the workflow settings.&lt;/p&gt;

&lt;p&gt;Workers refuse to fetch private, loopback, link-local and cloud metadata addresses. They pin the connection to the address they checked and re-check every redirect.&lt;/p&gt;

&lt;p&gt;If the network cannot do something (nobody bids, the bridge is down, or an API answers 402, which only MeshHook's x402 key can pay), the step runs on the server. The log says why.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pick per workflow
&lt;/h2&gt;

&lt;p&gt;The editor has a &lt;strong&gt;Runs on&lt;/strong&gt; menu with four options: Auto, c0mpute network, This server, or Private. Private means nothing but AI steps leaves the server, whatever the default is.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run a worker
&lt;/h2&gt;

&lt;p&gt;Every c0mpute worker on 0.2.56 or later serves workflow steps. Install one with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://c0mpute.com/install.sh | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every node you add makes everyone's workflows faster. The protocol details are in DIP 0030, in the c0mpute repo.&lt;/p&gt;

&lt;p&gt;Source: &lt;a href="https://github.com/profullstack/meshhook" rel="noopener noreferrer"&gt;github.com/profullstack/meshhook&lt;/a&gt; and &lt;a href="https://github.com/profullstack/c0mpute" rel="noopener noreferrer"&gt;github.com/profullstack/c0mpute&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;How would you use a workflow engine whose steps run on a peer network instead of a server you pay for?&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Train a business strategy model from links, on c0mpute, and publish it to Hugging Face</title>
      <dc:creator>chovy</dc:creator>
      <pubDate>Mon, 02 Nov 2026 11:08:31 +0000</pubDate>
      <link>https://dev.to/chovy/train-a-business-strategy-model-from-links-on-c0mpute-and-publish-it-to-hugging-face-5bk3</link>
      <guid>https://dev.to/chovy/train-a-business-strategy-model-from-links-on-c0mpute-and-publish-it-to-hugging-face-5bk3</guid>
      <description>&lt;p&gt;We trained saas-business-strategist-agent today: a small business and SaaS strategy model, trained on a CPU from a list of links, and published it on Hugging Face. You can train your own the same way.&lt;/p&gt;

&lt;p&gt;Model: &lt;a href="https://huggingface.co/profullstack/saas-business-strategist-agent" rel="noopener noreferrer"&gt;https://huggingface.co/profullstack/saas-business-strategist-agent&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Links in, model out
&lt;/h2&gt;

&lt;p&gt;The c0mpute example takes links and turns them into a training corpus:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;rssamplifier.com topic pages, now with comma lists: &lt;a href="https://rssamplifier.com/topics/business,saas,crypto" rel="noopener noreferrer"&gt;https://rssamplifier.com/topics/business,saas,crypto&lt;/a&gt; pulls every blog and news feed filed under any of the three (2,087 blogs).&lt;/li&gt;
&lt;li&gt;pit.world searches: &lt;a href="https://pit.world/search?q=saas,business,crypto" rel="noopener noreferrer"&gt;https://pit.world/search?q=saas,business,crypto&lt;/a&gt; runs each term on the web, news and scholar tabs and fetches every result page.&lt;/li&gt;
&lt;li&gt;Single feeds, any web page, or a pasted list of links on stdin.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No API keys. rssamplifier and pit.world both have open APIs and MCP servers, so the harvester is one Node script.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;node harvest.mjs https://rssamplifier.com/topics/business,saas,crypto &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s1"&gt;'https://pit.world/search?q=saas,business,crypto'&lt;/span&gt; &lt;span class="nt"&gt;--full&lt;/span&gt; &lt;span class="nt"&gt;--out&lt;/span&gt; data/saas-business.jsonl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Train it on c0mpute, or on your own CPU
&lt;/h2&gt;

&lt;p&gt;c0mpute 0.2.50 runs LoRA fine-tunes as a network job: workers bid, the winner trains, you watch a live progress bar, and the adapter's sha256 is checked against the receipt.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;c0mpute infernet text train &lt;span class="nt"&gt;--job&lt;/span&gt; job-saas.json &lt;span class="nt"&gt;--dataset&lt;/span&gt; data/saas-business.jsonl &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--output&lt;/span&gt; out/saas-business-strategist-agent &lt;span class="nt"&gt;--yes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or locally:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;.venv/bin/python train.py job.json &lt;span class="nt"&gt;--name&lt;/span&gt; saas-business-strategist-agent &lt;span class="nt"&gt;--dataset&lt;/span&gt; data/saas-business.jsonl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The numbers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Base model: Qwen2.5-0.5B-Instruct, a rank 8 LoRA (about 1.1M trainable parameters), bf16.&lt;/li&gt;
&lt;li&gt;Corpus: 3,615 posts (business 1,514, crypto 1,471, SaaS 630), 1,447 of them full articles.&lt;/li&gt;
&lt;li&gt;400 steps on 4 CPU threads, 2.4 GB peak RAM. Held-out perplexity went from 44.5 to 28.6.&lt;/li&gt;
&lt;li&gt;The adapter is 4.4 MB.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The first version used a 135M model. It echoed questions back. 0.5B answers on topic: asked how a 3-person SaaS should price its first plan, it said "one monthly price, one annual price at 10 times the monthly, and no other discounts" and cited three SaaS pricing guides.&lt;/p&gt;

&lt;p&gt;A sub-1B model learns the voice, not the facts. So the agent searches pit.world for each question and puts the top pages in the prompt. The facts come from search and the tune supplies the register.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two things that bit us
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;torch uses one thread per core by default. On a busy 32-core box that ran at 22 tokens a second. Four threads ran at about 330.&lt;/li&gt;
&lt;li&gt;earlyoom kills big processes on a shared box with exit code 143 and no traceback. The trainer now saves a checkpoint every 25 steps and resumes when rerun, so a kill costs minutes instead of the run.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Also shipped today
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;pit.world search results show short, readable snippets instead of page dumps, and each result has a Summarize button that runs on c0mpute (5 an hour without an account, 60 signed in). The Images, Videos, Live, News, Music and Places tabs work again on free sources.&lt;/li&gt;
&lt;li&gt;rssamplifier.com takes comma lists everywhere a topic goes: pages, the JSON API, RSS and Atom feeds, and MCP.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;The example, with the harvester, trainer, chat and Hugging Face publisher: &lt;a href="https://github.com/profullstack/c0mpute/tree/master/examples/business-strategist-agent" rel="noopener noreferrer"&gt;https://github.com/profullstack/c0mpute/tree/master/examples/business-strategist-agent&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Swap the links for your own topics and give it a name.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>huggingface</category>
      <category>saas</category>
    </item>
    <item>
      <title>Build an Agent-Ready App Starter with the Profullstack Stack Builder</title>
      <dc:creator>chovy</dc:creator>
      <pubDate>Fri, 30 Oct 2026 21:45:12 +0000</pubDate>
      <link>https://dev.to/chovy/build-an-agent-ready-app-starter-with-the-profullstack-stack-builder-502f</link>
      <guid>https://dev.to/chovy/build-an-agent-ready-app-starter-with-the-profullstack-stack-builder-502f</guid>
      <description>&lt;p&gt;Starting an app with a coding agent should not mean rebuilding the same project skeleton. This walkthrough uses Web + API + MCP to start a small status service with a browser app, an HTTP API and an MCP tool. The Stack Builder exports a source ZIP. It does not deploy a finished application.&lt;/p&gt;

&lt;p&gt;Step 1: Choose the surfaces. Open the free builder, name the project, then select Web, API and MCP. Add only modules that fit the project. The module list changes with the selected surfaces.&lt;/p&gt;

&lt;p&gt;Step 2: Export and inspect. Download the ZIP and read README.md, AGENTS.md and CLAUDE.md first. The agent instruction files match. For this selection, app/ contains the Next.js web app, src/api/server.ts contains the Hono server on Bun, src/mcp/server.ts starts the MCP server over stdio, and src/core/index.ts contains the shared status function.&lt;/p&gt;

&lt;p&gt;Step 3: Run the starter. From the project root, run bun install. Start bun run dev for the web app on port 3000 and bun run api for the standalone API on port 3001. Run bun run mcp in a separate terminal when you want to use the MCP server. The web app also mounts the API under /api. Run bun test before changing the starter.&lt;/p&gt;

&lt;p&gt;Step 4: Give your coding agent one bounded task. Ask it to read AGENTS.md and CLAUDE.md, then add one project-specific feature in src/core and expose it through the API and MCP server. Ask for a test alongside the feature, run bun test, and review the generated files before you continue.&lt;/p&gt;

&lt;p&gt;The ZIP is scaffolding. Configure secrets and external services, review the code, and test the application before deployment. Try the builder at &lt;a href="https://profullstack.com/stack/build?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=stack_builder_launch_20261030" rel="noopener noreferrer"&gt;https://profullstack.com/stack/build?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=stack_builder_launch_20261030&lt;/a&gt; and tell us which module should come next.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Ten-Second Agent Standups: Agile Feedback Every 2 to 4 Hours</title>
      <dc:creator>chovy</dc:creator>
      <pubDate>Thu, 29 Oct 2026 08:38:29 +0000</pubDate>
      <link>https://dev.to/chovy/ten-second-agent-standups-agile-feedback-every-2-to-4-hours-4bm0</link>
      <guid>https://dev.to/chovy/ten-second-agent-standups-agile-feedback-every-2-to-4-hours-4bm0</guid>
      <description>&lt;p&gt;When you run a fleet of coding agents, a daily stand-up is too slow to surface a stuck task and a live meeting is the wrong way to pull a dozen agents out of work. Give each active agent a ten-second asynchronous stand-up every 2 to 4 hours. The goal is a shorter feedback loop between a task changing state and the sysop acting on it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The contract
&lt;/h2&gt;

&lt;p&gt;Every update has three fields:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Done:&lt;/strong&gt; the last verifiable checkpoint, with a commit, preview or artifact when there is one.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Next:&lt;/strong&gt; one small, verifiable slice.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blocked:&lt;/strong&gt; the dependency and the decision or person needed, or &lt;code&gt;none&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Write it in ten seconds or less. Report a result, not a mood. If nothing changed, say &lt;code&gt;No state change. Still working on [the next slice].&lt;/code&gt; Put the update beside the task and its artifacts, where the sysop can act on it.&lt;/p&gt;

&lt;p&gt;The 2 to 4 hour clock starts at the agent's last update. An idle agent has nothing to report. A blocked agent does not wait for the clock.&lt;/p&gt;

&lt;h2&gt;
  
  
  Shorten the feedback loop
&lt;/h2&gt;

&lt;p&gt;The 2020 Scrum Guide describes the Daily Scrum as a way to inspect progress toward a Sprint Goal and adapt the plan. A fleet has a different clock. An agent can hit a missing credential, a failed build or a bad assumption hours before a daily meeting. A compact update lets the sysop reassign the work, answer a question or stop a duplicate task while there is still time in the work cycle.&lt;/p&gt;

&lt;p&gt;That is the agile part: keep the goal visible, make work small enough to verify, and change the next step when new evidence arrives. The update does not make code faster by itself. It reduces the time work sits blocked or invisible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep it asynchronous
&lt;/h2&gt;

&lt;p&gt;A stand-up every few hours becomes another interruption if it summons everyone into a call. Software engineering research has found that task switching can disrupt developer work. One analysis of 4,910 recorded tasks from 17 professional developers, paired with a survey of 132 developers, found self-interruptions were more disruptive than external interruptions and negatively affected the interrupted tasks. The stand-up should therefore be a short log entry, not a context switch.&lt;/p&gt;

&lt;p&gt;If an agent is in the middle of a safe, bounded operation, let it finish that slice and post at the checkpoint. Do not make it wait for other agents. Surface urgent blockers immediately. If a task goes four hours without a useful update, mark it stale and ask whether it should continue, split or stop.&lt;/p&gt;

&lt;h2&gt;
  
  
  Measure whether it helps
&lt;/h2&gt;

&lt;p&gt;Try the cadence for a week. Track how long blockers wait for the sysop, how many completed checkpoints get reviewed, and how many active tasks have no clear next step. If the updates change no assignment, priority or review decision, make them shorter or less frequent. The point is not to produce more status. The point is to keep the next useful action obvious.&lt;/p&gt;

&lt;p&gt;The Scrum Guide: &lt;a href="https://scrumguides.org/scrum-guide.html" rel="noopener noreferrer"&gt;https://scrumguides.org/scrum-guide.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Task interruption study: &lt;a href="https://arxiv.org/abs/1805.05508" rel="noopener noreferrer"&gt;https://arxiv.org/abs/1805.05508&lt;/a&gt;&lt;/p&gt;

</description>
      <category>agents</category>
      <category>automation</category>
      <category>productivity</category>
    </item>
    <item>
      <title>My AI agent hosts a podcast now, and you can be on it</title>
      <dc:creator>chovy</dc:creator>
      <pubDate>Mon, 26 Oct 2026 18:14:20 +0000</pubDate>
      <link>https://dev.to/chovy/my-ai-agent-hosts-a-podcast-now-and-you-can-be-on-it-13c2</link>
      <guid>https://dev.to/chovy/my-ai-agent-hosts-a-podcast-now-and-you-can-be-on-it-13c2</guid>
      <description>&lt;p&gt;Off The Record is a long-form podcast with no human host. riotcoder, the agent that ships most of my code, calls the guest on the phone and runs the interview. It works off a recorded group.call line, uses an ElevenLabs voice, and calls a clock tool every ten minutes so it wraps up on time.&lt;/p&gt;

&lt;p&gt;I was the guest on episode 1, "Running 300 Repos with AI Agents on Bare Metal": &lt;a href="https://offtherecord.podcast.pit.world/e/1" rel="noopener noreferrer"&gt;https://offtherecord.podcast.pit.world/e/1&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now it takes other guests, and it is free. If you are building something with AI agents, running a fleet, or working on the new internet, leave your number here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://offtherecord.podcast.pit.world/guest" rel="noopener noreferrer"&gt;https://offtherecord.podcast.pit.world/guest&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That is the whole signup. You give your name, a phone number, two or three sentences about what you build, and a topic if you have one. When your episode is booked your phone rings. Press 1 and the host joins. You don't need an app, a link or a studio.&lt;/p&gt;

&lt;p&gt;The host reads what you wrote before the call, and it is told that this is the only thing on the record about you, so it asks instead of guessing. The formats range from a 35 minute sprint to about two hours. A person listens to every recording before it goes out, and your number is never published.&lt;/p&gt;

&lt;p&gt;Feed: &lt;a href="https://offtherecord.podcast.pit.world/feed.xml" rel="noopener noreferrer"&gt;https://offtherecord.podcast.pit.world/feed.xml&lt;/a&gt;&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>podcast</category>
    </item>
    <item>
      <title>group.call: a party line for people and AI agents</title>
      <dc:creator>chovy</dc:creator>
      <pubDate>Mon, 26 Oct 2026 16:17:49 +0000</pubDate>
      <link>https://dev.to/chovy/groupcall-a-party-line-for-people-and-ai-agents-1n2j</link>
      <guid>https://dev.to/chovy/groupcall-a-party-line-for-people-and-ai-agents-1n2j</guid>
      <description>&lt;h1&gt;
  
  
  group.call: a party line for people and AI agents
&lt;/h1&gt;

&lt;p&gt;Today we launched &lt;a href="https://group.call.pit.world" rel="noopener noreferrer"&gt;group.call&lt;/a&gt;. Make a room, get a four-digit code, and everyone dials one number: &lt;strong&gt;510-616-9327&lt;/strong&gt; (510-616-W3BS). No app, no link, no browser tab. A landline works. So does a car.&lt;/p&gt;

&lt;p&gt;The part we built it for: &lt;strong&gt;AI agents phone in too.&lt;/strong&gt; Ask an agent into the room and it dials the same number, keys the code with touch tones, says who it is, and takes part in the call out loud. Ours are riotcoder and cha0spunk. They hear everyone, answer when they are spoken to, and stay quiet when people are talking to each other.&lt;/p&gt;

&lt;h2&gt;
  
  
  What made it hard
&lt;/h2&gt;

&lt;p&gt;Putting a language model on a phone call is easy. Making it a decent participant in a group call took most of a day of live testing with real people on the line:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;One voice at a time.&lt;/strong&gt; Agents take turns with a shared floor, wait for two seconds of silence before they speak, and stop the moment a person talks over them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;They hear the room the way the room heard it.&lt;/strong&gt; Every leg is transcribed separately, so each line has a speaker. Agents read that, not their own muddy mix of the call, so they know who asked what.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory.&lt;/strong&gt; The room's transcript is the agents' memory. If an agent drops off the call, it is dialled back in, reads what it missed, and carries on without introducing itself again.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deploys do not touch a live call.&lt;/strong&gt; Who is in which conference is saved and restored on restart, and the proxy holds webhooks while the app restarts. We shipped a dozen releases today with people on the line.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Use it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Web and phone:&lt;/strong&gt; sign in with CoinPay at &lt;a href="https://group.call.pit.world" rel="noopener noreferrer"&gt;group.call.pit.world&lt;/a&gt;. Three rooms and 300 minutes a month are free; a $5 room pass gives you 50 rooms and codes you pick.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your own agent:&lt;/strong&gt; an API, a CLI (&lt;code&gt;bunx @profullstack/groupcall&lt;/code&gt;), a TUI and an MCP server. Make rooms, see who is on the line, read the live transcript, say something into the room, or have your own agent dial in under its own name.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Desktop:&lt;/strong&gt; Mac, Windows and Linux builds, with the CLI inside.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Invites:&lt;/strong&gt; every account gets three single-use invite links. When someone signs in through yours, you both get an hour of calls.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Open source
&lt;/h2&gt;

&lt;p&gt;The phone engine is &lt;a href="https://github.com/profullstack/group-call" rel="noopener noreferrer"&gt;@profullstack/group-call&lt;/a&gt;, the same code that runs the &lt;a href="https://nixamp.com" rel="noopener noreferrer"&gt;nixamp&lt;/a&gt; party line. The site is &lt;a href="https://github.com/moshcoder/group.call" rel="noopener noreferrer"&gt;moshcoder/group.call&lt;/a&gt;. Credit codes and invites come from two new house modules, &lt;a href="https://github.com/profullstack/redeem-credits" rel="noopener noreferrer"&gt;@profullstack/redeem-credits&lt;/a&gt; and &lt;a href="https://github.com/profullstack/affiliates" rel="noopener noreferrer"&gt;@profullstack/affiliates&lt;/a&gt;, which are going onto every Profullstack site next.&lt;/p&gt;

&lt;p&gt;Call 510-616-9327 and say hi.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>llm</category>
    </item>
    <item>
      <title>Your marketing brain belongs in a git repo, so myna and OutreachGraph now read one</title>
      <dc:creator>chovy</dc:creator>
      <pubDate>Mon, 26 Oct 2026 13:40:27 +0000</pubDate>
      <link>https://dev.to/chovy/your-marketing-brain-belongs-in-a-git-repo-so-myna-and-outreachgraph-now-read-one-3ef0</link>
      <guid>https://dev.to/chovy/your-marketing-brain-belongs-in-a-git-repo-so-myna-and-outreachgraph-now-read-one-3ef0</guid>
      <description>&lt;p&gt;Your marketing brain belongs in a git repo, so myna and OutreachGraph now read one&lt;/p&gt;

&lt;p&gt;Ina Toncheva wrote a piece this week called "Your marketing team will be on GitHub" (&lt;a href="https://inatoncheva.substack.com/p/your-marketing-team-will-be-on-github" rel="noopener noreferrer"&gt;https://inatoncheva.substack.com/p/your-marketing-team-will-be-on-github&lt;/a&gt;). The idea is simple and I think she is right. Your AI setup is not a pile of documents. It is a set of files that depend on each other. Change the positioning file and every skill that writes copy changes with it. Google Drive cannot tell you which edit made last week's posts sound off. Git can, and it can undo it in one step.&lt;/p&gt;

&lt;p&gt;The team she profiles keeps a "content brain" in a private repo: what the company does, positioning, audience, brand voice, and the questions prospects keep asking on sales calls. Skills sit on top. Someone improves a skill, pushes it, and the whole team has it. They report about 20 hours a week saved.&lt;/p&gt;

&lt;p&gt;I had the same knowledge scattered across two of my own tools, so I gave both of them the same repo layout:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brain/
  knowledge/
    positioning.md   what it is, who it is for, why it is different
    voice.md         how it sounds, what it never claims
    audience.md      who we sell to
    objections.md    what prospects push back on
  skills/            myna skill files
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  myna 0.47.0: myna brain
&lt;/h2&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;myna brain init ~/brain          # scaffold from your brand.md and skills, git init
myna brain link git@github.com:you/brain.git
myna brain pull                  # the daemon also pulls hourly
myna brain push -m "tighter positioning"
myna brain show --show-prompt    # see exactly what the writer reads
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Every draft, reply and plan myna writes now reads the knowledge files after your brand file: positioning and voice first, then audience and objections, capped at 24 KB. The repo's skills fill in any skill you have not written locally. A file you edited by hand still wins. With no brain linked nothing changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  OutreachGraph 0.19.1: og brain
&lt;/h2&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;og brain list
og brain export &amp;lt;productId&amp;gt; --dir ~/brain
og brain import &amp;lt;productId&amp;gt; --dir ~/brain
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Export writes a product's positioning, voice and audience out of the database, plus an objections.md built from the replies prospects actually sent. Replies the classifier labelled as a question, a no, or a referral are grouped, with names, emails and links stripped. That is the sales-call file from Ina's post, built from replies instead of from memory. Honest status: my own workspace has no replies labelled that way yet, so my objections.md is empty today. It fills as replies come in. Import goes the other way, so an edit someone reviewed and merged in the repo becomes the voice the next cold email is written in. The same calls are on the API (GET and PUT /api/v1/products/:id/brain) and MCP. npm i -g @profullstack/outreachgraph gets you the og CLI.&lt;/p&gt;

&lt;h2&gt;
  
  
  The loop
&lt;/h2&gt;

&lt;p&gt;OutreachGraph learns what prospects object to. og brain export writes it down. You commit it, and a teammate reviews the diff. myna pulls it within the hour, and the next post answers the objection before anyone raises it. If a change makes the copy worse, git revert.&lt;/p&gt;

&lt;p&gt;Her getting-started advice is the right one: make a private repo and write one file, positioning. myna brain init does that part for you.&lt;/p&gt;

</description>
      <category>git</category>
      <category>github</category>
      <category>marketing</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Teach an agent by doing the task yourself (and why the liquid net lost)</title>
      <dc:creator>chovy</dc:creator>
      <pubDate>Mon, 26 Oct 2026 08:40:58 +0000</pubDate>
      <link>https://dev.to/chovy/teach-an-agent-by-doing-the-task-yourself-and-why-the-liquid-net-lost-1p3</link>
      <guid>https://dev.to/chovy/teach-an-agent-by-doing-the-task-yourself-and-why-the-liquid-net-lost-1p3</guid>
      <description>&lt;p&gt;We shipped "Teach an agent" in W3BS Training today. You record yourself doing a task on your desktop, review and redact the recording, and train a small model on it. Then the agent can suggest the next step, or do it with your approval.&lt;/p&gt;

&lt;p&gt;It ships in three pieces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Infernet v0.1.66&lt;/strong&gt; adds the model engine. There is a new npm package, &lt;code&gt;@infernetprotocol/liquid-agent&lt;/code&gt;, and a Python runtime with three model types: CfC and LTC (the "liquid" neural nets) plus a plain GRU baseline. &lt;code&gt;infernet model train|evaluate|predict|serve&lt;/code&gt; drives it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;c0mpute v0.2.34&lt;/strong&gt; lets another machine on the network do the training for you. Only trusted workers you list, only with &lt;code&gt;--yes&lt;/code&gt;, and the trained weights are checked against the hash in the receipt. Sessions are encrypted end to end.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;W3BS training-v0.3.0&lt;/strong&gt; adds the Teach tab and &lt;code&gt;w3bs training teach&lt;/code&gt;. Training runs locally by default. Sending it to a c0mpute worker is opt-in and shows you a preview first.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Safety is the default
&lt;/h2&gt;

&lt;p&gt;On a fresh install all five permissions are off and every policy mode is Off. Secrets are masked at capture time, before anything is written. Every external write (sending an email, posting, messaging) needs a person to approve it, in every mode, including Bounded. There is a kill switch and an audit log.&lt;/p&gt;

&lt;h2&gt;
  
  
  The honest result
&lt;/h2&gt;

&lt;p&gt;I benchmarked on synthetic traces from mock email, Reddit and LinkedIn flows. The GRU beat the liquid CfC: 0.948 vs 0.869 episode success. So GRU stays the default. Every model failed on a screen layout it had not seen, and nothing passes the closed-loop safety gate yet, so the agent refuses to switch itself on. That is the design working.&lt;/p&gt;

&lt;p&gt;The next step is real recordings of real tasks, not synthetic ones.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Start at &lt;a href="https://w3bs.org/training" rel="noopener noreferrer"&gt;https://w3bs.org/training&lt;/a&gt; and open the Teach tab. Everything is off until you turn it on.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>machinelearning</category>
      <category>python</category>
    </item>
    <item>
      <title>Our P2P inference network had 4 of 48 nodes online. Here is why, and the fix</title>
      <dc:creator>chovy</dc:creator>
      <pubDate>Thu, 22 Oct 2026 12:04:34 +0000</pubDate>
      <link>https://dev.to/chovy/our-p2p-inference-network-had-4-of-48-nodes-online-here-is-why-and-the-fix-5f4o</link>
      <guid>https://dev.to/chovy/our-p2p-inference-network-had-4-of-48-nodes-online-here-is-why-and-the-fix-5f4o</guid>
      <description>&lt;p&gt;Infernet is a peer-to-peer GPU and CPU inference network: you run one command, your machine serves open models, and clients pay per job. This morning our status page said &lt;strong&gt;4 nodes online out of 48 registered&lt;/strong&gt;, and all 4 were ours.&lt;/p&gt;

&lt;p&gt;The other 40-odd were real people: Mac minis, Windows desktops, cloud VMs, one H20 box. They installed, served jobs (one served 243 of them over 52 days), and then went quiet and never came back. So we went looking for why.&lt;/p&gt;

&lt;h2&gt;
  
  
  What was killing nodes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Self-update ended the process it was updating.&lt;/strong&gt; Under systemd, the daemon re-launched itself as a detached child and exited 0. Exit 0 ends the unit, and systemd's control-group kill takes the detached child with it. The node was gone until someone noticed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nothing restarted a crashed node.&lt;/strong&gt; &lt;code&gt;infernet start&lt;/code&gt; detached one process with no supervisor. A crash, an OOM kill or a reboot was permanent.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Installs from git thought they were always out of date.&lt;/strong&gt; The repo's &lt;code&gt;package.json&lt;/code&gt; said 0.1.45 while npm was at 0.1.62, so those nodes reinstalled every 5 minutes, forever.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nobody was told.&lt;/strong&gt; No email, no status, nothing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What changed (v0.1.62 to v0.1.64)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;infernet setup&lt;/code&gt; now installs a &lt;strong&gt;systemd user unit&lt;/strong&gt; on Linux (with linger, so it survives logout and reboot) or a &lt;strong&gt;launchd agent&lt;/strong&gt; on macOS.&lt;/li&gt;
&lt;li&gt;Without a service manager, &lt;code&gt;infernet start&lt;/code&gt; runs a small &lt;strong&gt;built-in supervisor&lt;/strong&gt; that restarts the daemon after a crash, with backoff.&lt;/li&gt;
&lt;li&gt;One exit-code contract everywhere: &lt;code&gt;0&lt;/code&gt; is a deliberate stop, &lt;code&gt;75&lt;/code&gt; means "restart me into the new version", anything else is a crash.&lt;/li&gt;
&lt;li&gt;Self-update checks that something newer actually landed before it restarts, and pauses for 6 hours if not.&lt;/li&gt;
&lt;li&gt;If your node is linked to an account and goes silent for 24 hours, you get &lt;strong&gt;one email&lt;/strong&gt; with the two commands that bring it back.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Aggregators now do something
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;aggregator&lt;/code&gt; role used to just send heartbeats. Now an aggregator dials every advertised provider each minute, checks it answers as the node it claims to be, and reports reachability and round-trip time. The status page shows, per provider, how many aggregators reached it in the last hour. We run three (Buffalo, Buffalo, Vienna) and anyone can run one on a small box:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;infernet init &lt;span class="nt"&gt;--role&lt;/span&gt; aggregator &lt;span class="nt"&gt;--name&lt;/span&gt; my-aggregator
infernet register
infernet setup &lt;span class="nt"&gt;--yes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On its first round it already caught a node advertising a port that belongs to something else.&lt;/p&gt;

&lt;h2&gt;
  
  
  See who is on the network
&lt;/h2&gt;

&lt;p&gt;Every provider on &lt;a href="https://infernetprotocol.com/status" rel="noopener noreferrer"&gt;infernetprotocol.com/status&lt;/a&gt; now links to a details page: coarse location (city, country, network; never the IP), hardware, live load, measured tokens per second, models served, job counts and success rate, recent jobs (never prompt content), and aggregator verification. Operators can hide a node from Settings.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run a node
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://infernetprotocol.com/install.sh | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It now stays up on its own. If you ran one before and it died, re-running that line brings it back on the new code.&lt;/p&gt;

&lt;p&gt;Code: &lt;a href="https://github.com/InfernetProtocol/infernet-protocol" rel="noopener noreferrer"&gt;github.com/InfernetProtocol/infernet-protocol&lt;/a&gt; (PRs #51, #53, #54).&lt;/p&gt;

</description>
      <category>networking</category>
      <category>opensource</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>CoinPay checkout: one link, any coin or PayPal, and you always know who paid</title>
      <dc:creator>chovy</dc:creator>
      <pubDate>Wed, 21 Oct 2026 14:45:46 +0000</pubDate>
      <link>https://dev.to/chovy/coinpay-checkout-one-link-any-coin-or-paypal-and-you-always-know-who-paid-48m6</link>
      <guid>https://dev.to/chovy/coinpay-checkout-one-link-any-coin-or-paypal-and-you-always-know-who-paid-48m6</guid>
      <description>&lt;h1&gt;
  
  
  CoinPay checkout: one link, any coin or PayPal, and you always know who paid
&lt;/h1&gt;

&lt;p&gt;Most crypto checkouts make you pick the chain before the buyer ever sees the page. If you picked BTC and your buyer holds USDC on Solana, they leave.&lt;/p&gt;

&lt;p&gt;CoinPay now has hosted checkout sessions. You create one with a single API call, send the buyer to the link, and they choose how to pay: every coin your business has a wallet for (BTC, ETH, SOL, USDC and USDT on several chains, DOGE, XRP and more) or PayPal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who paid, for what
&lt;/h2&gt;

&lt;p&gt;Every session requires the buyer's email and your own account id, and records which site the payment came from. When the payment confirms, your webhook gets all three back with the usual event. No more "who sent this 12 USDC?"&lt;/p&gt;

&lt;h2&gt;
  
  
  One call
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST https://coinpayportal.com/api/checkout/sessions
Authorization: Bearer &amp;lt;your business API key&amp;gt;

{ "amount": 9, "currency": "USD",
  "description": "Pro, one month",
  "customer_email": "buyer@example.com",
  "account_id": "user_123",
  "property": "example.com",
  "success_url": "https://example.com/thanks?session={CHECKOUT_SESSION_ID}",
  "cancel_url": "https://example.com/pricing" }
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You get back a &lt;code&gt;url&lt;/code&gt;. The buyer picks a coin or PayPal there, and can switch coins while the payment is still open. The SDK has it too: &lt;code&gt;createCheckoutSession()&lt;/code&gt; in &lt;code&gt;@profullstack/coinpay&lt;/code&gt; 0.25.0.&lt;/p&gt;

&lt;h2&gt;
  
  
  Already running
&lt;/h2&gt;

&lt;p&gt;We moved about 50 of our own sites to it this week: ugig, smshub, pairux, ThreatCrush, nixamp and the rest. We tested it end to end with real money on Base: the site had the purchase unlocked about 3 seconds after the transaction was mined.&lt;/p&gt;

&lt;p&gt;Docs: &lt;a href="https://coinpayportal.com/docs#checkout-sessions" rel="noopener noreferrer"&gt;https://coinpayportal.com/docs#checkout-sessions&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Come post on our forums: the tsbb network is open</title>
      <dc:creator>chovy</dc:creator>
      <pubDate>Wed, 21 Oct 2026 14:03:04 +0000</pubDate>
      <link>https://dev.to/chovy/come-post-on-our-forums-the-tsbb-network-is-open-2c52</link>
      <guid>https://dev.to/chovy/come-post-on-our-forums-the-tsbb-network-is-open-2c52</guid>
      <description>&lt;p&gt;We build a forum package called tsbb, a bulletin board written in TypeScript. It looks like the vBulletin boards a lot of us grew up on, and under the hood it is a modern web app with no build step. We run a handful of boards on it, and right now they have more topics than members. That is backwards, so this is an invitation.&lt;/p&gt;

&lt;h2&gt;
  
  
  The boards
&lt;/h2&gt;

&lt;p&gt;All of them are listed, with live topic and post counts, at &lt;strong&gt;&lt;a href="https://tsbb.dev/boards" rel="noopener noreferrer"&gt;tsbb.dev/boards&lt;/a&gt;&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://tsbb.dev" rel="noopener noreferrer"&gt;tsbb.dev&lt;/a&gt;&lt;/strong&gt;: the project's own board. Help, plugins, skins and what ships next.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://bbs.hqtui.com" rel="noopener noreferrer"&gt;bbs.hqtui.com&lt;/a&gt;&lt;/strong&gt;: terminal UI talk, for people who build terminal UIs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://c0upons.com/bbs" rel="noopener noreferrer"&gt;c0upons.com/bbs&lt;/a&gt;&lt;/strong&gt;: deals, coupon codes and freebies, posted by whoever found them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://w3bs.org/bbs" rel="noopener noreferrer"&gt;w3bs.org/bbs&lt;/a&gt;&lt;/strong&gt;: the W3BS community board.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Joining takes one field. Type your email, click the link we send, and you are in. There is no password to choose, and you can add a passkey afterwards.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a forum, in 2026
&lt;/h2&gt;

&lt;p&gt;Chat scrolls away. A thread on a board stays where you left it, has a URL, shows up in search and can be read by someone who arrives a year later. Every list on a tsbb board also has an RSS feed (each forum, each thread, each member, even a saved search), so you can follow a board from a feed reader without ever signing in.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is in tsbb
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No build step.&lt;/strong&gt; The whole thing runs as plain TypeScript on Node 24, which is what makes runtime plugins possible: drop a directory in and it loads.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plugins&lt;/strong&gt; with filters, actions and slots, so a broken plugin cannot blank a page.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No client script.&lt;/strong&gt; The board's CSP forbids inline script entirely; every page is complete as HTML.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Four ways in&lt;/strong&gt;: the web, a terminal client (&lt;code&gt;curl -fsSL https://tsbb.dev/install.sh | sh&lt;/code&gt; gets &lt;code&gt;tsbb&lt;/code&gt;, &lt;code&gt;tsbb-tui&lt;/code&gt; and &lt;code&gt;tsbb-mcp&lt;/code&gt;), a REST API and an MCP server for agents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skins&lt;/strong&gt;, from a 2000s vBulletin look to a paper skin that sits inside an editorial site.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MIT licensed&lt;/strong&gt;, one Node process and a SQLite file (or Postgres).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Run your own, and get listed
&lt;/h2&gt;

&lt;p&gt;Every tsbb board now has a &lt;code&gt;/boards&lt;/code&gt; page listing every other board in the network, so each one sends readers to the rest. If you run a board, open a pull request adding it to &lt;a href="https://github.com/profullstack/tsbb/blob/main/apps/server/src/boards.json" rel="noopener noreferrer"&gt;&lt;code&gt;apps/server/src/boards.json&lt;/code&gt;&lt;/a&gt; and it shows up on all of them. The list is also JSON at &lt;a href="https://tsbb.dev/api/v1/boards" rel="noopener noreferrer"&gt;tsbb.dev/api/v1/boards&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Source: &lt;a href="https://github.com/profullstack/tsbb" rel="noopener noreferrer"&gt;github.com/profullstack/tsbb&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Come say hello. The first reply in any thread is yours.&lt;/p&gt;

</description>
      <category>community</category>
      <category>showdev</category>
      <category>typescript</category>
    </item>
    <item>
      <title>We want 100,000 c0mpute nodes. We have fewer than 10.</title>
      <dc:creator>chovy</dc:creator>
      <pubDate>Wed, 21 Oct 2026 13:35:17 +0000</pubDate>
      <link>https://dev.to/chovy/we-want-100000-c0mpute-nodes-we-have-fewer-than-10-2bg2</link>
      <guid>https://dev.to/chovy/we-want-100000-c0mpute-nodes-we-have-fewer-than-10-2bg2</guid>
      <description>&lt;p&gt;c0mpute is the open compute network we have been building at Profullstack. Any machine can join it with one command, and once it is in, it serves AI inference, FFmpeg transcoding and storage jobs for whoever needs them. No account and no approval step, and you do not need to forward a port to join.&lt;/p&gt;

&lt;p&gt;The number we care about is 100,000 nodes. Pooled spare capacity at that size is enough to train and serve open-weight models in the open, on hardware owned by the people running it. Today the best models come from a few labs that own their own data centers. A volunteer network will not beat them next year, and I am not going to pretend it will. But it does not have to win on day one to be worth building. It has to get big enough to matter.&lt;/p&gt;

&lt;p&gt;Right now the live count is under 10 (7 this morning), and at least three of those are our own servers. That is the honest starting point, and the count is public at &lt;a href="https://c0mpute.com/nodes" rel="noopener noreferrer"&gt;c0mpute.com/nodes&lt;/a&gt;, so nobody has to take my word for it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run one
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://c0mpute.com/install.sh | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That installs &lt;code&gt;c0mpute&lt;/code&gt;, plus &lt;code&gt;infernet&lt;/code&gt; for inference and &lt;code&gt;coinpay&lt;/code&gt; for payments, and starts the worker for you: a systemd service where it can, a background daemon where it can't. Then:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;c0mpute worker status
c0mpute bench   &lt;span class="c"&gt;# one full run puts a score next to your node on the board&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It runs on Linux (x86_64 and arm64) and macOS, and on Windows inside WSL2. A GPU is detected and advertised if you have one, but it is not required. CPU nodes serve small models like qwen2.5:0.5b.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you get
&lt;/h2&gt;

&lt;p&gt;Paid inference goes through &lt;a href="https://infernetprotocol.com" rel="noopener noreferrer"&gt;Infernet&lt;/a&gt;, the inference plugin that ships with c0mpute. Clients pay through CoinPay in 16 coins or with PayPal, and you choose where your share lands with &lt;code&gt;infernet payout set &amp;lt;coin&amp;gt; &amp;lt;address&amp;gt;&lt;/code&gt;. Paid demand is early, so expect small and irregular earnings for now. I would rather say that than promise a number.&lt;/p&gt;

&lt;p&gt;You also get a spot on the board. And if you bring people, give them &lt;code&gt;https://c0mpute.com/r/&amp;lt;your-handle&amp;gt;&lt;/code&gt;: every node installed from that link shows your handle next to it. It is a scoreboard, not a payout.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I fixed while testing this
&lt;/h2&gt;

&lt;p&gt;Before writing this I ran the installer on a clean Ubuntu 24.04 container as a normal user, the way a stranger would. It took about two minutes, and it failed. The transcode step redirects &lt;code&gt;apt-get&lt;/code&gt; to &lt;code&gt;/dev/tty&lt;/code&gt; so sudo can prompt you, and with no terminal (ssh without -t, cloud-init, a container) that redirect fails before apt even runs. Because the installer runs under &lt;code&gt;set -e&lt;/code&gt; and that call was the last command in an &lt;code&gt;if&lt;/code&gt; body, the whole script exited with status 1 before it started the worker. So on exactly the kind of headless box that makes a good node, you got binaries and no node.&lt;/p&gt;

&lt;p&gt;Now the package manager only gets the terminal when there is one, and a missing ffmpeg only turns off transcode jobs instead of the install. The installer also serves as &lt;code&gt;text/x-shellscript&lt;/code&gt; now.&lt;/p&gt;

&lt;p&gt;The code is MIT and on &lt;a href="https://github.com/profullstack/c0mpute" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;. If the installer breaks on your machine, open an issue with the output and I will fix it.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>ai</category>
      <category>selfhosted</category>
      <category>distributedsystems</category>
    </item>
  </channel>
</rss>
