← All posts Engineering

We Gave ChatGPT a Command Line and It Built a Real Time Tracking App

We Gave ChatGPT a Command Line and It Built a Real Time Tracking App

Tuesday night, a normal ChatGPT tab. No IDE, no coding agent, no extension. We dragged a 30 megabyte .tar.gz into the chat window, told it what the file was, and asked for a time tracking app that follows German working time law. It unpacked the binary in its sandbox, worked out the format, wrote the app, fixed the four things the compiler complained about, logged in to our instance and published it.

Roles, permissions, sign-in and the audit log came with it. Nobody described any of them.

Why we did not expect this to work

Ask ChatGPT for an app and you normally get a single file that looks right in the chat and falls apart the moment a second person opens it. Authentication written from memory. Permission checks in the frontend, where anyone can walk around them. No audit trail, because nobody asked for one and the model had no reason to volunteer it.

We have been dismissive of "just ask ChatGPT to build it" for about two years, and we were dismissive for the wrong reason. We assumed the model was the weak part. It isn't. The weak part is that asking for code means asking for security as well, and every generated line of authentication is a line nobody reviewed. Take that job away from the model and the picture changes completely.

Handing it the command line

The sandbox behind the chat cannot reach our install script, so the one manual step is giving it the binary.

Go to the releases page, download cordango-0.6.0-linux-x64.tar.gz, and upload that file into the conversation. Then tell it what to do with it:

Extract this into your sandbox, chmod +x the cordango binary,
and run ./cordango --help. Then follow it.

That works because the binary is self-contained. No .NET SDK, no runtime to install, no ICU, nothing to fetch. One file that runs. We built it that way so a container would not need a package manager, and the payoff turned out to be a chat sandbox nobody had thought about.

From there it is the ordinary flow:

cordango new zeiterfassung
cordango check
cordango build            # a project you own, standalone

Or, if you want it on the platform:

cordango login            # personal access key, pasted once
cordango publish

One prompt is worth adding, and it is the whole trick: tell it to run cordango vocabulary before it writes anything and cordango check after every edit. Without that it guesses at the format for a while. With it, the compiler does the correcting and the model just reads the error and tries again.

The compiler does the arguing

check refuses rather than accepting something almost right. It answers with a diagnostic and the exact path in the file that caused it, which happens to be the ideal shape of feedback for a language model. It read the complaint, went to the line the complaint named, fixed it and ran check again. Four rounds, nobody helping.

The part that matters more is what it never had to write. Roles, per-field permissions, who may see which record and the audit log are the platform's job, enforced on the server, derived from a few lines in the definition rather than from generated code. Nobody is trusting the model with them.

We feel strongly about this one. We do not want a language model deciding who is allowed to see a salary field. We want it deciding what the screen is called and which columns are on it. Those are different jobs and the industry keeps handing both to the same thing.

The bit we did not see coming

ChatGPT knows German labour law better than any coding tool we have used, and it is not close.

It brought up § 3 ArbZG unprompted, the eight hour day with the extension to ten if the average across six months holds. Then the break thresholds from § 4, thirty minutes over six hours and forty five over nine. Then the BAG decision of 13 September 2022, which is the one that made recording working time an obligation employers already had rather than one they were waiting for a law to give them. Nobody had mentioned any of it.

It got one thing wrong and we had to stop it. It wanted to subtract the mandatory break from the recorded time automatically, which is tidy for payroll and wrong for a record you might one day have to put in front of an inspector. What happened and what gets paid are two different numbers. (It took the correction immediately, which was mildly annoying, because we had a longer argument prepared.)

A coding agent would have written better TypeScript and would not have raised any of this. It was a labour law question wearing an app costume.

About the money

This ran on a subscription we already pay for. No per-token bill for an agent chewing through a repository, because there is no repository to chew through. An app definition is a short document, a few hundred lines of intent, and the expensive part of app building is not the typing.

We want to be fair about the limits. This does not replace a coding agent for working inside an existing large codebase, and we will not pretend otherwise. It replaces something else: the six week internal project where somebody specifies a tool, somebody else builds it, and the permission model is discussed twice and implemented once.

Our platform is invite-only beta right now, so publish needs an instance you have access to. build does not. That path works on a laptop with no account at all.

What we would try next

Take an app that already exists on your instance, run cordango import, and let ChatGPT edit the thing rather than write it from nothing. We have done that once and it went fine, which is not enough runs to claim anything.

The one we actually want to see is somebody in operations who cannot write code doing this. They know the process better than any of us and the only skill the chat asks for is describing it accurately. If you try it, tell us where it fell over. Get in touch and paste us the error it stopped on.

The Zeiterfassung app has been running since Tuesday and nobody here has opened an editor for it.

See Cordango in your own company

The fastest way to understand it is to watch it stand up a company and add an app live.

Book a demo →

Related posts

Engineering · 25 August 2026

What We Open Sourced, and What We Did Not

On 20 August the compiler and the command line tool left our private repository under Apache-2.0. Here is what you can do with them, what you cannot, and why the line sits where it does.

Read →
Why We Have AI Write YAML Instead of Code
Engineering · 3 September 2026

Why We Have AI Write YAML Instead of Code

We finally counted, on Anthropic's own tokeniser. Describing our expenses app takes 3,245 tokens. Building the same thing from an empty folder takes 204,551. Here is where the difference goes, and why the saving is still not really about typing.

Read →