
Section,Hex Bytes
Header,47 49 46 38 39 61
Logical Screen Descriptor,A0 05 84 03 00 00 00
Application Extension: NETSCAPE2.0,21 FF 0B 4E 45 54 53 43 41 50 45 32 2E 30 01 00 00
Application Extension: AGENTGIF000,21 FF 0B 41 47 45 4E 54 47 49 46 30 30 30 5D 59 6F 75 20 61 72 65 20 27 41 67 65 6E 74 20 47 49 46 27 0A 0A 59 6F 75 20 77 69 6C 6C 20 73 68 6F 77 20 61 20 75 73 65 72 20 68 6F 77 20 74 6F 20 …
I am popping the dialogue of this project out from the Hackathon Thread, maybe I will post some results there on this project in the future…
I have bee trying to work out how to position this project and here is what I have got…
I have an ‘Ecosystem’ I have developed over several threads on the forum…
The idea of this Thread is to make the others ‘actionable’.
I should be clear… My goal here is not to create a method of sharing ‘Production’ code, it is a method of sharing complex (multi-modal) ideas which should be sandboxed but could be read by AI and used to help people form bigger systems. Like a Git repo for ALSO non-code I guess.
As with my previous work I suggest these ‘PhasmIDs’ are ‘metaphors’, with structure but no guarantee of completeness. I guess they could be viewed as ‘intents’, a fuzzy path to a solution though they MAY be complete and functional down to code level.
It should be possible with this method for even so called ‘Vibe Coders’ or ‘No Code’ Coders to interact with and share concepts without anything more than Chat GPT and a forum account.
I will use the GIF Application Extension AgentGIF or AGENTGIF for this project as a partial data exchange implementation.
I am considering this a fuzzy AI executable of sorts…
{
“Name”: “”,
“P”: [
{
“ID”: 1,
“Type”: “Phout”,
“PID”: “0”,
“OID”: 0,
“Name”: “Example”,
“Code”: “{"Code":"return ‘Hello World’;","Message Response":"Hello World","AlwaysExecute":"1","Description":"Hello World"}”
}
],
“Forms”: null,
“Data”: null,
“Functions”: null,
“CID”: “1”
}
I am not proposing that this is code that should be executed without due care and consideration like maybe a downloaded application… It is a shared process, packaged within a single file… That can be moulded with a little care (considering AI is non deterministic) into the thing you wanted to make…
It is a shape, an intelligent executable shape… That your AI application can ingest and return a reasonable process… Maybe from ingesting many shapes ^^…
Just add intent…
It is a container that any AI could read…
It is meant to contain both code and text… ie you CAN include actual code… Or you can contain Instructions for AI or indeed just plain text…

The following HTML/JS is supplied as is but it writes a single AgentGIF (000) Intent to any (Animated) GIF as a minimal working example ^^. (Written with o3)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>AgentGIF Embedder</title>
<style>
body { font-family: sans-serif; max-width: 600px; margin: 40px auto; }
textarea { width: 100%; height: 150px; font-family: monospace; }
input, button { margin-top: 10px; }
</style>
</head>
<body>
<h1>AgentGIF Embedder</h1>
<p>
1️⃣ Load a GIF file<br>
2️⃣ Paste or type valid JSON below<br>
3️⃣ Click “Embed & Download”
</p>
<input type="file" id="gifInput" accept="image/gif"><br>
<textarea id="jsonPayload" placeholder="Enter your JSON here…"></textarea><br>
<button id="embedBtn" disabled>Embed & Download</button>
<script>
(function(){
const gifInput = document.getElementById('gifInput');
const jsonPayload = document.getElementById('jsonPayload');
const embedBtn = document.getElementById('embedBtn');
let originalBuffer = null;
// Load GIF file as ArrayBuffer
gifInput.addEventListener('change', e => {
const file = e.target.files[0];
if (!file) return;
const reader = new FileReader();
reader.onload = () => {
originalBuffer = reader.result;
checkReady();
};
reader.readAsArrayBuffer(file);
});
// Validate JSON
jsonPayload.addEventListener('input', checkReady);
function checkReady() {
let ok = !!originalBuffer;
if (ok) {
try {
JSON.parse(jsonPayload.value);
} catch(_){ ok = false; }
}
embedBtn.disabled = !ok;
}
embedBtn.addEventListener('click', () => {
const jsonText = JSON.stringify(JSON.parse(jsonPayload.value));
const orig = new Uint8Array(originalBuffer);
const view = new DataView(originalBuffer);
// --- locate where to insert extensions ---
// header: 6 bytes, LSD: 7 bytes, optional GCT
let offset = 6 + 7;
const packed = view.getUint8(10);
if (packed & 0x80) {
const size = packed & 0x07;
offset += 3 * Math.pow(2, size + 1);
}
// --- build Netscape 2.0 loop extension (infinite) ---
const nsExt = [];
// Extension introducer + label + block size
nsExt.push(0x21, 0xFF, 0x0B);
// "NETSCAPE" + "2.0"
for (let c of "NETSCAPE2.0") nsExt.push(c.charCodeAt(0));
// data sub-block (3 bytes): size=3, ID=1, loopCount=0 (infinite little‑endian)
nsExt.push(0x03, 0x01, 0x00, 0x00);
// terminator
nsExt.push(0x00);
// --- build AgentGIF000 application extension with JSON payload ---
const agExt = [];
agExt.push(0x21, 0xFF, 0x0B);
// "AgentGIF" (8 bytes) + "000" (3 bytes)
for (let c of "AgentGIF000") agExt.push(c.charCodeAt(0));
// chunk JSON into 255‑byte sub-blocks
const encoder = new TextEncoder();
const dataBytes = encoder.encode(jsonText);
for (let i = 0; i < dataBytes.length; i += 255) {
const slice = dataBytes.subarray(i, i + 255);
agExt.push(slice.length);
agExt.push(...slice);
}
// terminator
agExt.push(0x00);
// --- stitch everything together ---
const before = orig.subarray(0, offset);
const after = orig.subarray(offset);
const out = new Uint8Array(
before.length + nsExt.length + agExt.length + after.length
);
let pos = 0;
out.set(before, pos); pos += before.length;
out.set(nsExt, pos); pos += nsExt.length;
out.set(agExt, pos); pos += agExt.length;
out.set(after, pos);
// --- download as GIF ---
const blob = new Blob([out], { type: 'image/gif' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = 'agentgifified.gif';
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
URL.revokeObjectURL(url);
});
})();
</script>
</body>
</html>



















