{
    "archive_path": "archive/1762678311.892836",
    "base_url": "lobste.rs/s/drrzx2/i_made_website_vibe_codes_itself",
    "basename": "i_made_website_vibe_codes_itself",
    "bookmarked_date": "2025-11-09 08:51",
    "canonical": {
        "archive_org_path": "https://web.archive.org/web/lobste.rs/s/drrzx2/i_made_website_vibe_codes_itself",
        "dom_path": "output.html",
        "favicon_path": "favicon.ico",
        "git_path": "git/",
        "google_favicon_path": "https://www.google.com/s2/favicons?domain=lobste.rs",
        "headers_path": "headers.json",
        "htmltotext_path": "htmltotext.txt",
        "index_path": "index.html",
        "media_path": "media/",
        "mercury_path": "mercury/content.html",
        "pdf_path": "output.pdf",
        "readability_path": "readability/content.html",
        "screenshot_path": "screenshot.png",
        "singlefile_path": "singlefile.html",
        "warc_path": "warc/",
        "wget_path": null
    },
    "domain": "lobste.rs",
    "downloaded_at": "2025-11-09T08:51:53.367089+00:00",
    "downloaded_datestr": "2025-11-09 08:51",
    "extension": "",
    "hash": "CXAXSFG0ASPG6NGAA5X4",
    "history": {
        "archive_org": [
            {
                "cmd": [
                    "/usr/bin/curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--proxy",
                    "socks5://tor-socks-proxy:9150",
                    "--head",
                    "--max-time",
                    "60",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 ArchiveBox/{VERSION} (+https://github.com/ArchiveBox/ArchiveBox/)",
                    "https://web.archive.org/save/https://lobste.rs/s/drrzx2/i_made_website_vibe_codes_itself"
                ],
                "cmd_version": "8.10.1",
                "end_ts": "2025-11-09T08:53:25.749817+00:00",
                "index_texts": null,
                "output": "TimeoutExpired: Command '['/usr/bin/curl', '--silent', '--location', '--compressed', '--proxy', 'socks5://tor-socks-proxy:9150', '--head', '--max-time', '60', '--user-agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 ArchiveBox/{VERSION} (+https://github.com/ArchiveBox/ArchiveBox/)', 'https://web.archive.org/save/https://lobste.rs/s/drrzx2/i_made_website_vibe_codes_itself']' timed out after 60 seconds",
                "pwd": "/data/archive/1762678311.892836",
                "schema": "ArchiveResult",
                "start_ts": "2025-11-09T08:52:25.690879+00:00",
                "status": "failed"
            }
        ],
        "dom": [
            {
                "cmd": [
                    "/usr/bin/chromium-browser",
                    "--proxy-server=socks5://tor-socks-proxy:9150",
                    "--disable-features=DarkMode",
                    "--run-all-compositor-stages-before-draw",
                    "--hide-scrollbars",
                    "--autoplay-policy=no-user-gesture-required",
                    "--no-first-run",
                    "--use-fake-ui-for-media-stream",
                    "--use-fake-device-for-media-stream",
                    "--simulate-outdated-no-au='Tue, 31 Dec 2099 23:59:59 GMT'",
                    "--headless=new",
                    "--no-sandbox",
                    "--no-zygote",
                    "--disable-dev-shm-usage",
                    "--disable-software-rasterizer",
                    "--disable-sync",
                    "--window-size=1440,2000",
                    "--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 ArchiveBox/{VERSION} (+https://github.com/ArchiveBox/ArchiveBox/)",
                    "--user-data-dir=/data/personas/Default/chrome_profile",
                    "--profile-directory=Default",
                    "--dump-dom",
                    "https://lobste.rs/s/drrzx2/i_made_website_vibe_codes_itself"
                ],
                "cmd_version": "131.0.6778",
                "end_ts": "2025-11-09T08:52:07.283821+00:00",
                "index_texts": null,
                "output": "output.html",
                "pwd": "/data/archive/1762678311.892836",
                "schema": "ArchiveResult",
                "start_ts": "2025-11-09T08:52:01.131860+00:00",
                "status": "succeeded"
            }
        ],
        "favicon": [
            {
                "cmd": [
                    "/usr/bin/curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--proxy",
                    "socks5://tor-socks-proxy:9150",
                    "--max-time",
                    "60",
                    "--output",
                    "favicon.ico",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 ArchiveBox/{VERSION} (+https://github.com/ArchiveBox/ArchiveBox/)",
                    "https://www.google.com/s2/favicons?domain=lobste.rs"
                ],
                "cmd_version": "8.10.1",
                "end_ts": "2025-11-09T08:51:56.913706+00:00",
                "index_texts": null,
                "output": "favicon.ico",
                "pwd": "/data/archive/1762678311.892836",
                "schema": "ArchiveResult",
                "start_ts": "2025-11-09T08:51:53.797588+00:00",
                "status": "succeeded"
            }
        ],
        "git": [],
        "headers": [
            {
                "cmd": [
                    "/usr/bin/curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--proxy",
                    "socks5://tor-socks-proxy:9150",
                    "--head",
                    "--max-time",
                    "60",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 ArchiveBox/{VERSION} (+https://github.com/ArchiveBox/ArchiveBox/)",
                    "https://lobste.rs/s/drrzx2/i_made_website_vibe_codes_itself"
                ],
                "cmd_version": "8.10.1",
                "end_ts": "2025-11-09T08:51:57.310338+00:00",
                "index_texts": null,
                "output": "headers.json",
                "pwd": "/data/archive/1762678311.892836",
                "schema": "ArchiveResult",
                "start_ts": "2025-11-09T08:51:56.941223+00:00",
                "status": "succeeded"
            }
        ],
        "htmltotext": [
            {
                "cmd": [
                    "(internal) archivebox.extractors.htmltotext",
                    "./{singlefile,dom}.html"
                ],
                "cmd_version": "0.8.5rc51",
                "end_ts": "2025-11-09T08:52:20.421554+00:00",
                "index_texts": [
                    "(/touch-icon-144.png) (/touch-icon.png) (/touch-icon.png) (/touch-icon-144.png) (/touch-icon-144.png) (/opensearch.xml) (Lobsters) (/favicon.ico) (https://lobste.rs/s/drrzx2/i_made_website_vibe_codes_itself) I made a website that vibe-codes itself | Lobsters (/assets/application-d52b6398.css) (/assets/system-system-fd030c9d.css) (/assets/tom-select-9d6bcb6b.css) (/assets/TomSelect_remove_button-4d5c34b9.css)  (/) (Lobsters (Current traffic: 0%))  (/active) Active (/recent) Recent (/comments) Comments (/search) Search (/login) Login   (/login) Login   (/login) 28  (https://theboard.stavros.io) I made a website that vibe-codes itself  (Using AI/LLM, coding tools. Don't also tag with `ai`.) (/t/vibecoding) vibecoding (Web development and news) (/t/web) web  (/domains/theboard.stavros.io) theboard.stavros.io authored by (/~stavros) (stavros avatar)  (/~stavros) stavros (2025-11-04 08:16:31) 4 days ago |  caches (https://web.archive.org/web/3/https%3A%2F%2Ftheboard.stavros.io) Archive.org (https://archive.today/https%3A%2F%2Ftheboard.stavros.io) Archive.today (https://ghostarchive.org/search?term=https%3A%2F%2Ftheboard.stavros.io) Ghostarchive   | (/s/drrzx2/i_made_website_vibe_codes_itself#comments_story_01k97kkyhmepkbpc3hdwp3228n) 24\n              comments         (cBUf9cRLOidCIlA5zADwEmawtuNaV4HwKNWKKdH0Y85XlHTsjbBANQAVIQDuC9xBY2xPnS_q36Osnlm6n0vRgQ) (drrzx2) (post) (You must be logged in to leave a comment.)  (Post) Preview           (/login) 12   (/~stavros) (stavros avatar)  (/~stavros) stavros (/c/yvytz8) (2025-11-04 13:58:16) 4 days ago      I made another collaborative thing last week, one where you drew something, I shared it somewhere and within ten minutes it was full of dicks and swastikas. For this one, the top-rated feature is a button that deletes the website. These two projects have really been successful in destroying my faith in humanity.      (/login) 3   (/~dubiouslittlecreature) (dubiouslittlecreature avatar)  (/~dubiouslittlecreature) dubiouslittlecreature (/c/5avqch) (2025-11-04 19:20:21) 4 days ago      Wait, did you veto the delete the website button? I just wrote a feature request to just delete the website (and also publish everyone\u2019s username and password on a replacement static website)       (/login) 12   (/~stavros) (stavros avatar)  (/~stavros) stavros (/c/oaiidw) (2025-11-04 20:22:47) 4 days ago      I did, for multiple reasons: You vote-brigaded it with 70 fake accounts. It wouldn't work anyway, the site would simply continue running because all the code is in memory by that point, and there are no secrets to publish anyway. You're welcome to the bcrypt hashes.  And, as a general aside, these were just boring, lazy feature requests that showed zero imagination or innovation. It was just a childish \"lol fuck all this\", and I'm annoyed that you'd spend so much time making 70 accounts just to get such an infantile request through.       (/login) 3   (/~dubiouslittlecreature) (dubiouslittlecreature avatar)  (/~dubiouslittlecreature) dubiouslittlecreature (/c/8pthzq) (2025-11-05 07:48:56) 3 days ago      You vote-brigaded it with 70 fake accounts.  No sorry, I should clarify. That one wasn\u2019t me. I did not make a suggestion to add a button that deletes the website, and I did not make 70 accounts to vote brigade it. Someone else did that. I independently had the idea to do something similar, I made a suggestion specifically to \u201cdelete the website and publish all the usernames and passwords used\u201d I will admit to it not being a very serious suggestion. My main objection to the other person who suggested it is that they vote brigaded with alts.       (/login) 1   (/~stavros) (stavros avatar)  (/~stavros) stavros (/c/t3cipf) (2025-11-05 11:36:14) 3 days ago      Ahh ok. Yeah, I don't mind random suggestions like that, but when they're brigaded, that annoys me. Let the community vote for what it wants.               (/login) 2   (/~gnyeki) (gnyeki avatar)  (/~gnyeki) gnyeki (/c/tpgoam) (2025-11-05 02:11:59) 4 days ago      These two projects have really been successful in destroying my faith in humanity.  I\u2019m sorry that that happened. Putting the creative effort into something and seeing it defaced must be really disheartening. FWIW, if just 1% of users are immature enough, they can spam the site with dick drawings, even though the other 99% think that\u2019s bad.       (/login) 2   (/~stavros) (stavros avatar)  (/~stavros) stavros (/c/mqkcr2) (2025-11-05 03:14:45) 3 days ago      Yeah, that's true, and the immature users will expend much more effort than the legitimate ones as well, even going so far as making multiple accounts to spread their toxicity.           (/login) 1   (/~spc476) (spc476 avatar)  (/~spc476) spc476 (/c/8ba8md) (2025-11-04 17:38:04) 4 days ago      I'm surprised it was a feature to delete the website, and not to steal web credentials.       (/login) 2   (/~stavros) (stavros avatar)  (/~stavros) stavros (/c/diidvc) (2025-11-04 17:56:06) 4 days ago      Oh there are variations of both of those. It's not clever or funny, but someone still thought it was a good use of time to make a bunch of accounts for that.       (/login) 1   (/~apromixately) (apromixately avatar)  (/~apromixately) apromixately (/c/3kpnkh) (2025-11-05 00:42:26) 4 days ago      It's only not clever if you've thought about it already and it is a totally legitimate attack on this kind of project.       (/login) 1   (/~stavros) (stavros avatar)  (/~stavros) stavros (/c/xb1nwm) (2025-11-05 03:12:40) 3 days ago      You think I haven't thought about \"publish all the passwords\" already? Why do you think the site uses usernames instead of email addresses?       (/login) 1   (/~apromixately) (apromixately avatar)  (/~apromixately) apromixately (/c/hatrvh) (2025-11-05 07:25:47) 3 days ago      No, I am saying other people might not have that's why some think it's clever...       (/login) 1   (/~stavros) (stavros avatar)  (/~stavros) stavros (/c/vjrnii) (2025-11-05 11:38:52) 3 days ago      Ahh, yeah, unfortunately :(                     (/login) 4   (/~Student) (Student avatar)  (/~Student) Student (/c/hbhn4c) (2025-11-04 08:32:41) 4 days ago      I was hoping that this would vibe code itself in the browser, because that\u2019s something I want to try. What\u2019s holding me back right now is that I\u2019ve never implemented an agent or even read the source code of an agent. (Pointers appreciated from any kind souls).      (/login) 6   (/~stavros) (stavros avatar)  (/~stavros) stavros (/c/ya38nr) (2025-11-04 08:52:59) 4 days ago      An agent is just: while agent_wants_to_do_more_stuff:\n  do_more_stuff()   And then a million optimizations specific to the use case.         (/login) 5   (/~markerz) (markerz avatar)  (/~markerz) markerz edited (/c/x8c4oj) (2025-11-04 09:14:48) 4 days ago      Read (https://ampcode.com/how-to-build-an-agent) https://ampcode.com/how-to-build-an-agent , and skip the code blocks.  The authors words are enough to understand how everything works. At a high level, it\u2019s asking the agent to output a specific format for tool calls vs text output.  Then you parse the output, exec any tools, and loop if needed.  The agent knows about what tools are available cause you provide it in the context.  It\u2019s quite easy to implement, I encourage you to try.  This is genuinely how Agents are built everywhere and really demystifies agents.  It also showed me how poorly implemented a lot of early agents were and how there\u2019s so much room for improvement in basic agent architecture.       (/login) 1   (/~Student) (Student avatar)  (/~Student) Student (/c/74pjak) (2025-11-04 09:24:55) 4 days ago      Appreciated. I\u2019ll probably eventually have questions about how to avoid the early mistakes but at least I\u2019ll be in a better position to read the code of existing agents.           (/login) 4   (/~nikki93) (nikki93 avatar)  (/~nikki93) nikki93 edited (/c/r1hd2q) (2025-11-04 19:44:45) 4 days ago      Following up. Here's a very basic demo of agent chat that can self-modify the website it's running in: (https://gist.github.com/nikki93/c196411e67c7bc5ab9da51667fe24e9c) https://gist.github.com/nikki93/c196411e67c7bc5ab9da51667fe24e9c  Video of running that (YouTube decided to make it a 'short' because of the aspect ratio...): (https://www.youtube.com/shorts/Gsix-ixtKyM) https://www.youtube.com/shorts/Gsix-ixtKyM  Need to paste in an Anthropic API key in the above code to run it (where it says to in the NOTE comment). This code is from a while back; these days I use OpenRouter which lets you use one API key of theirs and call out to many other LLM providers. Instead of these can also use a local model etc. The code stays the same, just calling a different endpoint (or could run a model within the web page...).       (/login) 2   (/~Student) (Student avatar)  (/~Student) Student (/c/chtsj7) (2025-11-04 20:24:21) 4 days ago      Thank you, this is fantastic. This has helped a lot.       (/login) 2   (/~nikki93) (nikki93 avatar)  (/~nikki93) nikki93 (/c/txomha) (2025-11-05 13:03:09) 3 days ago      Glad it helped! Video of the three.js experiment to show what's possible with this kind of thing: (https://youtu.be/RtsU2uYO_mE) https://youtu.be/RtsU2uYO_mE  I also had something that was a tiling window manager of React components that the LLM could livecode. I'm trying something more like a 2d grid based / turn based environment now to see how it goes with gameplay and narrative iteration... Inspired by Caves of Qud, Dungeon Crawl Stone Soup, etc.             (/login) 2   (/~nikki93) (nikki93 avatar)  (/~nikki93) nikki93 edited (/c/k5hiss) (2025-11-04 09:06:07) 4 days ago      I've tried doing this in a few different prototypes (generating react components, generating three.js scenes, ...). Basically: do an http fetch to an LLM API (I use Openrouter), parse the code out of the rresponse (could be in a markdown block, could be a tool call), eval the code. I can post some example code / video soon...           (/login) 2   (/~mudkip) (mudkip avatar)  (/~mudkip) mudkip edited (/c/mtjwe6) (2025-11-04 23:32:53) 4 days ago      I wish that for the first few days of the site's existance, the vote happened every 6-12 hours or maybe the top 3 suggestions got selected instead. The idea is cool, but I'm too early to witness the chaos of what will happen      (/login) 0   (/~stavros) (stavros avatar)  (/~stavros) stavros (/c/prka7o) (2025-11-05 03:15:13) 3 days ago      Hm that's a good suggestion, maybe I'll change it. My worry is that there won't be enough votes, but I guess we can see about it.           (/login) 1   (/~stavros) (stavros avatar)  (/~stavros) stavros (/c/luyc7p) (2025-11-05 11:38:46) 3 days ago      In honor of this community (and because the votes didn't look like they'd affect the result), I decided to run one more iteration today! The top suggestion is being implemented as we speak.           (/about) About (/tags) Tags (/filters) Filter (/moderations) Moderation Log       "
                ],
                "output": "htmltotext.txt",
                "pwd": "/data/archive/1762678311.892836",
                "schema": "ArchiveResult",
                "start_ts": "2025-11-09T08:52:20.380920+00:00",
                "status": "succeeded"
            }
        ],
        "media": [
            {
                "cmd": [
                    "/usr/local/bin/yt-dlp",
                    "--restrict-filenames",
                    "--trim-filenames",
                    "128",
                    "--write-description",
                    "--write-info-json",
                    "--write-annotations",
                    "--write-thumbnail",
                    "--no-call-home",
                    "--write-sub",
                    "--write-auto-subs",
                    "--convert-subs=srt",
                    "--yes-playlist",
                    "--continue",
                    "--no-abort-on-error",
                    "--ignore-errors",
                    "--geo-bypass",
                    "--add-metadata",
                    "--format=(bv*+ba/b)[filesize<=750m][filesize_approx<=?750m]/(bv*+ba/b)",
                    "--skip-download",
                    "--cache-dir=/data/yt-dlp-cache/",
                    "--cookies=/data/yt-dlp-cache/cookies.txt",
                    "--proxy=socks5://tor-socks-proxy:9150",
                    "--no-playlist",
                    "https://lobste.rs/s/drrzx2/i_made_website_vibe_codes_itself"
                ],
                "cmd_version": "2024.10.7",
                "end_ts": "2025-11-09T08:52:25.654327+00:00",
                "index_texts": [],
                "output": "media/",
                "pwd": "/data/archive/1762678311.892836",
                "schema": "ArchiveResult",
                "start_ts": "2025-11-09T08:52:21.895466+00:00",
                "status": "succeeded"
            }
        ],
        "mercury": [
            {
                "cmd": [
                    "/home/archivebox/.npm/bin/postlight-parser",
                    "https://lobste.rs/s/drrzx2/i_made_website_vibe_codes_itself"
                ],
                "cmd_version": "2.2.3",
                "end_ts": "2025-11-09T08:52:20.359877+00:00",
                "index_texts": null,
                "output": "mercury/",
                "pwd": "/data/archive/1762678311.892836",
                "schema": "ArchiveResult",
                "start_ts": "2025-11-09T08:52:16.879718+00:00",
                "status": "succeeded"
            }
        ],
        "pdf": [],
        "readability": [
            {
                "cmd": [
                    "/home/archivebox/.npm/bin/readability-extractor",
                    "/tmp/tmpz64qkyrk",
                    "https://lobste.rs/s/drrzx2/i_made_website_vibe_codes_itself"
                ],
                "cmd_version": "0.0.11",
                "end_ts": "2025-11-09T08:52:11.250678+00:00",
                "index_texts": [
                    "I made another collaborative thing last week, one where you drew something, I shared it somewhere and within ten minutes it was full of dicks and swastikas. For this one, the top-rated feature is a button that deletes the website.\nThese two projects have really been successful in destroying my faith in humanity.\n\n    \n\n\n\n\n        \n\n    \n\n\n\n\n\n      \n\n    \n    Wait, did you veto the delete the website button? I just wrote a feature request to just delete the website (and also publish everyone\u2019s username and password on a replacement static website)\n  \n\n\n      \n\n\n        \n\n    \n\n\n\n\n\n      \n\n        I did, for multiple reasons:\n\nYou vote-brigaded it with 70 fake accounts.\nIt wouldn't work anyway, the site would simply continue running because all the code is in memory by that point, and there are no secrets to publish anyway. You're welcome to the bcrypt hashes.\n\nAnd, as a general aside, these were just boring, lazy feature requests that showed zero imagination or innovation. It was just a childish \"lol fuck all this\", and I'm annoyed that you'd spend so much time making 70 accounts just to get such an infantile request through.\n\n    \n\n\n      \n\n\n        \n\n    \n\n\n\n\n\n      \n\n        \nYou vote-brigaded it with 70 fake accounts.\n\nNo sorry, I should clarify. That one wasn\u2019t me. I did not make a suggestion to add a button that deletes the website, and I did not make 70 accounts to vote brigade it.\nSomeone else did that.\nI independently had the idea to do something similar, I made a suggestion specifically to \u201cdelete the website and publish all the usernames and passwords used\u201d\nI will admit to it not being a very serious suggestion. My main objection to the other person who suggested it is that they vote brigaded with alts.\n\n    \n\n\n      \n\n\n        \n\n    \n\n\n\n\n\n      \n\n    \n    Ahh ok. Yeah, I don't mind random suggestions like that, but when they're brigaded, that annoys me. Let the community vote for what it wants.\n  \n\n\n      \n\n\n        \n\n            \n          \n            \n          \n            \n          \n\n        \n\n    \n\n\n\n\n\n      \n\n        \nThese two projects have really been successful in destroying my faith in humanity.\n\nI\u2019m sorry that that happened. Putting the creative effort into something and seeing it defaced must be really disheartening.\nFWIW, if just 1% of users are immature enough, they can spam the site with dick drawings, even though the other 99% think that\u2019s bad.\n\n    \n\n\n      \n\n\n        \n\n    \n\n\n\n\n\n      \n\n    \n    Yeah, that's true, and the immature users will expend much more effort than the legitimate ones as well, even going so far as making multiple accounts to spread their toxicity.\n  \n\n\n      \n\n\n        \n\n            \n          \n\n        \n\n    \n\n\n\n\n\n      \n\n    \n    I'm surprised it was a feature to delete the website, and not to steal web credentials.\n  \n\n\n      \n\n\n        \n\n    \n\n\n\n\n\n      \n\n    \n    Oh there are variations of both of those. It's not clever or funny, but someone still thought it was a good use of time to make a bunch of accounts for that.\n  \n\n\n      \n\n\n        \n\n    \n\n\n\n\n\n      \n\n    \n    It's only not clever if you've thought about it already and it is a totally legitimate attack on this kind of project.\n  \n\n\n      \n\n\n        \n\n    \n\n\n\n\n\n      \n\n    \n    You think I haven't thought about \"publish all the passwords\" already? Why do you think the site uses usernames instead of email addresses?\n  \n\n\n      \n\n\n        \n\n    \n\n\n\n\n\n      \n\n    \n    No, I am saying other people might not have that's why some think it's clever...\n  \n\n\n      \n\n\n        \n\n    \n\n\n\n\n\n      \n\n    \n    Ahh, yeah, unfortunately :(\n  \n\n\n      \n\n\n        \n\n            \n          \n            \n          \n            \n          \n            \n          \n            \n          \n            \n          \n\n        \n\n    \n\n\n\n\n\n      \n\n    \n    I was hoping that this would vibe code itself in the browser, because that\u2019s something I want to try. What\u2019s holding me back right now is that I\u2019ve never implemented an agent or even read the source code of an agent. (Pointers appreciated from any kind souls).\n  \n\n\n\n\n        \n\n    \n\n\n\n\n\n      \n\n        An agent is just:\nwhile agent_wants_to_do_more_stuff:\n  do_more_stuff()\n\nAnd then a million optimizations specific to the use case.\n\n    \n\n\n      \n\n\n        \n\n\n        \n\n    \n\n\n\n\n\n      \n\n        Read https://ampcode.com/how-to-build-an-agent, and skip the code blocks.  The authors words are enough to understand how everything works.\nAt a high level, it\u2019s asking the agent to output a specific format for tool calls vs text output.  Then you parse the output, exec any tools, and loop if needed.  The agent knows about what tools are available cause you provide it in the context.  It\u2019s quite easy to implement, I encourage you to try.  This is genuinely how Agents are built everywhere and really demystifies agents.  It also showed me how poorly implemented a lot of early agents were and how there\u2019s so much room for improvement in basic agent architecture.\n\n    \n\n\n      \n\n\n        \n\n    \n\n\n\n\n\n      \n\n    \n    Appreciated. I\u2019ll probably eventually have questions about how to avoid the early mistakes but at least I\u2019ll be in a better position to read the code of existing agents.\n  \n\n\n      \n\n\n        \n\n            \n          \n\n        \n\n    \n\n\n\n\n\n      \n\n        Following up. Here's a very basic demo of agent chat that can self-modify the website it's running in: https://gist.github.com/nikki93/c196411e67c7bc5ab9da51667fe24e9c\nVideo of running that (YouTube decided to make it a 'short' because of the aspect ratio...): https://www.youtube.com/shorts/Gsix-ixtKyM\nNeed to paste in an Anthropic API key in the above code to run it (where it says to in the NOTE comment). This code is from a while back; these days I use OpenRouter which lets you use one API key of theirs and call out to many other LLM providers. Instead of these can also use a local model etc. The code stays the same, just calling a different endpoint (or could run a model within the web page...).\n\n    \n\n\n      \n\n\n        \n\n    \n\n\n\n\n\n      \n\n    \n    Thank you, this is fantastic. This has helped a lot.\n  \n\n\n      \n\n\n        \n\n    \n\n\n\n\n\n      \n\n        Glad it helped!\nVideo of the three.js experiment to show what's possible with this kind of thing: https://youtu.be/RtsU2uYO_mE\nI also had something that was a tiling window manager of React components that the LLM could livecode.\nI'm trying something more like a 2d grid based / turn based environment now to see how it goes with gameplay and narrative iteration... Inspired by Caves of Qud, Dungeon Crawl Stone Soup, etc.\n\n    \n\n\n      \n\n\n        \n\n            \n          \n            \n          \n\n        \n\n    \n\n\n\n\n\n      \n\n        I've tried doing this in a few different prototypes (generating react components, generating three.js scenes, ...).\nBasically: do an http fetch to an LLM API (I use Openrouter), parse the code out of the rresponse (could be in a markdown block, could be a tool call), eval the code. I can post some example code / video soon...\n\n    \n\n\n      \n\n\n        \n\n            \n          \n\n        \n\n    \n\n\n\n\n\n      \n\n    \n    I wish that for the first few days of the site's existance, the vote happened every 6-12 hours or maybe the top 3 suggestions got selected instead. The idea is cool, but I'm too early to witness the chaos of what will happen\n  \n\n\n\n\n        \n\n    \n\n\n\n\n\n      \n\n    \n    Hm that's a good suggestion, maybe I'll change it. My worry is that there won't be enough votes, but I guess we can see about it.\n  \n\n\n      \n\n\n        \n\n            \n          \n\n        \n\n    \n\n\n\n\n\n      \n\n    \n    In honor of this community (and because the votes didn't look like they'd affect the result), I decided to run one more iteration today! The top suggestion is being implemented as we speak."
                ],
                "output": "readability/",
                "pwd": "/data/archive/1762678311.892836",
                "schema": "ArchiveResult",
                "start_ts": "2025-11-09T08:52:08.359740+00:00",
                "status": "succeeded"
            }
        ],
        "screenshot": [],
        "singlefile": [],
        "title": [
            {
                "cmd": [
                    "/usr/bin/curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--proxy",
                    "socks5://tor-socks-proxy:9150",
                    "--max-time",
                    "60",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 ArchiveBox/{VERSION} (+https://github.com/ArchiveBox/ArchiveBox/)",
                    "https://lobste.rs/s/drrzx2/i_made_website_vibe_codes_itself"
                ],
                "cmd_version": "8.10.1",
                "end_ts": "2025-11-09T08:52:07.382236+00:00",
                "index_texts": null,
                "output": "I made a website that vibe-codes itself | Lobsters",
                "pwd": "/data/archive/1762678311.892836",
                "schema": "ArchiveResult",
                "start_ts": "2025-11-09T08:52:07.329307+00:00",
                "status": "succeeded"
            }
        ],
        "wget": []
    },
    "icons": null,
    "is_archived": true,
    "is_static": false,
    "latest": {
        "archive_org": "TimeoutExpired: Command '['/usr/bin/curl', '--silent', '--location', '--compressed', '--proxy', 'socks5://tor-socks-proxy:9150', '--head', '--max-time', '60', '--user-agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 ArchiveBox/{VERSION} (+https://github.com/ArchiveBox/ArchiveBox/)', 'https://web.archive.org/save/https://lobste.rs/s/drrzx2/i_made_website_vibe_codes_itself']' timed out after 60 seconds",
        "dom": "output.html",
        "favicon": "favicon.ico",
        "git": null,
        "media": "media/",
        "pdf": null,
        "screenshot": null,
        "singlefile": null,
        "title": "I made a website that vibe-codes itself | Lobsters",
        "warc": null,
        "wget": null
    },
    "link_dir": "/data/archive/1762678311.892836",
    "newest_archive_date": "2025-11-09T08:52:25.690879+00:00",
    "num_failures": 1,
    "num_outputs": 8,
    "oldest_archive_date": "2025-11-09T08:51:53.797588+00:00",
    "path": "/s/drrzx2/i_made_website_vibe_codes_itself",
    "schema": "Link",
    "scheme": "https",
    "snapshot_abid": "snp_01K9KX12ZQ0CA4B8A3011XSF6K",
    "snapshot_id": "b83976d4-d161-408c-a07c-a02d43dcbcd3",
    "sources": [
        "/data/sources/1762678310-import.txt"
    ],
    "tags": null,
    "tags_str": "",
    "timestamp": "1762678311.892836",
    "title": "I made a website that vibe-codes itself | Lobsters",
    "url": "https://lobste.rs/s/drrzx2/i_made_website_vibe_codes_itself"
}