Detective Jerry Black has made a promise he can't break, to catch a killer he can't find.
A retiring police chief pledges to catch the killer of a young child.
The film begins with a flashback to an inebriated Police Detective Jerry Black, mumbling incoherently at an unknown location. The scene then switches to events that precede the opening scene. Jerry is ice fishing, then driving to work. After work, he goes to a restaurant, where the Department has thrown him a retirement party. Police Captain Eric Pollack (Sam Shepard) gives Jerry a gift, a trip to go fishing in Mexico. The party is interrupted by the discovery of a murdered young girl named Ginny. Jerry decides to go with another Detective, Stan Krolak (Aaron Eckhart) to the scene of the crime.
Jerry delivers the bad news to the girl's parents. The mother (Patricia Clarkson) makes Jerry swear on a cross that the girl had made that Jerry will find the killer.
A suspect is found the next day. Stan goes in to interview the suspect, who is a mentally retarded Indian man (Benicio del Toro). The man eventually confesses, but steals one of the deputies' guns and commits suicide with it. To all of the other Detectives, the case is over. But Jerry doesn't think the killer died that night. He is still adamant about his pledge to find the killer, and doesn't go on the fishing trip the department gave to him.
Jerry visits the victim's Grandmother (Vanessa Redgrave) and is directed there by an older woman. The Grandmother tells Jerry that the girl told many stories, and a later visit to one of her friends reveals that Ginny had a friend she called "The Giant". Jerry sees a picture Ginny drew of the Giant that does not resemble the Indian, and Jerry takes the picture.
Jerry goes to Stan, and asks him to reopen the case. Stan refuses, but gets Jerry more information about similar cases in the area. Jerry's further investigation leads him to three unsolved and eerily similar cases that the Indian man could not have committed. Jerry presents these cases to Captain Pollack and Stan, who are doubtful. Jerry shows them the picture of Ginny and the Giant. Jerry once again tells them he is adamant about finding the real killer, and leaves.
Jerry rents a cabin and spends some time fishing. He notices a gas station near the lake and likes the location so much he asks the owner (Harry Dean Stanton) if he is interested in selling the place. Jerry eventually buys the gas station and moves into the small house behind it. Jerry meets a local bartender named Lori (Robin Wright Penn). He slowly becomes a father figure to her young daughter Chrissy. After Lori has a fight with her ex-husband, she moves in with Jerry.
Soon Chrissy becomes friends with a local reverend named Gary Jackson (Tom Noonan). Jerry is uncomfortable about this. He begins to think Jackson is the killer.
Chrissy is shown meeting a man driving a black car with a porcupine hanger on the rear mirror. Chrissy tells this to Jerry, explaining she met a wizard who gave her little porcupine candies and who told her not to tell her parents they met - she figured it was OK to tell Jerry, since he is not her father. Jerry realizes this is the killer and, using Chrissy as bait, Jerry stages an operation, with Stan's help, to catch him in the act.
A car is shown having a porcupine hanger, but it doesn't arrive at where Chrissy is. The woman who directed Jerry to Ginny's grandmother is shown searching for a certain "Oliver", and it is suggested this Oliver may be the killer. After hours of waiting, Stan and the other Police leave. They tell Lori what happened, and, after racing to the place, Lori screams at Jerry about letting her daughter be in danger.
The car that was shown approaching is seen destroyed in a car accident and while there is deliberate equivocation regarding the dead occupant it can be surmised it was the killer. Jerry is then seen as he is now, mumbling and talking to himself in front of the now defunct gas station, clearly distraught and now unbalanced by the turn of events, unaware of the implied fate of the killer.