8 ms·
Building a Mac app with Claude code
- amelius 1y ago> I've been building software for the Mac since 2008 Ok, so they knew where Claude went wrong and could correct for it.
- simonw 1y agoRight: tools like Claude Code amplify existing skills and expertise, they don't replace it.
- risyachka 1y agoThe main issue here is you can’t acquire expertise by using llm to code for you. So unless you have 15+ yoe better add more reps. You can always switch to llm code assist in a blink, there is no barrier to entry at all.
- willsmith72 1y ago> The main issue here is you can’t acquire expertise by using llm to code for you. Agreed, but I wish I had it as a teacher while learning. The amount of help my interns need from me has reduced by at least 50%, and what remains is the non-trivial stuff which is completely worth my time to coach and mentor them
- nojito 1y ago>The main issue here is you can’t acquire expertise by using llm to code for you. You learn far far faster from reading code and writing tests than you do just writing code alone. I've long suspected for years that the bottleneck to software development is in code generation not keeping up with idea generation.
- risyachka 1y agoYou learn by trying to solve the problem by yourself. This is not about syntax but about learning how to create solutions. When you read solution you merely memorise existing ones. You don’t learn how to come up with your own.
- nojito 1y ago>When you read solution you merely memorise existing ones. You don’t learn how to come up with your own. You can't solve programming problems without reading code. Period. The more code you read the better you get at solving problems because your internal knowledgebase grows.
- AnotherGoodName 1y agoI tend to learn via code examples. 20+ years of experience and the llms have taught me about some features of libraries i was using but overlooked. I think they add to expertise honestly.
- freedomben 1y agoI wonder how common this is. Personally, looking at code examples can be helpful, but the vast majority of my learning comes from doing, failing, trying a different approach, succeeding, rinsing and repeating. I also haven't had much luck with getting llms to generate useful code. I'm sure part of that is the stack I am using is much less popular (elixir) than many others, but I have tried everything even the new phoenix.new , and it is only about an 80 to 90% solution, but that remaining percentage is full of bugs or terrible design patterns that will absolutely bite in the future. In nearly everything I've tried to do, it introduces bugs and bug hunting those down is worse to me than if I just did the work manually in the first place. I have spent hours trying to coach the AI through a particular task, only to have the end solution need to be thrown away and started from scratch. Speaking personally, My skills are atrophying the more I use the AI tools. It still feels like a worthwhile trade-off in many situations, but a trade-off it is
- cosmic_cheese 1y agoI also have not had much luck with LLMs when it comes to anything with substantial complexity. Where I’ve found them best is for generating highly focused examples of specific APIs or concepts. They’re much better at that, though hallucinations still show up from time to time.
- kiitos 1y agoIn my experience they very consistently diminish existing skills/expertise...
- simonw 1y agoHate to say it, but that means you're holding them wrong. If they diminish your skills, you're letting them do that. Learn to apply these tools in a way that helps you learn more things and do better work.
- Leave_OAI_Alone 1y agoThe ability to spin up a single page tool for converting timestamps or counting tokens or analyzing a few hardcoded weasel words is handy: nobody disputes that. But that is not the work most of us do. In the real world, away from those whose salary depends on marketing these agentic tools, an LLM is a context shredder. It provides plausible code snippets that are globally incoherent and don't fit style. CONVENTIONS and RULES files are a kludge, a sloppy hack. These tools flatten the deep, interconnected knowledge required to work on complex systems into a series of shallow, transactional loops that pretend to satisfy the user. The skill being diminished is not the ability to write a single-page utility or single-purpose script. It is the ability to build and maintain a mental model of a complex machine. The ability to churn out a hundred disparate toy tools is not evidence of a superior learning method, it is evidence of a tool that excels at tasks with no deep interconnected context.
- simonw 1y agoBuilding the stuff on https://tools.simonwillison.net https://tools.simonwillison.net only represents about 10% of the coding work I do with LLMs. I wrote about my process for non-vibe-coded projects here: https://simonwillison.net/2025/Mar/11/using-llms-for-code/ https://simonwillison.net/2025/Mar/11/using-llms-for-code/ > The skill being diminished is not the ability to write a single-page utility or single-purpose script. It is the ability to build and maintain a mental model of a complex machine. That's the thing that LLMs help me with 90% of the time. It's also why I don't think non-programmers armed with LLMs are a threat to my career.
- dangus 1y agoAnd at the bottom it’s revealed that this costs $200/month. I have trouble convincing myself to give Autodesk $50/month and I need that software for my primary hobby. And none of these AI companies are profitable. Imagine how much it will cost or how much it will be enshittified when the investors come looking for their returns. If everyone whose code illegally trained these models won a copyright lawsuit against Claude it would suddenly not be so good at writing swift code. Do we really want to bet on Disney losing their AI lawsuit? Honestly I realize my comment is not adding much to the discussion but the AI fatigue is real. At this point I think HN and other tech forums would do well to ban the topic for posts like this. Imagine if we were upvoting stories about how people are getting lots of coding done easier with Google and StackOverflow. It would be rightfully ridiculed as vapid content. Ultimately that’s what this blog post is. I really don’t care to hear how yet another dingus “programmer” is using AI to do their hobby/job for them.
- bwb 1y agoMaybe, but cost is going down fast on tokens, so this will likely be less of an issue.
- rvnx 1y agoOn Gemini it is actually going up
- nojito 1y agoOn average the change was a cost decrease because of the thinking token price decrease. For people who do not need thinking they can use flash lite which is cheaper as well.
- dangus 1y agoSounds like the product is stagnating and the only way to get the better thing is to pay more, which is kind of like saying you can get a faster server if you pay more. That isn’t moore’s law-style progress. If AI is truly progressing at the amazing rate that everyone is claiming then we should be continually getting better capability at the same price.
- submeta 1y agoVery well written and a joy to read. Yes, IDEs of the future will not look like those we have today. I too started with Cursor and similar VS Code enhanced IDEs. And ended up using Claude Code. And realised my terminal is more important for me now. So I migrated from iTerm to Ghostty (faster, lighter, more modern), Tmux and Tmuxinator, and NeoVim! Because I just cat/bat files and occasionally edit a file, if at all. Claude Code does the heavy lifting, I write specs and prompts, in NeoVim or Emacs. And I am loving my workflow. I too use Claude Code for more then just generating code. Whenever I need to rewrite a config file (for zsh, neovim, ghostty, etc), I start Claude code and assign the task to do it. It will do the changes and even refactor my settings file in a few minute. Lastly, I use it to ask questions about my codebase, refactor code, let it document my code, even make meaningful commits. Pure awesomeness.
- indigodaddy 1y agoWill CC automatically backup these personal configs you are talking about, say .zshrc, before making changes?
- AnotherGoodName 1y agoIt’s a feature of the ide but pretty much all of them have an option for ais to only change code via a merge and review process. It’s not the ai changing directly, it’s heres a diff; accept, change, discard process after the prompt. Past there the ides usually have a local history and yiu can also use git.
- submeta 1y agoI keep track of all my config files via git. And after any change I make a commit (ask the tool to do that).
- alwillis 1y ago> Lastly, I use it to ask questions about my codebase, refactor code, let it document my code, even make meaningful commits. I've found that CC writes really good commits; I added info about Conventional Commits [1] to the CLAUDE.md file with a few examples. [1]: https://www.conventionalcommits.org/en/v1.0.0/#summary https://www.conventionalcommits.org/en/v1.0.0/#summary
- pyman 1y agoTwo years ago, I saw myself as a really good Python engineer. Now I'm building native mobile apps, desktop apps that talk to Slack, APIs in Go, and full web apps in React, in hours or days! It feels like I've got superpowers. I love it. I feel productive, fast, creative. But at night, there's this strange feeling of sadness. My profession, my passion, all the things I worked so hard to learn, all the time and sacrifices, a machine can now do most of it. And the companies building these tools are just getting started. What does this mean for the next generation of engineers? Where's it all heading? Do you feel the same?
- mococa 1y agoI have the exact same feeling. 100x more engineering at cost of some questions.
- anon7000 1y agoI think it’s yet another layer of abstraction on top of complex ideas. There will always be room for people working on the infrastructure, tools, maintenance, and operations side of things. The biggest danger is if you stop learning because you trust AI to just do it. I’ve been (carefully) using AI on some AWS infrastructure stuff which I don’t know about. Whenever it proposes something, I research and learn what it’s actually trying to do. I’ve been learning quickly with this approach because it helps point me in the right direction, so I know what to search for. Of course, this includes reviews and discussions with my colleagues who know more, and I frequently completely rewrite what AI has done if it’s getting too complex and hard to understand. The important thing is not allowing AI to abstract away your thought process. It can help, but on my terms
- mettamage 1y agoHave you seen non-technical people use LLMs to build things? It's usually a lot slower or a disaster. You don't necessarily need to be technical perhaps in time, but you still need to be precise. Just knowing about HTML to the level we do allows us to embed text into it so the LLM can reason more sharply about it, etc. Being technical still is an advantage, in my opinion.
- 1y ago
- simonw 1y agoLove this conclusion about how reduced friction from LLM assistance helps with that last 20% of actually shopping a side project: > The most exciting thing about this entire journey for me is not the app I built, but that I am now able to scratch my coding itch and ship polished side projects again. It's like I found an extra 5 hours every day, and all it cost me was $200 a month.
- deleted 1y ago[deleted]
- data-ottawa 1y agoI've been doing this for little utilities and it's been great. I created one utility to show my launchctl/launchd tasks with status indicators for what is loaded/unloaded/running/failed (very much like the menu icon you get for OrbStack) and it works great. With claude it only took a couple of hours to get workig and dial it in the way I wanted.
- thekid314 1y agoYeah, I've built a small iOS app and wordpress plugin for myself and love them. I'm curious if more people will do this in the near future, should we all be sharing our code on github?
- ModernMech 1y agoI've been doing this recently; I don't really know swift, and I wanted to see how well I could use almost 100% LLM to do my coding. For the most part, I have been able to get a pretty substantial app going, but once it gets to a certain size, things start to become hairy. For instance, I am adding bluetooth capabilities to my app, and the bluetooth manager can be quite large, to the point where the LLM context window starts to become an issue. When it gets to that point, the LLM can start making suggestions that don't make sense; it's starts forgetting what you had already done, it can start making architectural suggestions that contradict what you had been doing before. So if you follow them, you end up in this weird state mired in conflicting decisions. Almost like design by committee without the committee. It's important to recognize this when it's happening rather than just blindly following what it suggests, so some expertise at engineering is still necessary even though the LLM can write okay Swift code.
- amelius 1y agoMaybe you should ask the LLM to write concise documentation for the functions that it generates (or ask it afterwards). Then use that documentation in the context-window instead of the actual, more lengthy code. Compartmentalize your code into modules/functions with a clearly defined boundary (api).
- flenserboy 1y agoHas anyone tried this for command line applications? This could be a great way to develop some very specific/corner-case tools.
- simonw 1y agoI write CLI tools with LLMs all the time. I even have a custom Claude Project that teaches the LLM to use inline script dependencies with uv so I can "uv run script.py" without first having to install anything else: https://simonwillison.net/2024/Dec/19/one-shot-python-tools/ https://simonwillison.net/2024/Dec/19/one-shot-python-tools/ I have a collection of tools I've built in this way here: https://tools.simonwillison.net/python/ https://tools.simonwillison.net/python/
- flenserboy 1y agoVery cool! Thank you.
- kiitos 1y agoA CLI tool is a native binary that I can run directly via e.g. `/path/to/binary`. If I need to use `uv run ...` to execute something, then that thing isn't really a CLI tool, it's an interpreted script, which relies on an interpreter that needs to be available as a pre-requisite, and all of the numerous complications that follow from that...
- simonw 1y agoUse this as your shebang line: #!/usr/bin/env -S uv run --script https://treyhunner.com/2024/12/lazy-self-installing-python-scripts-with-uv/ https://treyhunner.com/2024/12/lazy-self-installing-python-s... I don't think requiring all CLI tools to be "native binaries" makes sense. Plenty of popular CLI tools are not compiled binaries. The Python and Node.js ecosystems run on those.
- kiitos 1y agoYou're describing scripts, which require interpreters like I guess uv or Node or Python. A CLI tool is a native binary.
- epohs 1y agoA year or two ago I had a pretty simple thought. The idea was that LLMs make a great assistant for a skilled developer, a bad replacement for a skilled developer, and a dangerous assistant for an unskilled developer. That idea has mostly seemed to hold true as I have gotten more experience with LLMs. I think I would revise it now to allow that LLMs can be really useful teachers for unskilled developers, however I don’t get the sense that that’s how they’re being used in many cases. It seems that it’s more common that unskilled developers using LLMs just vibe code their way through issues that they run into, never really gaining insight into why the thing they’re working on failed, and just push through until it seems like it isn’t failing anymore. And that more or less reinforces my idea that they’re dangerous assistants in those cases where the developer is unskilled. It’s pretty much inevitable that this will introduce problems that make it through the process of creation not only unnoticed, but problems that the developer is incapable of understanding even if they are noticed.
- aryehof 1y ago> It seems that it’s more common that unskilled developers using LLMs just vibe code … This is my conclusion to date also, however, I believe the reason behind that is the increasing adoption of agentic tools like Claude Code and Gemini CLI etc, that encourage users to disregard the actual code generated.
- benbojangles 1y agoTerminal + Claude Code + a project folder it's all you need! Who knew?! I never really enjoyed using full blown ide's anyway, setting them up was a chore, configuring QT to cross compile for various platforms was a project in itself, I always found that using a text editor and terminal the most logical combination for editing. Adding another terminal window with claude code to perform my requests while i debug, edit, test, review, i feel like i have graduated from coder-editor to project leader and there are no employee associated problems to deal with. All or my shelved side projects are complete as i wanted them and all in just a few months since March when Claude went big.
- amelius 1y agoSoon, someone will duplicate MacOS entirely using LLMs!
- hadlock 1y agoI got a crude 6DOF wireframe renderer to boot as a system 6 (classic mac) app using c++ and retro68 a couple weeks ago using LLM tooling.
- ninetyninenine 1y agoI'll just have Claude read the tutorial to learn.
- koinedad 1y agoI’ve found that building a custom tool for yourself is now much more accessible using things like Windsurf and CLI tools - pretty interesting times!
- ralfd 1y agoI only used chatGPT seldomly. So I don't have much experience with LLM and with different tools. So ... "how" does one use Claude to make a Mac App? The blog post left me not wiser here.
- qn9n 1y agoThe post does explain in quite a lot of detail, the user was running `claude` or [Claude Code](https://docs.anthropic.com/en/docs/claude-code/overview https://docs.anthropic.com/en/docs/claude-code/overview) an Agentic editor that runs in the terminal. You can run it within a project and provide prompts and context to it, the LLM will read through these things, perform searches if it sees necessary (and you allow it) then it will prompt you with edits or tool usages (cli commands or file edits) that you can approve, deny or suggest edits/changes.
- deleted 1y ago[deleted]