<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/the-build-system-you-already-have-toh33aipi" -->

---
title: The build system you already have | daily.dev
description: Tuist explores what a build system fundamentally is once you strip away syntax: a task graph. Coding harnesses broke the old one-project-one-cache assumption,...
canonical: https://daily.dev/posts/the-build-system-you-already-have-toh33aipi
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: The build system you already have | daily.dev
og:description: Tuist explores what a build system fundamentally is once you strip away syntax: a task graph. Coding harnesses broke the old one-project-one-cache assumption,...
og:url: https://daily.dev/posts/the-build-system-you-already-have-toh33aipi
og:image: https://api.daily.dev/og/posts/toH33aiPI.png
og:image:alt: The build system you already have
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# The build system you already have

**[
      Tuist
    ](https://daily.dev/sources/tuist-blog)** · 21 min read · 0 upvotes · 0 comments

## Summary

Tuist explores what a build system fundamentally is once you strip away syntax: a task graph. Coding harnesses broke the old one-project-one-cache assumption, prompting an experiment called Once, an open-source automation layer that turns existing shell scripts into a build graph via lightweight comments describing inputs, outputs, and dependencies. A worked example builds a Rust core shared by native iOS and Android apps, demonstrating caching, early cutoff, and remote execution without adopting a new DSL like Starlark. The piece is the first in a series and lists open questions around toolchains, observability, tests, reusability, and agent-driven clients.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://tuist.dev/blog/2026/06/30/three-build-systems-one-graph>

## Questions this post answers

### How does Tuist's Once tool turn plain shell scripts into a build graph?

Once reads special comments at the top of each script declaring its inputs, outputs, fingerprint dependencies, environment variables, working directory, and which other scripts it needs. This metadata is enough to construct a dependency graph without rewriting anything in a new language, so a script that already runs a build step becomes a cacheable, orderable node just by adding a few comment lines.

_Teams weighing lightweight build graphs over Bazel-style DSLs can track this kind of tooling on daily.dev._

### Why do coding agents struggle with Starlark even though it looks like Python?

Starlark is a stricter dialect of Python with no I/O, no recursion, and no open-ended loops, so evaluating a build file always terminates deterministically. Because it resembles Python so closely, coding models often write valid Python that is invalid Starlark, burning cycles discovering the mismatch, which undermines its usefulness as an interface for agent-driven builds.

_Developers picking build DSLs that play well with AI coding agents can follow this discussion on daily.dev._

### What is early cutoff in a build system and how did it show up without being explicitly implemented?

Early cutoff means a build step downstream of a change is skipped if the intermediate output it depends on turns out identical, even though its source changed. In one test, editing Rust source cosmetically caused the core library to recompile, but the resulting binary was byte-for-byte identical, so the Android app build, keyed on that library rather than the source, never reran, purely from content-addressed caching and correctly declared script inputs.

_Engineers optimizing incremental build performance can dig into caching techniques like this on daily.dev._

## Similar posts on daily.dev

- [The new Tuist, from build toolchains to bare metal](https://daily.dev/posts/the-new-tuist-from-build-toolchains-to-bare-metal-waw3c6jvd) · 
      Tuist
     · 0 upvotes · 0 comments
- [Tech Notes: The smallest build system](https://daily.dev/posts/tech-notes-the-smallest-build-system-ru2fjysp4) · Lobsters · 0 upvotes · 0 comments
- [Toss: Building less to ship faster](https://daily.dev/posts/toss-building-less-to-ship-faster-1arhtus0n) · 
      Tuist
     · 4 upvotes · 0 comments
- [what is a build system, anyway?](https://daily.dev/posts/what-is-a-build-system-anyway--60rzwtsj1) · Lobsters · 0 upvotes · 0 comments
- [build system tradeoffs](https://daily.dev/posts/build-system-tradeoffs-27gmrlht5) · Lobsters · 2 upvotes · 0 comments

---

Tags: [#ai-agents](https://daily.dev/tags/ai-agents), [#rust](https://daily.dev/tags/rust), [#build-systems](https://daily.dev/tags/build-systems), [#bazel](https://daily.dev/tags/bazel)

[View this post on daily.dev](https://daily.dev/posts/the-build-system-you-already-have-toh33aipi)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"The build system you already have","url":"https://daily.dev/posts/the-build-system-you-already-have-toh33aipi","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/the-build-system-you-already-have-toh33aipi"},"datePublished":"2026-08-23T12:20:02.897Z","dateModified":"2026-08-23T12:40:51.860Z","description":"Tuist explores what a build system fundamentally is once you strip away syntax: a task graph. Coding harnesses broke the old one-project-one-cache assumption,...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/9f874bde76f3a62503b8fb6819a3371d?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/9f874bde76f3a62503b8fb6819a3371d?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"\n      Tuist\n    ","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"\n      Tuist\n    ","logo":"https://media.daily.dev/image/upload/s--3AYDH23h--/f_auto,q_auto/v1787487506/logos/tuist-blog?_a=BAMAMicg0","url":"https://daily.dev/sources/tuist-blog"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/the-build-system-you-already-have-toh33aipi","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"ai-agents,rust,build-systems,bazel","timeRequired":"PT21M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"\n      Tuist\n    ","item":"https://daily.dev/sources/tuist-blog"},{"@type":"ListItem","position":3,"name":"The build system you already have"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/the-build-system-you-already-have-toh33aipi#faq","mainEntity":[{"@type":"Question","name":"How does Tuist's Once tool turn plain shell scripts into a build graph?","acceptedAnswer":{"@type":"Answer","text":"Once reads special comments at the top of each script declaring its inputs, outputs, fingerprint dependencies, environment variables, working directory, and which other scripts it needs. This metadata is enough to construct a dependency graph without rewriting anything in a new language, so a script that already runs a build step becomes a cacheable, orderable node just by adding a few comment lines. Teams weighing lightweight build graphs over Bazel-style DSLs can track this kind of tooling on daily.dev."}},{"@type":"Question","name":"Why do coding agents struggle with Starlark even though it looks like Python?","acceptedAnswer":{"@type":"Answer","text":"Starlark is a stricter dialect of Python with no I/O, no recursion, and no open-ended loops, so evaluating a build file always terminates deterministically. Because it resembles Python so closely, coding models often write valid Python that is invalid Starlark, burning cycles discovering the mismatch, which undermines its usefulness as an interface for agent-driven builds. Developers picking build DSLs that play well with AI coding agents can follow this discussion on daily.dev."}},{"@type":"Question","name":"What is early cutoff in a build system and how did it show up without being explicitly implemented?","acceptedAnswer":{"@type":"Answer","text":"Early cutoff means a build step downstream of a change is skipped if the intermediate output it depends on turns out identical, even though its source changed. In one test, editing Rust source cosmetically caused the core library to recompile, but the resulting binary was byte-for-byte identical, so the Android app build, keyed on that library rather than the source, never reran, purely from content-addressed caching and correctly declared script inputs. Engineers optimizing incremental build performance can dig into caching techniques like this on daily.dev."}}]}
```

