Remix.run Logo
q3k 12 hours ago

The code looks, at a glance, as bad as you expect.

tokioyoyo 11 hours ago | parent | next [-]

It really doesn’t matter anymore. I’m saying this as a person who used to care about it. It does what it’s generally supposed to do, it has users. Two things that matter at this day and age.

11 hours ago | parent | next [-]
[deleted]
samhh 11 hours ago | parent | prev | next [-]

It may be economically effective but such heartless, buggy software is a drain to use. I care about that delta, and yes this can be extrapolated to other industries.

tokioyoyo 11 hours ago | parent [-]

Genuinely I have no idea what you mean by buggy. Sure there are some problems here and there, but my personal threshold for “buggy” is much higher. I guess, for a lot of other people as well, given the uptake and usage.

aerhardt 2 hours ago | parent | next [-]

I've read a lot of people complain that it's buggy, here and in other forums.

mattmanser 9 hours ago | parent | prev [-]

Two weeks ago typing became super laggy. It was totally unusable.

Last week I had to reinstall Claude Desktop because every time I opened it, it just hung.

This week I am sometimes opening it and getting a blank screen. It eventually works after I open it a few times.

And of course there's people complaining that somehow they're blowing their 5 hour token budget in 5 messages.

It's really buggy.

There's only so long their model will be their advantage before they all become very similar, and then the difference will be how reliable the tools are.

Right now the Claude Code code quality seems extremely low.

tokioyoyo 8 hours ago | parent [-]

And those bugs were semi-fixed and people are still using it. So speed of fixes are there.

I can’t comment on Claude Desktop, sorry. Personally haven’t used it much.

The token usage looks like is intentional.

And I agree about the underlying model being the moat. If there’s something marginally better that comes up, people will switch to it (myself included). But for now it’s doing the job, despite all the hiccups, code quality and etc.

mattmanser 6 hours ago | parent [-]

Do you feel like rescinding your comment now this article is on the the HN front-page:

"Anthropic: Claude Code users hitting usage limits 'way faster than expected'"

https://news.ycombinator.com/item?id=47586176

Anthropic themselves have confirmed that something's wrong on reddit:

https://old.reddit.com/r/Anthropic/comments/1s7zfap/investig...

FiberBundle 11 hours ago | parent | prev | next [-]

This is the dumbest take there is about vibe coding. Claiming that managing complexity in a codebase doesn't matter anymore. I can't imagine that a competent engineer would come to the conclusion that managing complexity doesn't matter anymore. There is actually some evidence that coding agents struggle the same way humans do as the complexity of the system increases [0].

[0] https://arxiv.org/abs/2603.24755

tokioyoyo 11 hours ago | parent | next [-]

I agree, there is obviously “complete burning trash” and there’s this. Ant team has got a system going on for them where they can still extend the codebase. When time comes to it, I’m assuming they would be able to rewrite as feature set would be more solid and assuming they’ve been adding tests as well.

Reverse-engineering through tests have never been easier, which could collapse the complexity and clean the code.

maplethorpe 9 hours ago | parent | prev [-]

Well what is Anthropic doing differently to deal with this issue? Apparently they don't write any of their own code anymore, and they're doing fine.

nvarsj 8 hours ago | parent | next [-]

Cc is buggy as hell man. I frequently search the github for the issue I’m having only to find 10 exact bugs that no one is looking at.

Obviously they don’t care. Adoption is exploding. Boris brags about making 30 commits a day to the codebase.

Only will be an issue down the line when the codebase has such high entropy it takes months to add new features (maybe already there).

bakugo 8 hours ago | parent | prev [-]

Nothing, apparently, which is probably why Claude Code has 7893 open issues on Github at the time of writing.

otterley 7 hours ago | parent [-]

All software that’s popular has hundreds or thousands of issues filed against it. It’s not an objective indication of anything other than people having issues to report and a willingness and ability to report the issue.

It doesn’t mean every issue is valid, that it contains a suggestion that can be implemented, that it can be addressed immediately, etc. The issue list might not be curated, either, resulting in a garbage heap.

tomjakubowski 3 hours ago | parent [-]

For what one anecdote is worth: through casual use I've found a handful of annoying UI bugs in Claude Code, and all of them were already reported on the bug tracker and either still open, or auto-closed without a real resolution.

ghywertelling 9 hours ago | parent | prev | next [-]

Do compilers care about their assembly generated code to look good? We will soon reach that state with all the production code. LLMs will be the compiler and actual today's human code will be replaced by LLM generated assembly code, kinda sorta human readable.

hrmtst93837 11 hours ago | parent | prev | next [-]

Users stick around on inertia until a failure costs them money or face. A leaked map file won't sink a tool on its own, but it does strip away the story that you can ship sloppy JS build output into prod and still ask people to trust your security model.

'It works' is a low bar. If that's the bar you set you are one bad incident away from finding out who stayed for the product and who stayed because switching felt annoying.

tokioyoyo 11 hours ago | parent [-]

“It works and it’s doing what it’s supposed to do” encompasses the idea that it’s also not doing what it’s not supposed to do.

Also “one bad incident away” never works in practice. The last two decades have shown how people will use the tools that get the job done no matter what kinda privacy leaks, destructive things they have done to the user.

drstewart 8 hours ago | parent | prev [-]

>Two things that matter at this day and age.

That's all that has mattered in every day and age.

breppp 11 hours ago | parent | prev | next [-]

Honestly when using it, it feels vibe coded to the bone, together with the matching weird UI footgun quirks

tokioyoyo 11 hours ago | parent [-]

Team has been extremely open how it has been vibe coded from day 1. Given the insane amount of releases, I don’t think it would be possible without it.

catlifeonmars 10 hours ago | parent | next [-]

It’s not a particularly sophisticated tool. I’d put my money on one experienced engineer being able to achieve the same functionality in 3-6 months (even without the vibe coding).

tokioyoyo 8 hours ago | parent | next [-]

The same functionality can be copied over in a week most likely. The moat is experimentation and new feature releases with the underlying model. An engineer would not be able to experiment with the same speed.

derwiki 8 hours ago | parent | prev [-]

Kinda reads like the Dropbox launch thread

3 hours ago | parent | next [-]
[deleted]
3 hours ago | parent | prev [-]
[deleted]
breppp 10 hours ago | parent | prev [-]

I don't really care about the code being an unmaintainable mess, but as a user there are some odd choices in the flow which feel could benefit from human judgement

cruffle_duffle 2 hours ago | parent | prev | next [-]

It'd dogfooding the entire concept of vibe coding and honestly, that is a good thing. Obviously they care about that stuff, but if your ethos is "always vibe code" then a lot of the fixes to it become model & prompting changes to get the thing to act like a better coder / agent / sysadmin / whatever.

loevborg 12 hours ago | parent | prev | next [-]

Can you give an example? Looks fairly decent to me

Insensitivity 12 hours ago | parent | next [-]

the "useCanUseTool.tsx" hook, is definitely something I would hate seeing in any code base I come across.

It's extremely nested, it's basically an if statement soup

`useTypeahead.tsx` is even worse, extremely nested, a ton of "if else" statements, I doubt you'd look at it and think this is sane code

Overpower0416 11 hours ago | parent | next [-]

  export function extractSearchToken(completionToken: {
    token: string;
    isQuoted?: boolean;
  }): string {
    if (completionToken.isQuoted) {
      // Remove @" prefix and optional closing "
      return completionToken.token.slice(2).replace(/"$/, '');
    } else if (completionToken.token.startsWith('@')) {
      return completionToken.token.substring(1);
    } else {
      return completionToken.token;
    }
  }
Why even use else if with return...
kelnos 10 hours ago | parent | next [-]

I always write code like that. I don't like early returns. This approximates `if` statements being an expression that returns something.

catlifeonmars 9 hours ago | parent | next [-]

I’m not strongly opinionated, especially with such a short function, but in general early return makes it so you don’t need to keep the whole function body in your head to understand the logic. Often it saves you having to read the whole function body too.

But you can achieve a similar effect by keeping your functions small, in which case I think both styles are roughly equivalent.

whilenot-dev 9 hours ago | parent | prev [-]

> This approximates `if` statements being an expression that returns something.

Do you care to elaborate? "if (...) return ...;" looks closer to an expression for me:

  export function extractSearchToken(completionToken: { token: string; isQuoted?: boolean }): string {
    if (completionToken.isQuoted) return completionToken.token.slice(2).replace(/"$/, '');

    if (completionToken.token.startsWith('@')) return completionToken.token.substring(1);

    return completionToken.token;
  }
worksonmine 10 hours ago | parent | prev [-]

> Why even use else if with return...

What is the problem with that? How would you write that snippet? It is common in the new functional js landscape, even if it is pass-by-ref.

Overpower0416 10 hours ago | parent [-]

Using guard clauses. Way more readable and easy to work with.

  export function extractSearchToken(completionToken: {
    token: string;
    isQuoted?: boolean;
  }): string {
    if (completionToken.isQuoted) {
      return completionToken.token.slice(2).replace(/"$/, '');
    }
    if (completionToken.token.startsWith('@')) {
      return completionToken.token.substring(1);
    }
    return completionToken.token;
  }
duckmysick 10 hours ago | parent | prev | next [-]

I'm not that familiar with TypeScript/JavaScript - what would be a proper way of handling complex logic? Switch statements? Decision tables?

9 hours ago | parent | next [-]
[deleted]
catlifeonmars 9 hours ago | parent | prev [-]

Here I think the logic is unnecessarily complex. isQuoted is doing work that is implicit in the token.

luc_ 12 hours ago | parent | prev | next [-]

Fits with the origin story of Claude Code...

werdnapk 10 hours ago | parent [-]

insert "AI is just if statements" meme

loevborg 11 hours ago | parent | prev | next [-]

useCanUseTool.tsx looks special, maybe it'scodegen'ed or copy 'n pasted? `_c` as an import name, no comments, use of promises instead of async function. Or maybe it's just bad vibing...

Insensitivity 11 hours ago | parent [-]

Maybe, I do suspect _some_ parts are codegen or source map artifacts.

But if you take a look at the other file, for example `useTypeahead` you'd see, even if there are a few code-gen / source-map artifacts, you still see the core logic, and behavior, is just a big bowl of soup

matltc 11 hours ago | parent | prev [-]

Lol even the name is crazy

q3k 12 hours ago | parent | prev | next [-]

  1. Randomly peeking at process.argv and process.env all around. Other weird layering violations, too.
  2. Tons of repeat code, eg. multiple ad-hoc implementations of hash functions / PRNGs.
  3. Almost no high-level comments about structure - I assume all that lives in some CLAUDE.md instead.
delamon 11 hours ago | parent | next [-]

What is wrong with peeking at process.env? It is a global map, after all. I assume, of course, that they don't mutate it.

lioeters 10 hours ago | parent | next [-]

> process.env? It is a global map

That's exactly why, access to global mutable state should be limited to as small a surface area as possible, so 99% of code can be locally deterministic and side-effect free, only using values that are passed into it. That makes testing easier too.

withinboredom 10 hours ago | parent | prev | next [-]

environment variables can change while the process is running and are not memory safe (though I suspect node tries to wrap it with a lock). Meaning if you check a variable at point A, enter a branch and check it again at point B ... it's not guaranteed that they will be the same value. This can cause you to enter "impossible conditions".

hu3 11 hours ago | parent | prev | next [-]

For one it's harder to unit test.

q3k 10 hours ago | parent | prev [-]

It's implicit state that's also untyped - it's just a String -> String map without any canonical single source of truth about what environment variables are consulted, when, why and in what form.

Such state should be strongly typed, have a canonical source of truth (which can then be also reused to document environment variables that the code supports, and eg. allow reading the same options from configs, flags, etc) and then explicitly passed to the functions that need it, eg. as function arguments or members of an associated instance.

This makes it easier to reason about the code (the caller will know that some module changes its functionality based on some state variable). It also makes it easier to test (both from the mechanical point of view of having to set environment variables which is gnarly, and from the point of view of once again knowing that the code changes its behaviour based on some state/option and both cases should probably be tested).

loevborg 11 hours ago | parent | prev | next [-]

You're right about process.argv - wow, that looks like a maintenance and testability nightmare.

darkstar_16 11 hours ago | parent [-]

They use claude code to code it. Makes sense

s3p 11 hours ago | parent | prev [-]

It probably exists only in CLAUDE or AGENTS.md since no humans are working on the code!

wklm 11 hours ago | parent | prev [-]

have a look at src/bootstrap/state.ts :D

PierceJoy 11 hours ago | parent | prev | next [-]

Nothing a couple /simplify's can't take care of.

bakugo 8 hours ago | parent | prev | next [-]

It's impressive how fast vibe coders seem to flip-flop between "AI can write better code than you, there's no reason to write code yourself anymore; if you do, you're stuck in the past" and "AI writes bad code but I don't care about quality and neither should you; if you care, you're stuck in the past".

I hope this leak can at least help silence the former. If you're going to flood the world with slop, at least own up to it.

linesofcode 10 hours ago | parent | prev [-]

Code quality no longer carries the same weight as it did pre LLMs. It used to matter becuase humans were the ones reading/writing it so you had to optimize for readability and maintainability. But these days what matters is the AI can work with it and you can reliably test it. Obviously you don’t want code quality to go totally down the drain, but there is a fine balance.

Optimize for consistency and a well thought out architecture, but let the gnarly looking function remain a gnarly function until it breaks and has to be refactored. Treat the functions as black boxes.

Personally the only time I open my IDE to look at code, it’s because I’m looking at something mission critical or very nuanced. For the remainder I trust my agent to deliver acceptable results.