<?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: Software Sausage</title>
    <description>The latest articles on DEV Community by Software Sausage (softwaresausage).</description>
    <link>https://dev.to/softwaresausage</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%2Forganization%2Fprofile_image%2F14612%2F4286c1b8-d019-4b89-aeb9-f41f6d1fe358.png</url>
      <title>DEV Community: Software Sausage</title>
      <link>https://dev.to/softwaresausage</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/softwaresausage"/>
    <language>en</language>
    <item>
      <title>CRM Trial Checklist: Test Your Workflow Before You Buy</title>
      <dc:creator>Constantine Macris</dc:creator>
      <pubDate>Sat, 19 Sep 2026 22:07:42 +0000</pubDate>
      <link>https://dev.to/softwaresausage/crm-trial-checklist-test-your-workflow-before-you-buy-5e8i</link>
      <guid>https://dev.to/softwaresausage/crm-trial-checklist-test-your-workflow-before-you-buy-5e8i</guid>
      <description>&lt;p&gt;Disclosure: Software Sausage is our product. This is a free worksheet and a proposed workflow, not a measured customer result or sponsored ranking.&lt;/p&gt;

&lt;h1&gt;
  
  
  CRM Trial Checklist: Test Your Workflow Before You Buy
&lt;/h1&gt;

&lt;p&gt;Before comparing CRM feature lists, make each candidate complete the same small job: record an inquiry, assign it, follow up, hand it to delivery, and get the useful data back out. Keep the evidence—not just a star rating.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://softwaresausage.com/downloads/crm-trial-scorecard.csv" rel="noopener noreferrer"&gt;Download the free CRM trial scorecard&lt;/a&gt;. No signup. All sample people and businesses are fictional. The CSV has no macros, formulas, or automatic reminders.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with a small, safe trial
&lt;/h2&gt;

&lt;p&gt;Download the scorecard and the linked five-client spreadsheet. These are fictional records, not prospects to contact. Use a separate test workspace with no real client data. Disable automated outreach; do not connect your production inbox, billing, or live workflows.&lt;/p&gt;

&lt;p&gt;Use the same records, role assumptions, and tests for each candidate. Make a separate scorecard copy per tool. Record the product, plan, trial date, and tester alongside your evidence. Map fields deliberately: one generic CSV is not a universal one-click importer.&lt;/p&gt;

&lt;p&gt;Where supported, create five contacts and five opportunities from the five sample rows, preserving their stable IDs as reference fields. If the tool needs separate company records, create and count those separately. Add a harmless note and dummy attachment to one opportunity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run these ten checks
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Import and mapping.&lt;/strong&gt; Five intended contacts and five opportunities exist; IDs, stages, dates and relationships are correct. Record rejected rows rather than silently dropping them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Owner and next action.&lt;/strong&gt; Each open opportunity has an accountable owner, a useful next step and a due date. Count incomplete records.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Due-date review.&lt;/strong&gt; For the sample date 2026-09-19, find the two due open actions. Exclude Won and Closed. Use a date filter rather than assuming today's live dashboard matches the fixture.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Interaction history.&lt;/strong&gt; Add a harmless note and activity. A second authorized teammate can find the context without being shown which screen to open.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Sales-to-delivery handoff.&lt;/strong&gt; Move the fictional proposal to Won in your test copy. The delivery owner can locate the agreed scope and next task without copying notes between tools.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Visibility and permissions.&lt;/strong&gt; With two test accounts, verify the access boundary your business actually needs. If your trial cannot exercise the intended role, mark it UNTESTED.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Duplicates and corrections.&lt;/strong&gt; Re-import or update one test record using the documented method. Record whether it updates, duplicates, or rejects the row, then return to the five-record baseline.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Report reconciliation.&lt;/strong&gt; Independently count open opportunities and add their values. The tool's matching report must agree on stage, currency and filters.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Export and reconstruction.&lt;/strong&gt; Export the records plus available notes and activities. Inspect files outside the CRM and test import into a separate destination or worksheet. Identify anything that cannot be reconstructed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plan and operating cost.&lt;/strong&gt; Identify the plan that supports the tested workflow, any add-ons, the billing term, and who administers it. Record written evidence; a trial feature is not proof it is included in the intended plan.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Do not average away a failure
&lt;/h2&gt;

&lt;p&gt;Every row starts UNTESTED. Change it to PASS only when you complete the scenario and save evidence; use PARTIAL for a documented workaround and FAIL when the requirement is not met. A sales promise remains UNTESTED until checked.&lt;/p&gt;

&lt;p&gt;Decide which requirements are mandatory before testing. Our worksheet defaults to mandatory checks for a team scenario; a solo operator may mark shared-role checks optional before starting. A mandatory FAIL blocks the choice; a mandatory PARTIAL or UNTESTED needs resolution or an explicit, owned exception—not an invisible average.&lt;/p&gt;

&lt;p&gt;Example only: if the pipeline works but only the administrator can export the required history, that is not a clean PASS for a non-admin export requirement. Record the actual role, limitation, repair work and owner. We have not run this worksheet against vendor trials or published product scores.&lt;/p&gt;

&lt;h2&gt;
  
  
  An export button is not the same as an exit
&lt;/h2&gt;

&lt;p&gt;HubSpot documents record exports as current property values and associations, with separate routes for contact activities such as notes and calls. Source: HubSpot's record-export documentation, checked 19 September 2026.&lt;/p&gt;

&lt;p&gt;Pipedrive documents separate exports for linked activities, notes and files. Its global export also excludes files stored in Google Drive. Source: Pipedrive's export documentation, checked 19 September 2026.&lt;/p&gt;

&lt;p&gt;Those are reasons to inspect exported artifacts, not claims that either product is unsuitable. Document automation, reports, roles, integrations and attachments separately; a CSV alone does not show that the working process can be rebuilt.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources and limits
&lt;/h2&gt;

&lt;p&gt;Reviewed 19 September 2026. Vendor behavior and plan limits can change; verify them in your own account. The routines and decision rules are our proposed method, not a standard or a product certification.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://knowledge.hubspot.com/import-and-export/export-records" rel="noopener noreferrer"&gt;HubSpot: export your records&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://support.pipedrive.com/en/article/exporting-data-from-pipedrive" rel="noopener noreferrer"&gt;Pipedrive: exporting data&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Use the next step only if you need it
&lt;/h2&gt;

&lt;p&gt;Use the same checklist for managed or self-hosted candidates. For self-hosting, also require an owner for updates, backups and a tested restore. If no candidate passes, simplify the workflow or seek implementation help; do not turn unresolved tests into a recommendation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://softwaresausage.com/blog/client-follow-up-spreadsheet" rel="noopener noreferrer"&gt;Download the five-client fixture and follow-up template&lt;/a&gt;. &lt;a href="https://softwaresausage.com/guides/sample-decision-report" rel="noopener noreferrer"&gt;See a sample decision report&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Canonical article: &lt;a href="https://softwaresausage.com/blog/crm-trial-checklist" rel="noopener noreferrer"&gt;https://softwaresausage.com/blog/crm-trial-checklist&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>saas</category>
      <category>tutorial</category>
      <category>testing</category>
    </item>
    <item>
      <title>Free Client Follow-Up Spreadsheet for Small Service Businesses</title>
      <dc:creator>Constantine Macris</dc:creator>
      <pubDate>Sat, 19 Sep 2026 22:07:41 +0000</pubDate>
      <link>https://dev.to/softwaresausage/free-client-follow-up-spreadsheet-for-small-service-businesses-di8</link>
      <guid>https://dev.to/softwaresausage/free-client-follow-up-spreadsheet-for-small-service-businesses-di8</guid>
      <description>&lt;p&gt;Disclosure: Software Sausage is our product. This is a free worksheet and a proposed workflow, not a measured customer result or sponsored ranking.&lt;/p&gt;

&lt;h1&gt;
  
  
  Free Client Follow-Up Spreadsheet for Small Service Businesses
&lt;/h1&gt;

&lt;p&gt;A contact list tells you who you know. A follow-up list tells you what to do next. If you run a small agency, consultancy, or studio, start with one owner, one next action, and one due date for every open opportunity.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://softwaresausage.com/downloads/client-follow-up-template.csv" rel="noopener noreferrer"&gt;Download the free follow-up spreadsheet&lt;/a&gt;. No signup. All sample people and businesses are fictional. The CSV has no macros, formulas, or automatic reminders.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is in the download?
&lt;/h2&gt;

&lt;p&gt;The CSV opens in Excel and can be imported into Google Sheets. It contains five fictional businesses using reserved .example email addresses. It has no macros, formulas, email sending, or connection to your inbox. No signup is required.&lt;/p&gt;

&lt;p&gt;The fields are record ID, company, contact name, email, stage, owner, last contacted, next action, next-action due date, project value in USD, contact preference, and notes. Use one row per opportunity. Keep its ID stable when names or stages change. Rename the currency column if needed; do not sum mixed currencies.&lt;/p&gt;

&lt;h2&gt;
  
  
  Set it up without making it a project
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Download the CSV and import it into a new, private spreadsheet. In Excel, use Data → From Text/CSV if opening it directly changes dates or splits columns incorrectly. Choose comma as the delimiter and preserve record IDs as text.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Freeze the header and enable filters. Keep dates consistent as YYYY-MM-DD, checking that your spreadsheet recognizes due dates as dates before sorting.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use the examples to learn the routine, then delete them and enter only contacts you are authorized to retain. Replace the example dates with your own; they are not a live task list.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Choose a small set of stages: New, Conversation, Proposal, Won, Closed. Make a dropdown in your spreadsheet if helpful. The CSV itself does not enforce allowed stages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Restrict sharing to the people doing the work. Do not publish a live client sheet or put confidential proposals, passwords, payment details, or sensitive personal information in notes.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The daily check: who needs a decision today?
&lt;/h2&gt;

&lt;p&gt;Filter out Won and Closed. Find open rows with a missing owner, next action, or due date first. Those are incomplete handoffs, not reminders. Then filter the remaining active rows for next-action dates on or before today.&lt;/p&gt;

&lt;p&gt;Using 2026-09-19 as the fictional review date, the sample has three open opportunities and two actions due: Northstar Example Studio and Cedar Example Consulting. Harbor Example Design is due later. This is a worksheet example, not a customer result.&lt;/p&gt;

&lt;p&gt;After an appropriate contact, update last contacted and replace the next action and date. If the person declines or asks not to be contacted, mark the record Closed and record that preference. Do not confuse having an email address with permission for a campaign.&lt;/p&gt;

&lt;p&gt;Schedule a short calendar block to review the sheet. This file does not send notifications. If nobody will check it, changing its colors will not solve missed follow-ups.&lt;/p&gt;

&lt;h2&gt;
  
  
  Write the next action so someone else could do it
&lt;/h2&gt;

&lt;p&gt;Weak: Follow up. Better: Ask whether the revised scope answers the client's two questions. Weak: Waiting. Better: Review the agreed decision date; close the opportunity if the client has declined.&lt;/p&gt;

&lt;p&gt;For Northstar, the example action is to confirm a discovery-call time. Once the call is booked, replace that with preparing two scope questions and the new due date. A next action should describe the next useful step, not a reason to send another message.&lt;/p&gt;

&lt;p&gt;At a weekly review, examine overdue open rows, opportunities with no next step, and proposals with no agreed decision date. A project-value column is an estimate, not revenue or a probability-weighted forecast.&lt;/p&gt;

&lt;h2&gt;
  
  
  When the spreadsheet is enough—and when to stop
&lt;/h2&gt;

&lt;p&gt;Keep the sheet if the person responsible can maintain it and your team can see the next step without reconstructing the conversation from several inboxes. There is no universal contact-count threshold that makes a CRM necessary.&lt;/p&gt;

&lt;p&gt;Run a CRM trial when you need reliable reminders, multiple activity records per opportunity, controlled visibility, a shared interaction history, or a repeatable sales-to-delivery handoff that this sheet cannot provide. Do not migrate simply because a contact list looks less impressive than a dashboard.&lt;/p&gt;

&lt;p&gt;This template does not provide per-record access controls, an audit trail, deduplication, email sync, or automation. Do not treat a shared spreadsheet as a substitute for those requirements. Start with the linked trial checklist when one of them becomes necessary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources and limits
&lt;/h2&gt;

&lt;p&gt;Reviewed 19 September 2026. Vendor behavior and plan limits can change; verify them in your own account. The routines and decision rules are our proposed method, not a standard or a product certification.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://support.microsoft.com/en-us/excel/get-started/import-or-export-text-txt-or-csv-files" rel="noopener noreferrer"&gt;Microsoft: import or export CSV files&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://support.google.com/docs/answer/9331167?hl=en" rel="noopener noreferrer"&gt;Google: working with Excel and Sheets&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Use the next step only if you need it
&lt;/h2&gt;

&lt;p&gt;Use the free sheet first. If it exposes a real software decision, our sample decision report shows what the optional paid analysis adds. You do not need to buy a report to download or use this worksheet.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://softwaresausage.com/blog/crm-trial-checklist" rel="noopener noreferrer"&gt;Test a CRM with the same fictional clients&lt;/a&gt;. &lt;a href="https://softwaresausage.com/guides/sample-decision-report" rel="noopener noreferrer"&gt;See a sample decision report&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Canonical article: &lt;a href="https://softwaresausage.com/blog/client-follow-up-spreadsheet" rel="noopener noreferrer"&gt;https://softwaresausage.com/blog/client-follow-up-spreadsheet&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>smallbusiness</category>
      <category>tutorial</category>
      <category>management</category>
    </item>
    <item>
      <title>You probably do not need 264 AI agents</title>
      <dc:creator>Constantine Macris</dc:creator>
      <pubDate>Thu, 10 Sep 2026 03:44:56 +0000</pubDate>
      <link>https://dev.to/softwaresausage/you-probably-do-not-need-264-ai-agents-1e9n</link>
      <guid>https://dev.to/softwaresausage/you-probably-do-not-need-264-ai-agents-1e9n</guid>
      <description>&lt;p&gt;Disclosure: Software Sausage is our product. Agency Agents did not sponsor, review, or endorse this article. AI tools helped draft and edit it; the evidence boundary is stated below.&lt;/p&gt;

&lt;h1&gt;
  
  
  You probably do not need 264 AI agents. You need bounded roles and a gate
&lt;/h1&gt;

&lt;p&gt;The &lt;a href="https://github.com/msitarzewski/agency-agents" rel="noopener noreferrer"&gt;Agency Agents&lt;/a&gt; repository is difficult to ignore: 264 specialized agent definitions, broad coding-harness support, and—when I reviewed it on September 9, 2026—roughly 151,000 GitHub stars.&lt;/p&gt;

&lt;p&gt;The tempting conclusion is that a larger virtual team produces better work.&lt;/p&gt;

&lt;p&gt;The repository does not establish that. What it does provide is a useful, MIT-licensed role library and a competent installer. The value comes from selecting a few narrow roles and making their outputs pass real checks.&lt;/p&gt;

&lt;p&gt;This is a source review at commit &lt;code&gt;6d29a9b&lt;/code&gt;, not a benchmark. I inspected the role files, installer, converter, contribution rules, workflow example, and current GitHub checks. I did not evaluate every integration or the desktop app.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it gets right
&lt;/h2&gt;

&lt;p&gt;Agent definitions are not one-line personas. They name deliverables, workflows, constraints, and success metrics. The project converts them for Claude Code, Codex, Cursor, Gemini CLI, OpenCode, Qwen Code, Aider, and other harnesses.&lt;/p&gt;

&lt;p&gt;More importantly, the installer lets you select one role or division, show a dry run, and target an explicit path. Agency Agents itself warns that OpenCode currently registers only about 119 agents and recommends installing a subset.&lt;/p&gt;

&lt;p&gt;The project's &lt;a href="https://github.com/msitarzewski/agency-agents/blob/main/CONTRIBUTING.md" rel="noopener noreferrer"&gt;contribution guide&lt;/a&gt; contains the best design rule: a new agent needs a narrow specialization, distinct behavior, concrete deliverables, measurable success, and real testing. Near-duplicate re-skins are rejected.&lt;/p&gt;

&lt;p&gt;That rule should apply to the workflow too. If two roles produce the same artifact, if nobody consumes an output, or if success cannot be checked, remove the role.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does not prove
&lt;/h2&gt;

&lt;p&gt;The README's “never sleep” and “always deliver” language is marketing. Prompts still fail, time out, overrun context, and agree on the same plausible mistake.&lt;/p&gt;

&lt;p&gt;A role prompt also does not create process isolation. Giving a “reviewer” the same credentials and write access as the implementer makes the label cosmetic.&lt;/p&gt;

&lt;p&gt;The repository's &lt;a href="https://github.com/msitarzewski/agency-agents/blob/main/examples/workflow-startup-mvp.md" rel="noopener noreferrer"&gt;seven-agent startup example&lt;/a&gt; recommends passing full outputs between roles. Its newer &lt;a href="https://github.com/msitarzewski/agency-agents/blob/main/engineering/engineering-multi-agent-systems-architect.md" rel="noopener noreferrer"&gt;Multi-Agent Systems Architect&lt;/a&gt; warns about context growth and recommends summaries and structured state. Use the second rule.&lt;/p&gt;

&lt;p&gt;Green installer and manifest checks show that the repository is maintained and internally consistent. They do not show that seven agents outperform one capable agent on correctness, elapsed time, or cost.&lt;/p&gt;

&lt;h2&gt;
  
  
  Recipe one: one writer, two read-only reviewers
&lt;/h2&gt;

&lt;p&gt;For a software change, three responsibilities are enough:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The &lt;a href="https://github.com/msitarzewski/agency-agents/blob/main/engineering/engineering-minimal-change-engineer.md" rel="noopener noreferrer"&gt;Minimal Change Engineer&lt;/a&gt; receives one outcome, explicit exclusions, allowed files, and an acceptance command. It can write code but cannot deploy.&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://github.com/msitarzewski/agency-agents/blob/main/engineering/engineering-code-reviewer.md" rel="noopener noreferrer"&gt;Code Reviewer&lt;/a&gt; receives the task, diff, and check log with read-only access. It separates blockers, suggestions, and nits.&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://github.com/msitarzewski/agency-agents/blob/main/security/security-ai-generated-code-auditor.md" rel="noopener noreferrer"&gt;AI-Generated Code Security Auditor&lt;/a&gt; receives the same evidence plus the relevant trust boundaries. It uses local, read-only checks and records evidence for each finding.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The implementer gets at most two corrections. Then a person resolves the findings, reruns the repository checks, captures fresh runtime proof, and decides whether to ship.&lt;/p&gt;

&lt;p&gt;The free &lt;a href="https://softwaresausage.com/ai/recipes/three-agent-code-change-gate?source=community&amp;amp;utm_campaign=dev_agency_agents" rel="noopener noreferrer"&gt;three-agent code-change kit&lt;/a&gt; includes the handoff ledger and verifier.&lt;/p&gt;

&lt;h2&gt;
  
  
  Recipe two: make multi-agent earn its keep
&lt;/h2&gt;

&lt;p&gt;If the question is whether orchestration helps, compare it with one agent:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Freeze a resettable task and choose correctness, cost, latency, intervention, safety, and privacy thresholds before the run.&lt;/li&gt;
&lt;li&gt;Run one agent with the model, budget, tools, permissions, and fixture recorded.&lt;/li&gt;
&lt;li&gt;Let the architect choose no more than three challenger roles. Define each input, output, permission, fallback, one human gate, and a two-retry cap.&lt;/li&gt;
&lt;li&gt;Run the challenger on an identical fresh fixture. Pass agreed artifacts and summaries, not accumulated chat transcripts.&lt;/li&gt;
&lt;li&gt;Apply the same deterministic verifier and blind rubric to both results.&lt;/li&gt;
&lt;li&gt;Keep orchestration only when it clears the predeclared threshold. Retain failed and stopped runs.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The free &lt;a href="https://softwaresausage.com/ai/recipes/multi-agent-experiment-gate?source=community&amp;amp;utm_campaign=dev_agency_agents" rel="noopener noreferrer"&gt;multi-agent experiment kit&lt;/a&gt; provides the comparison manifest.&lt;/p&gt;

&lt;h2&gt;
  
  
  The useful default
&lt;/h2&gt;

&lt;p&gt;Start with one agent. Add one role only when it owns a distinct artifact with a consumer and an acceptance check. Keep permissions separate. Cap retries. Leave the human at the irreversible boundary.&lt;/p&gt;

&lt;p&gt;Agency Agents makes roles easy to install. The harder—and more valuable—work is proving which ones deserve to stay.&lt;/p&gt;

&lt;p&gt;The complete source review and both pullable kits are at &lt;a href="https://softwaresausage.com/blog/agency-agents-multi-agent-workflow?source=community&amp;amp;utm_campaign=dev_agency_agents" rel="noopener noreferrer"&gt;Software Sausage&lt;/a&gt;. The public &lt;a href="https://softwaresausage.com/mcp?source=community&amp;amp;utm_campaign=dev_agency_agents" rel="noopener noreferrer"&gt;Software Sausage MCP endpoint&lt;/a&gt; can also find these recipes and return their complete run ledgers inside a compatible agent client.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Zapier vs. Activepieces vs. n8n: count the run, operator, and exit</title>
      <dc:creator>Constantine Macris</dc:creator>
      <pubDate>Mon, 07 Sep 2026 17:51:14 +0000</pubDate>
      <link>https://dev.to/softwaresausage/zapier-vs-activepieces-vs-n8n-count-the-run-operator-and-exit-1o3n</link>
      <guid>https://dev.to/softwaresausage/zapier-vs-activepieces-vs-n8n-count-the-run-operator-and-exit-1o3n</guid>
      <description>&lt;p&gt;Disclosure: Software Sausage is our product. This is a complete free decision&lt;br&gt;
workflow, not a sponsored ranking. Vendor payments and affiliate availability&lt;br&gt;
do not affect the comparison.&lt;/p&gt;

&lt;p&gt;Zapier, Activepieces, and n8n can all move data between applications. They do&lt;br&gt;
not sell the same unit, use the same license, or leave the same operational work&lt;br&gt;
with the customer.&lt;/p&gt;

&lt;p&gt;The useful question is not “which has the most connectors?” It is: &lt;strong&gt;which&lt;br&gt;
operating model fits one real workflow, and can the team recover or reconstruct&lt;br&gt;
it when something fails?&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Start with the billing unit
&lt;/h2&gt;

&lt;p&gt;Pricing pages reviewed September 3, 2026 describe three different units:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Zapier&lt;/strong&gt; counts successful tasks. Standard actions normally cost one task;
some actions and AI model tiers cost more. Its Free plan includes 100 tasks a
month, and Professional starts at $19.99 a month billed annually.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Activepieces&lt;/strong&gt; uses one base credit for one full flow run. Its current Free
plan includes 100 credits a day; Plus is $16 a month billed annually with
10,000 monthly credits. AI actions consume additional credits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;n8n&lt;/strong&gt; counts one complete workflow execution regardless of the number of
steps. Cloud Starter is €20 a month billed annually for 2,500 executions;
Pro is €50 for 10,000.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A workflow with one trigger and five actions may consume five Zapier tasks but&lt;br&gt;
one n8n execution or one base Activepieces flow-run credit. That sentence is&lt;br&gt;
still not a quote: branches, retries, AI actions, overages, and platform-specific&lt;br&gt;
rules can change the result.&lt;/p&gt;

&lt;p&gt;Use a run log from the workflow you actually plan to operate:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;monthly cost = platform quote
             + overage units
             + infrastructure
             + monthly operator hours × labor rate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Be exact about open source
&lt;/h2&gt;

&lt;p&gt;Activepieces documents its core under the OSI-approved MIT license and its&lt;br&gt;
enterprise features under a commercial license. The current Community Edition&lt;br&gt;
does not include the whole team and governance layer, so check projects, API,&lt;br&gt;
roles, audit logs, secret managers, and release features against the edition you&lt;br&gt;
will deploy.&lt;/p&gt;

&lt;p&gt;n8n is self-hostable and makes its source visible, but n8n itself says the&lt;br&gt;
Sustainable Use License is fair-code and &lt;strong&gt;not an open-source license&lt;/strong&gt;. It&lt;br&gt;
permits internal business use and consulting, while restricting products or&lt;br&gt;
services whose value substantially derives from n8n. If the intended use is&lt;br&gt;
close to that boundary, read the license or obtain a separate agreement.&lt;/p&gt;

&lt;p&gt;This distinction matters. “Self-hosted,” “source available,” and “open source”&lt;br&gt;
are not synonyms.&lt;/p&gt;

&lt;h2&gt;
  
  
  Count the operator
&lt;/h2&gt;

&lt;p&gt;Zapier owns the managed runtime. A self-hosted Activepieces or n8n instance&lt;br&gt;
makes your team responsible for at least:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;upgrades and vulnerability response;&lt;/li&gt;
&lt;li&gt;the application database and tested restores;&lt;/li&gt;
&lt;li&gt;encryption keys needed to recover stored connections;&lt;/li&gt;
&lt;li&gt;queue and worker health;&lt;/li&gt;
&lt;li&gt;webhook reachability and signing;&lt;/li&gt;
&lt;li&gt;credential rotation and least privilege;&lt;/li&gt;
&lt;li&gt;run retention, logs, alerts, and on-call ownership;&lt;/li&gt;
&lt;li&gt;capacity, concurrency, and rate-limit handling.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Activepieces' current Docker Compose guide, for example, describes an app,&lt;br&gt;
worker, PostgreSQL, and Redis. It explicitly notes that backing up the project&lt;br&gt;
directory does not back up the database, and that the encryption key is needed&lt;br&gt;
to decrypt stored connections after a restore.&lt;/p&gt;

&lt;p&gt;None of that makes self-hosting wrong. It makes “free” an incomplete cost&lt;br&gt;
description.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run a failure test before migrating
&lt;/h2&gt;

&lt;p&gt;Build one representative workflow with test accounts and synthetic records.&lt;br&gt;
Include a branch, a retry-sensitive write, and the real authentication pattern.&lt;br&gt;
Then break it deliberately:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Expire one credential and confirm the alert names the failed connection.&lt;/li&gt;
&lt;li&gt;Return HTTP 429 and verify bounded retry and backoff behavior.&lt;/li&gt;
&lt;li&gt;Deliver the same webhook twice and verify the final state is idempotent.&lt;/li&gt;
&lt;li&gt;Fail a middle step after an earlier system has already been updated.&lt;/li&gt;
&lt;li&gt;Exceed the planned usage allowance and record whether work stops or overage
charges begin.&lt;/li&gt;
&lt;li&gt;Restart the platform or worker and confirm the workflow resumes safely.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A green happy-path run does not establish that a business-critical automation&lt;br&gt;
is supportable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run the exit test too
&lt;/h2&gt;

&lt;p&gt;Export the workflow definition using the plan and permission level you intend&lt;br&gt;
to buy. Inspect the export for secrets before storing or sharing it. Import it&lt;br&gt;
into a clean account or instance, then reconnect credentials without copying&lt;br&gt;
secret values into the workflow.&lt;/p&gt;

&lt;p&gt;Recreate schedules, webhooks, variables, roles, alert destinations, and any&lt;br&gt;
custom packages. Run the same fixture and reconcile every output and side&lt;br&gt;
effect. Record what required manual rebuilding and how long it took.&lt;/p&gt;

&lt;p&gt;Zapier documents JSON workflow import/export for Team and Enterprise accounts,&lt;br&gt;
but app connections still need testing and reconnection. A workflow file from&lt;br&gt;
any platform should be treated as one migration input, not proof that the&lt;br&gt;
operating state moved.&lt;/p&gt;

&lt;p&gt;An archive is not a migration. The clean destination has to run.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical routing rule
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Start with &lt;strong&gt;Zapier&lt;/strong&gt; when managed operations and connector breadth matter
more than runtime control, and measured task volume fits the quote.&lt;/li&gt;
&lt;li&gt;Test &lt;strong&gt;Activepieces&lt;/strong&gt; when an MIT-licensed core or whole-flow billing is the
important constraint, then price the edition and operator work you need.&lt;/li&gt;
&lt;li&gt;Test &lt;strong&gt;n8n&lt;/strong&gt; when a technical team wants whole-execution billing and its
source-available license and hosting model fit the intended use.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No product wins this decision in the abstract. The failure and reconstruction&lt;br&gt;
evidence should decide.&lt;/p&gt;

&lt;p&gt;Primary sources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://zapier.com/pricing" rel="noopener noreferrer"&gt;Zapier pricing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://zapier.com/pricing/rates" rel="noopener noreferrer"&gt;Zapier task usage rates&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://help.zapier.com/hc/en-us/articles/8496308481933-Import-and-export-Zaps-in-your-Team-or-Enterprise-account" rel="noopener noreferrer"&gt;Zapier workflow import/export&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.activepieces.com/pricing" rel="noopener noreferrer"&gt;Activepieces pricing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.activepieces.com/docs/about/license" rel="noopener noreferrer"&gt;Activepieces licensing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.activepieces.com/docs/install/options/docker-compose" rel="noopener noreferrer"&gt;Activepieces self-hosting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://n8n.io/pricing/" rel="noopener noreferrer"&gt;n8n pricing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.n8n.io/privacy-and-security/sustainable-use-license/" rel="noopener noreferrer"&gt;n8n Sustainable Use License&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The free inventory, failure drill, exit worksheet, and verifier are in the&lt;br&gt;
&lt;a href="https://github.com/Software-Sausage/recipes/tree/v0.11.0/recipes/automation-platform-exit-test" rel="noopener noreferrer"&gt;Software Sausage recipes repository&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The complete dated guide is at&lt;br&gt;
&lt;a href="https://softwaresausage.com/blog/zapier-vs-activepieces-vs-n8n?source=community&amp;amp;utm_campaign=dev_automation_exit" rel="noopener noreferrer"&gt;Software Sausage&lt;/a&gt;.&lt;br&gt;
The free kit and shortlist require no email; the optional report and integrator&lt;br&gt;
request are separate paid or consent-based actions.&lt;/p&gt;

</description>
      <category>automation</category>
      <category>opensource</category>
      <category>saas</category>
      <category>productivity</category>
    </item>
    <item>
      <title>The graph is not the trust layer</title>
      <dc:creator>Constantine Macris</dc:creator>
      <pubDate>Thu, 03 Sep 2026 23:08:33 +0000</pubDate>
      <link>https://dev.to/softwaresausage/the-graph-is-not-the-trust-layer-4hd4</link>
      <guid>https://dev.to/softwaresausage/the-graph-is-not-the-trust-layer-4hd4</guid>
      <description>&lt;p&gt;Disclosure: Software Sausage is our product. Blake McCarn did not sponsor, review, or endorse this article. AI tools helped draft and edit it; the evidence boundaries are stated below.&lt;/p&gt;

&lt;h1&gt;
  
  
  The graph is not the trust layer
&lt;/h1&gt;

&lt;p&gt;Blake McCarn's &lt;a href="https://blakemccarn.dev/work/paperless-knowledge-graph" rel="noopener noreferrer"&gt;Paperless Knowledge Graph&lt;/a&gt; is not interesting merely because it lets someone chat with scanned documents. The stronger idea is that retrieval leaves evidence behind and can refuse to answer when that evidence is weak.&lt;/p&gt;

&lt;p&gt;This is a source review, not a field test. We reviewed McCarn's case study, inspected the current &lt;a href="https://github.com/bmccarn/paperless-knowledge-graph" rel="noopener noreferrer"&gt;public repository&lt;/a&gt;, and checked related projects. We did not connect the stack to his private archive or reproduce its reported accuracy, scale, speed, or cost.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pipeline
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Paperless source documents
  → baseline OCR → selective enhanced OCR
  → classify → extract → verify → relate
  → graph + vector + keyword indexes
  → quick | deep | timeline | strict query
  → cited answer + claim ledger + trace
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;McCarn reports more than 800 documents, roughly 7,000 graph nodes, 25,000 relationships, and 6,000 searchable chunks. Those are author-reported results, not Software Sausage measurements.&lt;/p&gt;

&lt;h2&gt;
  
  
  Five decisions worth carrying into other systems
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Preserve the source of truth
&lt;/h3&gt;

&lt;p&gt;Paperless remains the document authority. Enhanced OCR runs as a companion layer, so the archive is not held hostage by the AI pipeline.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Compare identities, not counts
&lt;/h3&gt;

&lt;p&gt;The freshness check compares exact document ID sets and hashes across Paperless, Neo4j, and vector chunks. Equal counts can still conceal one missing document and one stale replacement.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Route by question shape
&lt;/h3&gt;

&lt;p&gt;Entity lookups use the graph. Deeper questions combine vector, keyword, and graph retrieval. Timeline mode keeps dates explicit. Strict mode can refuse weak evidence instead of filling the gap with confident prose.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Leave inspectable artifacts
&lt;/h3&gt;

&lt;p&gt;The repository includes evidence-pack, claim-ledger, trust-dimension, trace, and answer-repair paths. A separate model pass may catch inconsistencies, but it is not independent ground truth. The verifier can share the drafter's blind spots.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Put model routing outside the app
&lt;/h3&gt;

&lt;p&gt;LiteLLM centralizes model aliases, credentials, limits, and cost visibility. That reduces provider coupling; it does not eliminate the need to test authentication and response behavior end to end.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the public repository proves
&lt;/h2&gt;

&lt;p&gt;The source contains the advertised evidence helpers, exact-drift audit, API smoke checks, and an evaluation harness for fixed questions. Its published container workflow is green, but it builds images rather than gating publication on those checks.&lt;/p&gt;

&lt;p&gt;The Python dependency file is mostly unpinned. The README says MIT, while the repository had no LICENSE file and GitHub detected no license when we reviewed it. Until that is corrected, treat the code as publicly readable rather than reusable MIT material.&lt;/p&gt;

&lt;p&gt;Most importantly, no public fixture establishes the accuracy implied by its medical, tax, financial, and legal query modes. Strict refusal and visible citations are useful controls. They do not replace opening the source.&lt;/p&gt;

&lt;h2&gt;
  
  
  The wider process is consistent
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/bmccarn/portable-brain" rel="noopener noreferrer"&gt;Portable Brain&lt;/a&gt; applies the portability boundary to knowledge work: plain Markdown, YAML, and relative links remain useful without a runtime, while source evidence stays separate from synthesized notes. We ran its current test suite locally: 75 tests passed. A full-repository lint also found one executable-bit issue in an optional Paperless integration outside the project's narrower CI lint scope.&lt;/p&gt;

&lt;p&gt;McCarn's &lt;a href="https://blakemccarn.dev/blog/managing-ai-coding-agents-with-herdr" rel="noopener noreferrer"&gt;Herdr write-up&lt;/a&gt; separates terminal topology from provider logic: one worktree per implementation, distinct review and test surfaces, and status labels used for routing rather than proof. His &lt;a href="https://blakemccarn.dev/blog/self-hosting-litellm-proxy" rel="noopener noreferrer"&gt;LiteLLM operating note&lt;/a&gt; makes a similar boundary explicit for model traffic, budgets, and credentials.&lt;/p&gt;

&lt;h2&gt;
  
  
  The field test we should run
&lt;/h2&gt;

&lt;p&gt;Build a synthetic, non-sensitive Paperless archive with ordinary text, tables, handwriting, duplicate entities, contradictory dates, and one deliberately stale index. Freeze a dozen questions and score source coverage, exact-value accuracy, unsupported claims, refusal behavior, elapsed time, and model cost.&lt;/p&gt;

&lt;p&gt;Then remove one document, add another so the total count stays equal, and require the exact freshness check to catch the swap.&lt;/p&gt;

&lt;p&gt;That would turn a strong architecture story into a reproducible recipe. Until then, the honest label is community source review.&lt;/p&gt;

&lt;p&gt;Read the complete review and follow the proposed verification run at &lt;a href="https://softwaresausage.com/blog/paperless-knowledge-graph-evidence-pipeline?source=community&amp;amp;utm_campaign=dev_paperless_kg" rel="noopener noreferrer"&gt;Software Sausage&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>productivity</category>
      <category>security</category>
    </item>
    <item>
      <title>Six open-source AI workflow kits you can actually inspect</title>
      <dc:creator>Constantine Macris</dc:creator>
      <pubDate>Thu, 03 Sep 2026 22:20:44 +0000</pubDate>
      <link>https://dev.to/softwaresausage/six-open-source-ai-workflow-kits-you-can-actually-inspect-amc</link>
      <guid>https://dev.to/softwaresausage/six-open-source-ai-workflow-kits-you-can-actually-inspect-amc</guid>
      <description>&lt;p&gt;Disclosure: Software Sausage is our product and publishes these recipes. The kits are free and MIT-licensed. AI tools helped draft and edit this article; the workflow status and evidence limits are stated below.&lt;/p&gt;

&lt;p&gt;Most AI workflow lists answer the easiest question: which tools can be placed next to each other in a diagram?&lt;/p&gt;

&lt;p&gt;We wanted to answer a harder one: what evidence should remain after the tools finish?&lt;/p&gt;

&lt;p&gt;That produced six small workflow kits. Each one contains a README, an editable evidence ledger, and a dependency-free shell verifier. All 17 verifiers in the repository pass at release v0.17.0.&lt;/p&gt;

&lt;p&gt;That is a structural claim, not a performance claim. The checks prove that the required files and fields exist. The new workflows remain explicitly marked “not benchmarked” until measured runs are published.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Specification to production proof
&lt;/h2&gt;

&lt;p&gt;Use GitHub Spec Kit to freeze the outcome, exclusions, acceptance criteria, and rollback boundary. Let one coding agent implement the reviewed tasks. Then run existing checks plus a small user-flow proof and ask a different model to compare the result with the original specification.&lt;/p&gt;

&lt;p&gt;The artifact is not a generated plan. It is the linked specification, reviewed diff, executable checks, browser evidence, and rollback note.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. AI workflow regression test
&lt;/h2&gt;

&lt;p&gt;Freeze representative success, edge, and refusal cases before changing a prompt, model, tool, or instruction file. Promptfoo can run the baseline and candidate against the same cases while retaining assertions, latency, token use, cost, and failures.&lt;/p&gt;

&lt;p&gt;Prefer deterministic assertions before model grading. Also isolate the run: Promptfoo configurations can execute code and are not a sandbox.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Open-source coding-agent benchmark
&lt;/h2&gt;

&lt;p&gt;Pick one real repository task and define hidden acceptance checks. Pin the harness, model endpoint, instructions, permissions, tools, and context budget. Run Qwen Code, Goose, OpenCode, or another candidate from fresh copies at least three times, then blind the labels before reviewing the artifacts.&lt;/p&gt;

&lt;p&gt;The result should select a configuration for that job and environment, not declare a universal winner.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Document-parser fidelity test
&lt;/h2&gt;

&lt;p&gt;Run MarkItDown and Docling on the same authorized documents. Score the raw output for ordering, tables, citations, omitted text, OCR errors, and usable source locations before giving it to a model.&lt;/p&gt;

&lt;p&gt;A fluent summary cannot repair a missing table cell. Reopen every decision-changing number, date, obligation, and citation in the source.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Browser performance regression
&lt;/h2&gt;

&lt;p&gt;Freeze the browser, viewport, data state, network conditions, and user action. Use Playwright to reproduce the flow and Chrome DevTools MCP to retain a trace, console output, and relevant network evidence. Make the smallest root-cause fix, then rerun the same conditions several times.&lt;/p&gt;

&lt;p&gt;One lab trace is not field performance. Keep authenticated browser profiles away from an MCP client unless that access is deliberately required.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Safe dependency upgrade
&lt;/h2&gt;

&lt;p&gt;Let Renovate propose a narrow update. Record the direct and transitive changes, lockfile diff, release notes, supported runtime range, and rollback version. Use OSV-Scanner and Semgrep as review inputs, then run the project's actual checks and a representative runtime flow.&lt;/p&gt;

&lt;p&gt;Clean scans do not prove compatibility or the absence of vulnerabilities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try to break one
&lt;/h2&gt;

&lt;p&gt;Every kit is available in the pinned &lt;a href="https://github.com/Software-Sausage/recipes/releases/tag/v0.17.0" rel="noopener noreferrer"&gt;v0.17.0 release&lt;/a&gt;. Run one on a disposable fixture. If its verifier passes while decision-critical evidence is missing, open an issue with the smallest safe reproduction. That is more useful than a star.&lt;/p&gt;

&lt;p&gt;The readable library and the boundary for each workflow are in &lt;a href="https://softwaresausage.com/blog/six-open-source-ai-workflow-kits?source=community&amp;amp;utm_campaign=dev_six_kits" rel="noopener noreferrer"&gt;Software Sausage&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Primary references: &lt;a href="https://github.com/github/spec-kit/blob/main/docs/index.md" rel="noopener noreferrer"&gt;GitHub Spec Kit&lt;/a&gt;, &lt;a href="https://github.com/promptfoo/promptfoo/blob/main/site/docs/configuration/expected-outputs/index.md" rel="noopener noreferrer"&gt;Promptfoo assertions&lt;/a&gt;, &lt;a href="https://github.com/QwenLM/qwen-code" rel="noopener noreferrer"&gt;Qwen Code&lt;/a&gt;, &lt;a href="https://github.com/aaif-goose/goose" rel="noopener noreferrer"&gt;Goose&lt;/a&gt;, &lt;a href="https://github.com/ChromeDevTools/chrome-devtools-mcp" rel="noopener noreferrer"&gt;Chrome DevTools MCP&lt;/a&gt;, &lt;a href="https://github.com/microsoft/markitdown/blob/main/packages/markitdown-mcp/README.md" rel="noopener noreferrer"&gt;MarkItDown MCP&lt;/a&gt;, &lt;a href="https://docs.renovatebot.com/" rel="noopener noreferrer"&gt;Renovate&lt;/a&gt;, and &lt;a href="https://semgrep.dev/docs/category/local-and-cli-scans" rel="noopener noreferrer"&gt;Semgrep CLI&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>A source-led research-paper workflow with Obsidian, Claude Code, LaTeX, and Codex</title>
      <dc:creator>Constantine Macris</dc:creator>
      <pubDate>Wed, 02 Sep 2026 14:48:34 +0000</pubDate>
      <link>https://dev.to/softwaresausage/a-source-led-research-paper-workflow-with-obsidian-claude-code-latex-and-codex-dd4</link>
      <guid>https://dev.to/softwaresausage/a-source-led-research-paper-workflow-with-obsidian-claude-code-latex-and-codex-dd4</guid>
      <description>&lt;p&gt;Disclosure: AI tools helped draft and edit this article. A human publisher reviewed the final text and workflow before publication.&lt;/p&gt;

&lt;p&gt;Putting four tools in a list does not make a workflow. The difficult part is&lt;br&gt;
deciding which tool owns each artifact, what the next tool may change, and what&lt;br&gt;
must still be checked by a person.&lt;/p&gt;

&lt;p&gt;This recipe uses four bounded roles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Obsidian&lt;/strong&gt; keeps the source ledger, claim status, notes, and open questions
in readable Markdown.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code&lt;/strong&gt; works across the outline and manuscript files while material
factual claims remain tied to ledger IDs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LaTeX&lt;/strong&gt; owns the versionable manuscript, bibliography, equations, and build
warnings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Codex&lt;/strong&gt; acts as a separate critic of the ledger, manuscript diff, and build
log. It is not treated as evidence.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The objective is not automatic authorship. It is a manuscript whose claims,&lt;br&gt;
sources, build, and review trail remain inspectable.&lt;/p&gt;
&lt;h3&gt;
  
  
  Start with files, not a blank chat
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;paper-project/
├── sources/              # permitted PDFs, links, and notes
├── brief.md              # question, audience, scope, deadline, rules
├── source-ledger.md      # claim -&amp;gt; citekey -&amp;gt; verification status
├── outline.md
├── manuscript.tex
├── library.bib
└── review-findings.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;You can clone the starter repository:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/Software-Sausage/recipes.git sausage-recipes
&lt;span class="nb"&gt;cd &lt;/span&gt;sausage-recipes/recipes/research-paper
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Work in a private copy when the paper or source set is not public. The&lt;br&gt;
&lt;code&gt;sources/&lt;/code&gt; directory is ignored by Git, but an ignore rule is not a substitute&lt;br&gt;
for checking what your agent, sync service, and plugins can access.&lt;/p&gt;
&lt;h3&gt;
  
  
  1. Write the brief yourself
&lt;/h3&gt;

&lt;p&gt;Fill in &lt;code&gt;brief.md&lt;/code&gt; before asking a model to draft anything. State the research&lt;br&gt;
question, audience or venue, thesis, permitted sources, citation style,&lt;br&gt;
deadline, institutional AI-use rules, exclusions, and claims that require&lt;br&gt;
specialist review.&lt;/p&gt;

&lt;p&gt;If those decisions are missing, fluent prose only hides the ambiguity.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Make the source ledger the control surface
&lt;/h3&gt;

&lt;p&gt;Create one row for every material claim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;| ID | Claim | Citekey | Page/section | Status | Notes |
| --- | --- | --- | --- | --- | --- |
| C-001 | ... | ... | ... | UNVERIFIED | ... |
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The author—not the agent—changes &lt;code&gt;UNVERIFIED&lt;/code&gt; to &lt;code&gt;VERIFIED&lt;/code&gt; after opening the&lt;br&gt;
source and checking the cited passage. An abstract, metadata record, search&lt;br&gt;
snippet, or model summary is not source verification.&lt;/p&gt;
&lt;h3&gt;
  
  
  3. Hand the ledger and outline to the drafting agent
&lt;/h3&gt;

&lt;p&gt;Ask Claude Code to inventory only the permitted source files, build the ledger,&lt;br&gt;
and draft the argument in &lt;code&gt;outline.md&lt;/code&gt; before editing prose. Require ledger IDs&lt;br&gt;
beside material claims. Unsupported claims stay visible as questions; they do&lt;br&gt;
not get smoothed into confident paragraphs.&lt;/p&gt;

&lt;p&gt;The starter &lt;code&gt;AGENTS.md&lt;/code&gt; also tells the agent not to browse, download, upload,&lt;br&gt;
publish, or contact anyone unless the author explicitly authorizes it.&lt;/p&gt;
&lt;h3&gt;
  
  
  4. Keep the build evidence
&lt;/h3&gt;

&lt;p&gt;Draft &lt;code&gt;manuscript.tex&lt;/code&gt; and &lt;code&gt;library.bib&lt;/code&gt; from the checked outline. Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./verify.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The script checks that the required artifacts exist and builds the manuscript&lt;br&gt;
when &lt;code&gt;latexmk&lt;/code&gt; is available. Before review, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./verify.sh &lt;span class="nt"&gt;--final&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The final check rejects remaining &lt;code&gt;TODO&lt;/code&gt;, &lt;code&gt;UNVERIFIED&lt;/code&gt;, and &lt;code&gt;UNRESOLVED&lt;/code&gt;&lt;br&gt;
markers. Do not weaken the check to make a run green.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Use a different model as a critic
&lt;/h3&gt;

&lt;p&gt;Give Codex the brief, source ledger, manuscript diff, bibliography, and build&lt;br&gt;
output. Ask it to record unsupported claims, broken references, logical gaps,&lt;br&gt;
and reproducibility failures in &lt;code&gt;review-findings.md&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This is a critique, not independent fact verification. Two model families can&lt;br&gt;
repeat the same error. The author still opens every cited source and resolves&lt;br&gt;
each material finding.&lt;/p&gt;

&lt;h3&gt;
  
  
  Definition of done
&lt;/h3&gt;

&lt;p&gt;The paper is ready for author review when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the manuscript compiles;&lt;/li&gt;
&lt;li&gt;bibliography links and build warnings have been reviewed;&lt;/li&gt;
&lt;li&gt;no material claim remains unverified;&lt;/li&gt;
&lt;li&gt;the review log shows each finding and resolution; and&lt;/li&gt;
&lt;li&gt;the author has confirmed the venue's authorship and AI-use rules.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Open-source substitutions
&lt;/h3&gt;

&lt;p&gt;LaTeX and the recipe itself are open source. If proprietary tools are a bad fit,&lt;br&gt;
test Zettlr or Logseq for Markdown notes and Aider or OpenHands for repository&lt;br&gt;
work. Treat these as substitutions to verify, not drop-in compatibility claims;&lt;br&gt;
the same fixture and final checks should be rerun after changing a tool.&lt;/p&gt;

&lt;p&gt;If you try the recipe, report the first confusing or broken step in the&lt;br&gt;
&lt;a href="https://github.com/Software-Sausage/recipes/issues/1" rel="noopener noreferrer"&gt;starter repository&lt;/a&gt;.&lt;br&gt;
Failures are the useful part of this stage.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>obsidian</category>
      <category>latex</category>
    </item>
  </channel>
</rss>
