Hacker Newsnew | past | comments | ask | show | jobs | submit | pjm331's commentslogin

"Software people are not alone in facing complexity. Physics deals with terribly complex objects even at the "fundamental" particle level. The physicist labors on, however, in a firm faith that there are unifying principles to be found, whether in quarks or in unified field theories. Einstein repeatedly argued that there must be simplified explanations of nature, because God is not capricious or arbitrary.

No such faith comforts the software engineer. Much of the complexity he must master is arbitrary complexity, forced without rhyme or reason by the many human institutions and systems to which his interfaces must conform. These differ from interface to interface, and from time to time, not because of necessity but only because they were designed by different people, rather than by God."

- Fred Brooks, No Silver Bullet


here is my entire config

    hs.hotkey.bind({"ctrl"}, "D", function()
      hs.grid.show()
    end)
i've tried all of the other fancy window managers and for me nothing has ever beat the ease of use of just

(1) ctrl-d to see the grid, (2) type the letter where you want the top left corner of your window to be, (3) type the letter where you want the bottom right corner to be

window resized


This is amazing. Thanks for sharing. Did you ever look into capturing the states of where all the windows are once you are done with resizing them? So as to restore them later back into position if they ever get out of alignment ?

Thinking of the usecase where every task or a project deserves a certain arrangement of windows and it would be good to summon them into existence as and when needed?


Im sure that’s possible but my own working style is too chaotic for saving workspaces like that haha

Wow... that's... incredible. I've used Hammerspoon forever and never knew that existed.

Just messing around I found you can extend the grid size with `hs.grid.setGrid('4x4')`, which you also may then want to shrink the text size with `hs.grid.ui.textSize = 30`, and finally if you use an alternative keyboard layout (eg: Colemak), you can set the grid to use it with `hs.grid.HINTS`. They really thought of everything with this feature.


Not that I insert EOFs very often, but does that conflict with CTRL+D in the terminal?

I use EOF all the time to end terminal sessions.

Great handle, btw.

Make caps lock a hyperkey (shift+ctrl+option+cmd) and use that for non-overlapping shortcuts

make caps lock control on hold, double quote on tap. Make control hyperkey on hold, angle bracket on tap. My keyboard firmware is very odd. This is not easily done with soft remaps to the point that I don't bother trying.

If you're on macOS have you tried Karabiner Elements? It seems to do just fine with software mapping my macbook keyboard.

I do use it. Before the way config worked changed I had hold/tap control/double-quote working. But they changed the way config works and I didn’t bother to fix that because I made a keyboard that does what I want exactly and when I’m on my laptop keyboard I don’t care toooo much.

yeah the CTRL+D definitely gives me problems from time to time but thus far i have been too lazy to fix it

This is amazing! I have a slightly more elaborate setup that allows me to resize from one or another side, similar to what Apple added recently but with more flexibility, but this is super interesting, thanks for sharing!

Neat until you need to sync configs or keep multiple machines in harmony, at which point dotfile headaches stack up with Hammerspoon and Lua. Adding complex logic like window rules, app-specific behavior, or handling monitor changes strips away some of that hotkey simplicity and leads to endless tweaking. Still, for avoiding the mouse, it's one of the few flexible options left on macOS that doesn't feel ancient. Tradeoffs everywhere but nowhere else really compares in control.

Syncing configs is a pretty solved problem with dotfile repos. I even made a starter repo anyone can fork & use: https://github.com/dbalatero/dotfiles-starter

The closest thing I have found that fits right now is just Linear or [insert your own project management tool with a good api here] and then you manage agents in many of the same ways we’ve been managing human engineers for the past decade - assign them issues

My bet is that the last item is what we’ll end up leaning heavily on - feels like the path of least resistance

Throw in some simulated user interactions in a staging environment with a bunch of agents acting like customers a la StrongDM so you can catch the bugs earlier


as much as you or i may be against it, inevitably AI coding will move away from human review and toward more automated means measuring program correctness

this was already happening even before AI - human review is limited, linting is limited, type checking is limited, automated testing is limited

if all of these things were perfect at catching errors then we would not need tracing and observability of production systems - but they are imperfect and you need that entire spectrum of things from testing to observability to really maintain a system

so if you said - hey I'm going to remove this biased, error prone, imperfect quality control step and just replace it with better monitoring... not that unreasonable!


I'm actually all for automated measures of program correctness and I think that manual testing is the last resort of tight budgets outside of highly complex integration issues. Adding more automated test cases that are built in to the CI pipline from the unit level to the highest levels (as long as they're not useless fluff) usually ensures a much lower level of defects. AI can help with that process, but only if we're diligent in checking that it isn't just building pages and pages of fluff ineffective tests - so we still end up needing to check the code and the tests that AI has written and I am still concerned that that ends up being more expensive in the long run.


But who will police the police? Does the Coast Guard* review my QA setup and tests?

* https://www.youtube.com/watch?v=Tk4yyqXi8Xc


The sci fi version of the alignment problem is about AI agents having their own motives

The real world alignment problem is humans using AI to do bad stuff

The latter problem is very real


> The sci fi version of the alignment problem is about AI agents having their own motives

The sci-fi version is alignment (not intrinsic motivation) though. Hal 9000 doesn't turn on the crew because it has intrinsic motivation, it turns on the crew because of how the secret instruction the AI expert didn't know about interacts with the others.


It’s funny because on one end of the spectrum you have non dev vibe coders for whom every log is noise

On the other end are the hardcore user orchestrating a bunch of agents, not sitting there watching one run, so they don’t care about these logs at all

In the middle are the engineers sitting there watching the agent go


Logs (and in this case, Verbose Mode) aren't for knowing what a thing is currently doing as its doing it, it's for finding out what happened when the thing didn't do what you expected or wanted.


The non dev vibe coders are probably a bigger group of users, and therefore equal more money. Change justified...


The others are also paying. Make it configurable...


I’ve had a fantastic experience building out an internal AI agent service using elixir and phoenix - after only dabbling with it in side projects for almost a decade

OTP fits agents like a glove.


> Re: security, I think I need to make an AI credential broker/system. The only way to securely use agents is to never give them access to a credential at all. So the only way to have the agent run a command which requires credentials, is to send the command to a segregated process which asks the user for permission, then runs it, then returns status to the agent

This is a problem that model context protocol solves

Your MCP server has the creds, your agent does not.


But what about the context pollution? For every request you want an MCP to handle, it has to fill up the context with instructions on how to make requests; and the MCP server has to implement basically every function, right? So like, an AWS MCP would have hundreds of commands to support, and all that would need to be fed into context. You could try to limit the number of AWS MCP functions in context, but then you're limiting yourself. Compare this to just letting the AI run an AWS command (or API call via curl) using the knowledge it already has; no extra complexity or context on the AI-side. You just need to implement a server which intercepts these stock commands/API calls and handles them the same way an MCP server would


You don’t need to implement every api endpoint as a tool you can just say - this is the aws cli tool it takes one string as an argument and that string is an aws cli command

No difference between that and using the bash tool - except you can keep the keys on the MCP server


I mean, there's a tiny difference: once of them is secure, the other isn't...


I have this theory that with LLMs getting better at writing code our current open source model (relatively few large projects that everyone contributes to, relatively rare to maintain your own fork) will invert and it will be easier and more common for people to have personalized forks and a lot of the problems around managing large open source projects will just become irrelevant


Or a ton of "personalized agents" will start bugging upstream to complain about suspected issues with all those forks all the time...


Why would you want to manage your own fork of everything?


Because that cost can be less than dealing with upstream.


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: