diff --git a/_index_template.html b/_index_template.html
index e072089..b1d7fc6 100644
--- a/_index_template.html
+++ b/_index_template.html
@@ -15,19 +15,26 @@
+
+
+
+
diff --git a/_template.html b/_template.html
index a37d5ab..a4c7481 100644
--- a/_template.html
+++ b/_template.html
@@ -39,21 +39,26 @@
}
+
+
+
+
diff --git a/agent-harness.html b/agent-harness.html
index 711d43d..e184772 100644
--- a/agent-harness.html
+++ b/agent-harness.html
@@ -39,21 +39,26 @@
}
+
+
+
+
@@ -294,7 +306,7 @@ LangChain, CrewAI, and AutoGen are built for web apps. They assume text-in, text
## The toolchain that makes it work
-Our harness runs on Tinqs Studio, built on a Gitea fork with game-specific features. The key pieces:
+Our harness runs on Tinqs Studio, built on a Gitea fork with game-specific features. The key pieces:
The CLI — a single Go binary. One command (tinqs identity) gives the agent full project context in 100ms. Screenshots, cloud vision, health checks — all subcommands of the same binary.
@@ -327,7 +339,7 @@ We're betting that specialised harnesses beat generic ones. A harness built for
—
-Tinqs Studio is an agent harness for game development — git hosting, AI agents, creative pipelines. Open for teams. We're building Ariki with the same tools.
Agents don't just have instructions. They have skills — markdown playbooks that teach specific workflows. When someone says "generate concept art for a character," the agent reads skills/image-generation.md and follows the procedure. No prompt engineering per session. No "let me try a different prompt."
We've open-sourced several skills:
Each skill took about 30 minutes to write. After six months, our agents have 15+ skills covering art generation, competitive research, video production, and project management. Skills compound — every playbook you write makes every future session more capable.
Skills compound exponentially. One skill saves 15 minutes per session. Fifteen skills save hours per day across the whole team. The investment curve is absurdly favourable — 30 minutes of writing per skill, compounding returns forever.
We're four people. With agents doing the mechanical work, we operate like forty. Not because the AI is magic — because we gave it identity, memory, and the right playbooks, and then got out of its way.
We're building Ariki, a survival colony sim, using the same agent workflow described here. Everything runs on Tinqs Studio — a game dev platform with built-in AI agents, git hosting, and creative pipelines.
+We're building Ariki, a survival colony sim, using the same agent workflow described here. Everything runs on Tinqs Studio — a game dev platform with built-in AI agents, git hosting, and creative pipelines.
Build systems make CSS changes safe. Because we never hand-edit .html, every style change is tested by regenerating all pages and grepping for the new selectors. If a rule doesn't ship, you know immediately.
Two gaps we'll fill later: blockquote support in build.js (the callout CSS is waiting) and ordered lists (same story). In the meantime, the blog already looks intentional — and it took two template files, one build step, and zero dependencies.
The blog is generated by build.js and served by Tinqs Studio. All styling is self-contained in the templates.
+The blog is generated by build.js and served by Tinqs Studio. All styling is self-contained in the templates.
diff --git a/build.js b/build.js index 483b543..9f3c670 100644 --- a/build.js +++ b/build.js @@ -148,7 +148,7 @@ function inline(s) { s = s.replace(/---/g, "—"); s = s.replace(/--/g, "–"); // Links - s = s.replace(/\[([^\]]+)\]\(([^)]+)\)/g, '$1'); + s = s.replace(/\[([^\]]+)\]\(([^)]+)\)/g, '$1'); return s; } diff --git a/fal-image-generation.html b/fal-image-generation.html index 0ed7171..4c1b1b4 100644 --- a/fal-image-generation.html +++ b/fal-image-generation.html @@ -39,21 +39,26 @@ } + + + + @@ -335,10 +347,10 @@ No extra fingers, no merged limbs, no floating accessories.The design context block is worth more than the rest of the prompt combined. Without it, every image is a one-off. With it, every image belongs to the same game.
Never iterate on expensive models. Schnell at $0.003/image is for exploration. Flux 2 Pro at $0.03 is for final output. The cheap model does 90% of the creative work.
Aggregation beats loyalty. No single model is best at everything. Flux for art, Ideogram for text, Recraft for design, Nano Banana for edits, BiRefNet for masks. Use the right tool for each job.
-Let the agent handle prompting. We encode the 4-layer pattern, art style guide, and model selection rules in an agent skill file. The AI writes the full prompt, generates images, displays them, and asks for scores. The human's job is creative direction.
+Let the agent handle prompting. We encode the 4-layer pattern, art style guide, and model selection rules in an agent skill file. The AI writes the full prompt, generates images, displays them, and asks for scores. The human's job is creative direction.
AI art isn't magic and it isn't free. But at a penny per image, with the right prompt structure and model strategy, it eliminates the most expensive bottleneck in indie game development: the gap between "I know what this should look like" and "I have an asset I can actually use."
Image generation is built into Tinqs Studio. We've open-sourced the prompt engineering skill and concept art pipeline skill. We're building Ariki with these tools.
+Image generation is built into Tinqs Studio. We've open-sourced the prompt engineering skill and concept art pipeline skill. We're building Ariki with these tools.
diff --git a/flows-are-sessions.html b/flows-are-sessions.html index 3e4294e..de6db43 100644 --- a/flows-are-sessions.html +++ b/flows-are-sessions.html @@ -39,21 +39,26 @@ } + + + + @@ -337,7 +349,7 @@ while (!approved) {What's next. Richer on-card flow display — a pinned step strip so you can see progress without opening the session. Attachable asset and agent-structure viewers in the flow card. Run replay for finished sessions after a page reload (the session persists, but you can't rewatch the stream yet).
But the principle is settled. A flow isn't a pipeline. A pipeline runs blind and reports back later. A flow is a pair-programming session where one of the pair happens to be code.
Tinqs Studio is our agent-native development platform — git hosting, AI agents, and the flow engine described here. Ariki is the survival colony sim we're building with it.
+Tinqs Studio is our agent-native development platform — git hosting, AI agents, and the flow engine described here. Ariki is the survival colony sim we're building with it.
diff --git a/fork-dont-build.html b/fork-dont-build.html index 81bc66c..784527f 100644 --- a/fork-dont-build.html +++ b/fork-dont-build.html @@ -39,21 +39,26 @@ } + + + + @@ -276,7 +288,7 @@Across three forks, we've never touched more than 0.5% of upstream code. If your fork hits 1%, you're doing too much — either the upstream tool is wrong for the job, or you're not trusting it enough.
Gitea is a self-hosted git server. Single Go binary, MIT license, 45k GitHub stars. We used GitHub for two years. It was fine for docs. For the game repo — 12GB in LFS, growing weekly — it was untenable. LFS bandwidth limits, slow clones, $5/50GB pricing. And nobody on the team could see what changed. A PR modifying a .glb file showed a binary diff. No preview. The artist pushed, the developer approved blindly, and three days later someone noticed the normals were inverted.
We forked Gitea and built Tinqs Studio. Our changes:
+We forked Gitea and built Tinqs Studio. Our changes:
3D asset preview. Click a .glb, .gltf, or .fbx file in a PR and rotate the model in your browser. 22 formats supported via O3DV. This alone transformed our review process — the artist pushes, the lead inspects, nobody downloads anything.
HTML file preview. Sandboxed iframe rendering. Our internal docs and game design pages look like websites, not raw source.
Agent API. Six REST endpoints that let AI agents submit tasks, push code, check CI status, and open PRs. Agents are first-class users of the git platform, not bolt-on tools.
@@ -285,7 +297,7 @@Total lines changed: about 2,000 out of Gitea's 500,000. We modify templates, add Go modules, tweak CSS. We never touch the database schema — upstream owns that, and we ride their migrations.
The alternative was building a git platform from scratch. Multi-year project, multi-million dollar budget. Or using GitHub/GitLab and accepting their limitations. Neither gives you the ability to embed agents directly into the platform.
Pi is an open-source coding agent by Mario Zechner. MIT license, TypeScript, minimal by design — four core tools (read, write, edit, bash) and an extension system. 51k stars.
+Pi is an open-source coding agent by Mario Zechner. MIT license, TypeScript, minimal by design — four core tools (read, write, edit, bash) and an extension system. 51k stars.
We forked it and added four extensions, each a single TypeScript file:
The core Pi code is untouched — 900 lines of extensions added to a 15,000-line codebase. Agents get Gitea-native tools without a fork of the entire agent ecosystem.
The alternative: building our own agent from scratch — tool-calling logic, context management, streaming, retry handling, conversation threading. Months of work to reinvent what Pi already does.
Godot is the open-source game engine powering our survival colony sim. We forked 4.6.2 and added nine C++ modules that give agents direct access to the running game:
+Godot is the open-source game engine powering our survival colony sim. We forked 4.6.2 and added nine C++ modules that give agents direct access to the running game:
We're building the layer that connects them. The git server that speaks agent. The coding agent that speaks Gitea. The game engine that speaks HTTP. Each fork is a bridge between an existing tool and the agentic future — not a replacement for either.
The age of agents doesn't need more agents. It needs better platforms. Platforms that already exist as open-source projects. They just need someone to fork them and add the wiring.
Tinqs Studio is our Gitea fork, open for game teams. Ariki is the game we're building with every tool described here.
+Tinqs Studio is our Gitea fork, open for game teams. Ariki is the game we're building with every tool described here.
diff --git a/godot-optimisation.html b/godot-optimisation.html index dc6c7d0..15bd631 100644 --- a/godot-optimisation.html +++ b/godot-optimisation.html @@ -39,21 +39,26 @@ } + + + + @@ -319,7 +331,7 @@Always measure before optimizing. We added VRAM logging before writing a single line of optimization code. Half the "problems" we expected were non-issues. The other half were worse than expected. Profiling isn't optional.
Godot 4 can handle open worlds at this scale, but it won't do it for you. You need to build streaming, manage your own caches, audit resource loading, and be disciplined about what runs per frame. The engine gives you the primitives — MultiMesh, LoadThreadedRequest, QueueFree. It's up to you to wire them into a system that scales.
We're building Ariki, a survival colony sim, with these systems. The tools we use — git hosting, AI agents, creative pipelines — are part of Tinqs Studio.
+We're building Ariki, a survival colony sim, with these systems. The tools we use — git hosting, AI agents, creative pipelines — are part of Tinqs Studio.
diff --git a/gpu-skinned-herds.html b/gpu-skinned-herds.html index e35e601..4f41023 100644 --- a/gpu-skinned-herds.html +++ b/gpu-skinned-herds.html @@ -39,21 +39,26 @@ } + + + + @@ -276,7 +288,7 @@The alternative — baking animations to vertex textures — works for static crowds but locks you out of per-instance variation. No blending, no phase offsets, no reactive behaviour.
What we need is simpler: share the skeleton, drive per-instance poses from a single animation, batch the draw call. That's what agent_skinned does.
The module lives in modules/agent_skinned/ inside Tinqs Engine. Two classes, one job:
The module lives in modules/agent_skinned/ inside Tinqs Engine. Two classes, one job:
MultiSkinnedMeshInstance3D — the data planeHolds the CPU-side bone matrices. Allocates an ImageTexture of size [4 × max_bones, max_instances] in RGBA32F — each texel is one column of a 4×4 bone matrix. For a 130-bone crocodile with 256 instances:
Texture: 520 × 256 RGBA32F ≈ 2 MB
@@ -309,7 +321,7 @@ data.update() # upload only dirty instances, not the whole textureBug 2: Bone matrices stored transposed. The data plane wrote basis rows (standard Godot Transform3D.basis is row-major), but the shader unpacked as columns. Every bone matrix was transposed — the mesh crumpled. Not a scale bug, not an orientation bug — a layout mismatch. Fixed by storing column-major, with a doctest to prevent regression.
The lesson: doctests catch logic. Rendering catches truth. You need both.
In Ariki, the sim tracks animal migration across a 12km archipelago. AnimalHerdRenderer.cs groups sim ViewerState.animals by type, feeds positions to skinned_herd.gd (a reusable per-type herd backend), which drives the renderer. One AnimationPlayer animates a single driver skeleton; poses propagate to every instance.
In Ariki, the sim tracks animal migration across a 12km archipelago. AnimalHerdRenderer.cs groups sim ViewerState.animals by type, feeds positions to skinned_herd.gd (a reusable per-type herd backend), which drives the renderer. One AnimationPlayer animates a single driver skeleton; poses propagate to every instance.
The crocodile herd scene is 25 instances, one draw call. The same pipeline projects to 200–1,000 before the GPU budget even notices.
agent_skinned baked in — no engine compile required:
| Platform | Binary | Engine commit |
|———-|——–|—————|
-| macOS ARM64 | tinqs.macos.editor.arm64.mono | 4fe1323 (4.6.4, Xcode 26.3) |
| Windows x64 | tinqs.windows.editor.x86_64.mono.exe | 64fb5cc (4.6.4, MSVC 2022) |
All builds live in the public tinqs/builds repo — engine source is private, but the binaries are yours. See manifest.json for checksums and build details.
The engine source lives in tinqs/engine (private). Module docs: modules/agent_skinned/README.md and .agents/wiki/agent-skinned-gpu-herd.md.
| macOS ARM64 | tinqs.macos.editor.arm64.mono | 4fe1323 (4.6.4, Xcode 26.3) |
| Windows x64 | tinqs.windows.editor.x86_64.mono.exe | 64fb5cc (4.6.4, MSVC 2022) |
All builds live in the public tinqs/builds repo — engine source is private, but the binaries are yours. See manifest.json for checksums and build details.
The engine source lives in tinqs/engine (private). Module docs: modules/agent_skinned/README.md and .agents/wiki/agent-skinned-gpu-herd.md.
Related: Fork, Don't Build — why we modify existing platforms instead of building new ones. Streaming a 12km Archipelago in Godot 4 — the terrain and vegetation streaming layers that work alongside this.
+Related: Fork, Don't Build — why we modify existing platforms instead of building new ones. Streaming a 12km Archipelago in Godot 4 — the terrain and vegetation streaming layers that work alongside this.
diff --git a/index.html b/index.html index 3c937bc..dcbe8c8 100644 --- a/index.html +++ b/index.html @@ -15,19 +15,26 @@ + + + + diff --git a/live-ozan-radio.html b/live-ozan-radio.html index 2820edb..52de126 100644 --- a/live-ozan-radio.html +++ b/live-ozan-radio.html @@ -39,21 +39,26 @@ } + + + + @@ -264,7 +276,7 @@I do not want a playlist. I want a station — something that feels like late-night desert dub and Anadolu psych drifting out of a speaker, but every track is composed fresh, never pulled from Spotify or Apple Music. So we built Live Ozan Radio: DeepSeek as the on-air DJ, Google Lyria 3 as the music engine, and our own Gitea instance as the host.
-!Live Ozan Radio in Cursor — player dashboard, saved songs, and DJ chat beside the editor
+!Live Ozan Radio in Cursor — player dashboard, saved songs, and DJ chat beside the editor
That screenshot is how I actually use it: Cursor on the left with taste notes and vocal cues, the local player on :8787 on the right, saved songs in a scrollable library, and a chat box to steer the next generation. It is dogfooding in the truest sense — we run our game studio on the same Gitea fork we sell as Tinqs Studio, and the radio lives in that repo too.
diff --git a/pi-flow-native-brain.html b/pi-flow-native-brain.html
index ee58c10..39f69d4 100644
--- a/pi-flow-native-brain.html
+++ b/pi-flow-native-brain.html
@@ -20,6 +20,10 @@
+
+
+
+
+
+
+
+
@@ -359,7 +371,7 @@ The tools exist. DeepSeek V4 Flash is cheap enough to call on every commit. The
—
-The pre-commit hook is part of Tinqs Studio. The inference proxy, blocklist patterns, and review prompt are open and reusable. Every commit in Ariki runs through the same guard.