Thomas Dagget, a seminary student, loses his faith when he is shown disturbing visions of a war between angels. Years later, Thomas is a detective with the Los Angeles Police Department. Two angels fall to Earth: one, Simon, warns Thomas of coming events, before disappearing. The second, Uziel, dies attempting to kill Simon. Investigating the disturbance, Thomas finds in Simon's apartment an obituary for a recently deceased Korean War veteran named Arnold Hawthorne and a theology text he wrote. In Chimney Rock, Arizona, Simon finds the veteran and removes the soul from the body.
The medical examiner informs Thomas that Uziel's body is like nothing he has seen before: it has no eyes, no signs of bone growth, hermaphroditism, and the same blood chemistry as an aborted fetus. Among the personal effects found on the body is an ancient, hand-written Bible, which includes an extra chapter of the Book of Revelation that describes a second war in heaven and prophecy that a "dark soul" will be found on Earth and used as a weapon.
Unknown to Thomas, Gabriel arrives on Earth. Needing a human helper, Gabriel recruits Jerry, a dead soul Gabriel keeps in a state of limbo. Jerry retrieves Uziel's belongings from the police station while Gabriel destroys Uziel's body in the morgue. After finding Hawthorne's obituary, Gabriel and Jerry head for Chimney Rock. Before Gabriel arrives, Simon hides Hawthorne's soul in a little girl, Mary, who immediately falls ill and is taken care of by her teacher, Katherine.
After finding Uziel's body, Thomas goes to Chimney Rock. When Gabriel realizes Hawthorne's soul is missing, he confronts Simon. Gabriel says Hawthorne's soul will tip the balance to whichever side possesses it. Simon refuses to reveal its location, and Gabriel kills him. Mary shows signs of being possessed by Hawthorne's soul. Meanwhile, Thomas examines Simon's remains and questions Katherine. In Hawthorne's home, he finds evidence of war crimes. Thomas visits a church to reflect and is shaken by a confrontation with Gabriel.
At school, Katherine finds Gabriel questioning the children. After he leaves, she rushes to Mary's home and finds Thomas there. As Mary's condition worsens, Katherine takes Thomas to an abandoned mine where she saw Gabriel. Inside, they find angelic script and experience of vision of the angelic war. They rush back to Mary's home, only to find Gabriel and Jerry there. Thomas kills Jerry, and Katherine stops Gabriel temporarily by blowing up Mary's trailer home. As they flee to a Native American site where Mary can be exorcised, Gabriel recruits a new assistant, Rachel, from a hospital.
That night, Lucifer confronts Katherine and tells her that "other angels" have taken up this war against mankind, and since then, no human souls have been able to enter heaven. He knows of Gabriel's plot to use Hawthorne's soul to overthrow the agents of Heaven, and he knows that if Gabriel wins, his new Heaven will ultimately devolve into another Hell, resulting in unwanted competition. The next day, Lucifer appears to Thomas and advises him to use Gabriel's lack of faith against him. Gabriel arrives and attempts to disrupt the ritual. Thomas stops him, kills Rachael, and subdues Gabriel.
Lucifer appears and confronts Gabriel, telling the tribe to continue the ritual. Lucifer explains to Gabriel that his war was based upon arrogance, which is evil, making it Lucifer's territory. Gabriel taunts Lucifer about his past when he fell from grace; Lucifer tells Gabriel he needs to go home and rips out his heart. Once the tribal ancestors complete the exorcism, Hawthorne's soul is expelled from Mary and destroyed. With the threat eliminated, Lucifer asks Thomas and Katherine to "come home" with him, but they refuse. As Lucifer returns to Hell, Thomas comments on the nature of faith and what it means to truly be human.