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

You know it because you write the content of AGENTS.md. And if you are smart, you keep it brief and cover only the important things that anyone (human OR LLM) would want to know if working in this directory.

As far as I understand even adding relevant information still eventually clouds context

You still need to define assumptions somehow. What you want and what the model wants will not match up by default.

In my experience telling it what I want is not a reliable process at all whatsoever if what I'm asking for is sufficiently complex, no matter what context I provide. So instead I break tasks down into very small parts, ask for solutions to those that I can reasonably quickly assess and then put them together myself. Asking it to do the architectural or deep algorithmic legwork IME wastes so much time and is often just wrong.

There's a balance to be found here, that's unfortunately very hard to find at times.

In my experience, there are two classes of tasks: some are very "in-distribution", and for those LLMs can near-flawlessly perform the "architectural or deep algorithmic legwork", with maybe a single second round to fix the mistakes. For others, I have to break the tasks down myself, and often it's a "death through thousand papercuts", because the size of a task that I can quickly verify and the LLM will not screw up with > 50% probability is small enough that it's sometimes net negative time spent relative to doing it myself (and using LLMs only as glorified search engine and article summarizer).

I like to tell myself that I'm getting better at recognizing these two classes up front, but I'm still frequently surprised when "type 1" turns out to be "type 2".

But circling back to the main topic: with "type 2", agent instructions are paramount, if only to enforce the "small steps, pre-commit to scope and methodology, verification at the end, user doesn't even want to know about anything in between" rules, as agents naturally want to run ahead faster than I can keep up with.


A good practice to use (ime) is having it do research for the larger task, propose alternatives, and write that in a file. You can then review and comment that up, go through another iteration.

Then when it comes to implementation time, things typically go much smoother for larger changesets. Be wary to not overplan, as we all know how often we realized we missed something once we get into the details. Here, I stop the session and go back to iterating on the design/plan doc. Not a step-by-step guide, if you don't instruct them to the difference, they will just pseudo-implement in the plan like they do in their thinking traces, need to be be explicit about the level of detail.


do you just manually type out your important instructions every time instead of being smart and putting a few lines in a text file?

this is probably outdated, attention typically stays fine up to ~200k tokens these days

you end up clouding that more with an agent having to re-understand concepts or conventions

AGENTS.md is good when it is a nested sparknotes for the project, you save context and turns overall, but keep them minimal and largely gotchyas or unusual workflows in your repo


Why is the first step needed? What does the use of WGet (rather than curl) do to block this attack?


They only mention it in passing, but I think it's mainly just the default tool call (which isn't wget, it's a built-in thing in the harness) just throwing off Claude's habits a bit (and not always just downloading the file).


WebFetch sometimes does its own summary according to the article, and theyn it will not work.


No, the point of Pin is to wrap types that CAN move. If the type were !Move then Pin wouldn't be needed.


> the point of Pin is to wrap types that CAN move.

I would highlight that there are many cases where you CAN move an object safely until a certain operation requires the object to "stay put" in place.

Pin allows for that by tying the object to the place only when required. That's why Pin relates to both the object and the place.

Meanwhile, !Move types can't ever move. The object has to remain in the inital place it was constructed in. !Move requires in-place construction and emplacement to be ergonomic at all.


> I would highlight that there are many cases where you CAN move an object safely until a certain operation requires the object to "stay put" in place.

You could model this with a state machine enum where the "stay put" phase is a variant that accepts a !Move, like so:

  enum StateMachine<PinnedState: ?Move> {
      InitialState,
      State1(String),
      State2(Box<PinnedState>),
      TerminalState,
  }


Stupid question, can't this trivially be solved by having a movable constructor / builder type that then gets turned into a non-movable type when built?


Sure, thats one reason why IntoFuture and Future exist. Imo, in hindsight this is also main mistake in aysnc Rust: The whole async system should be build around IntoFuture rather than Future (async fn should return impl IntoFuture).

That way you could pass around IntoFutures without being affected by auto traits leaking. Only when you actually call .await() or .poll() would the immovable Future materialize.


You're right that this is an important issue. I wrote a post explaining this in some detail, so at the very least we avoid having the same problem with generator functions:

https://blog.yoshuawuyts.com/gen-auto-trait-problem


Oh yeah, I've read about all your blog post on this topic :)

To dump some ideas on you: I think one missing piece might be that FnOnce() -> impl Future should implement IntoFuture. Async runtimes would then use IntoFuture in their APIs agressively.

I call this a "workload blueprint" at work. Its a closure/type that contains all the info to start the workload, but in a minimal form. In Rust terms this would be a buildprint that is ideally Send + Move + Forget + 'static, even if the actual work (and the backing struct of the Future) is !Send (e.g. It holds an Rc across await points).

Runtimes could use this for their advantage: There would be a global pool of "workload blueprint" that can be stolen by any executer thread, but once a !Send workload has started on one thread it can't be migrated to another.

This in combination with matklad's ideas about seperating TaskSend from ThreadSend (https://matklad.github.io/2023/12/10/nsfw.html) would solve most of my async pain points.


Thanks for the explanation (though I have to admit I liked your old blog theme more).

Since it's just a matter of how async get desugared, can it be changed through an edition?


I guess `!Move` is largely equivalent to `Unpin` for the purposes of `Pin`, so for example Pin's safe constructor `Pin::new()` can be re-expressed in terms of `!Move` instead of `Unpin`. Today you need unsafe code to pin a `!Unpin` (i.e. "movable") type.

But I also suspect there are important differences between `!Move` and `Unpin` that I'm not sure about.


This whole thread summarizes what's wrong with Pin: it's so confusing everyone in here got something wrong. (Just to address your mistake in particular Unpin is almost the opposite of !Move: it's the trait that represents things that can be un-pinned, that is: moved despite having been pinned. See https://doc.rust-lang.org/std/pin/index.html#unpin).


Right, of course. Yeah, it's an API riddled with so many double negatives it's hard to keep track.


And yet even that little exercise produces significant differences in outcome compared to doing less.


The healthcare system in the United States is deeply, horribly broken.

Recently, my wife was going to be out of the country about a week-and-a-half. Her prescription for a medicine to manage arthritis would run out at the very beginning of that time. But insurance company policies refused to allow her to fill it even a little bit early. As a result, her only option was to go without the medicine for several days.

Policies should be set by organizations whose primary goal is to provide effective health solutions, not organizations whose primary goal is to minimize costs in order to make a profit.


> her only option was to go without the medicine

She could've gone to her provider to discuss adverse side effects. Sometimes they will prescribe a new medication that could be filled immediately.

She could've got a pill cutter and cut the tablets in half, or space out the doses, or otherwise take less than the specified dose for a few weeks.

She could've asked the pharmacist about OTC treatments which could be safely substituted during the gap time.

She could've gone to the emergency room or urgent care in the destination country, and tell the provider "I have run out of medication!" This would be covered by the traveller's insurance that you purchased for the trip.


You sound like you would be a great patient advocate. His wife would have been lucky to have someone like you help navigate that situation, but it would be even better if people didn't need to waste their brainpower coming up with these tips and tricks to work around this fucked up adversarial system in the first place.


Or we could have healthcare that doesn't profit off human misery such that his wife could take her full, prescribed medical dose.

The idea of someone cutting pills in half because their insurer is reporting record profits drives me nuts.


Refusing to answer questions IS one of the rights that the US government mostly honors.


Well, these days especially at border police don't care about "rights"


That's missing in this entire conversation. This all sounds like it's 2016 or something


This is not a "these days" thing. Most rights essentially being abrogated at the border is a thing we've had for many decades now. In particular, no non-citizen has the absolute right of entry, and border agents have discretion bordering on insane when it comes to not admitting people or temporarily detaining them. Worse yet, this being the case, the job attracts the kind of people who relish the petty power trip. I've seen this many times back in 2010-2011 when I was traveling regularly as a non-citizen between US and Canada.


I don't think denying entry to non-citizens abrogates anyone's rights.


What gives US americans the right to deny anyone access to the land they stole from the indigenous they genocided? Why do people think they are entitled to take other peoples land and then prevent others from coming too?


What gives the Turks the right to land they stole from the Tatars? What gives the Greeks the right to land they stole from the Creteans? What gives the Chinese the right to land they stole from the other Chinese?

At some point, we have to accept that the world has irrevocably changed, that people have lived where they live for generations, that resettling them all is impractical, inhumane and just not a good idea in general, and just move on and build the best world for the people currently here.

During WW1 and then again during WW2, the world has agreed to the right of self-determination. If people feel they're a certain nationality separate from what their government imposes on them, then they have a right to become their own country with their own laws and their own border enforcement. If you are literally asking what gives Americans the right to prevent others from coming, this is it.


I'm not saying to remove all americans but why the fuck would you have the right to exclude others from a certain piece of the earth?


Because that's how the world works everywhere.


No I can't!

I wasn't (until reading this thread) aware of the deletion policy, so I certainly couldn't have discovered where the configurable setting is and adjusted it.


What a mix!

Yes, it is American exceptionalism (and quite foolish) to make the claim that "This could never happen in the US".

No, the American government is NOT more authoritative than the UK in the way they handle freedom of websites. The grandparent comment is correct: the US government does not (currently) order ISPs to block specific websites.

Yes, those in the US should protest the current government (many of us already are doing so).


I think maybe there is more than one way to quantify authoritative.

Just looking at the percentage of the population in prison, or murders by cop per inhabitant, that are also good indicators of "repression", and the US might rate first worldwide.


First worldwide? Are you on crack? Are you familiar with the country called North Korea? Or Saudi Arabia?

As a note, I think you meant authoritarian; authoritative means “preeminent/most trustworthy”


I thought the USA have more murders by cop per capita than both of those


Sorry OPs first sentence mentions this is basically impossible in the US and then compared to EU or UK. There is a certain tone and I don't think this comment was a good faith criticism on EU or UK policy


The American government censored a Dutch porn site (Motherless) just last week.


Originally, you'd communicate by mail, but some people didn't write things out in plain language; they used coated messages.

That was why the government decided to ban mail, and since that didn't cover all cases, they also banned people handing things to each other.

At least, I think that is how I remember it going in an alternate world where physical laws mimiced electronic laws.


The "mistake" was not in providing a way to represent "no data", it was in providing no way to represent "this definitely HAS" data.

Languages that correct the problem have two separate types (eg: Foo & Option<Foo>) meaning "definitely a Foo" and "a Foo but it might have no data". Java just has Foo, meaning "a Foo but it might have no data" but no way to represent "definitely a Foo".


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

Search: