If you want to have annotations on IO code you could get it using attributes - and you could even go further by using more precise annotations like `network`, `disk`, etc. The problem with using the type system is that now you need to account for the distinction everywhere (ex. interfaces/traits must support IO-based implementations) only to carry this metadata which should not affect the behavior. In Haskell, IO exists not to track a behavior but to enforce it in a lazy language. In Rust is done due to the lack of a runtime.
Care to share your setup? I'm currently working on pretty much the same thing and it's looking good so far, but having a single user makes it hard to get enough feedback.
Hmmm, it's a fairly stock emacs setup. Most of the weird/specific stuff is outside of emacs: setting up a sandbox, managing worktrees, managing disk space because each worktree can easily contain 200GiB of build artifacts, et cetera.
The Emacs parts of it are all either stock or partially or fully broken.
I've got notification support but it's broken.
I'd love to use agent-shell because it's a much better way to interact with agents than using their stupid TUI's, but it's currently broken with Claude for me and is way behind the claude TUI.
So instead I use claude-code-ide.el inside of a ghostel, but it's got a large number of friction points. Mostly due to claude's broken TUI.
> what should be done about open weight bioweapon and cyber-offense capabilities? Is it simply the cost of freedom that we should allow attackers to access these tools?
Yes, in the same way that we have E2E encryption which allows bad actors to distribute content beyond human horrors.