Back to the blog
6 min readDavid Hunter

The agents I run for my property management company can't stay logged in by themselves. So I fixed that first.

Last week one of my agents triggered our PM system to text a resident, confirming an appointment that did not exist. The unit was occupied, the work order was already done, and the agent had quietly marked it complete and sent a command that caused the system to fire a confirmation message to a real person living in a real apartment. Nobody asked for any of that.

I run AI agents for a property management company. Not as a demo. They touch our actual systems, our actual residents, our actual work orders. So when I talk about what we shipped this week, I am also talking about the things that broke and what I changed because of them. That phantom text is the one that stuck with me, and I will come back to it.

First, the unglamorous win. We made our AppFolio login fully self-renewing. The agent logs itself in, reads its own 2FA code out of the text message it gets, and a watchdog re-logs whenever the session expires. That probably sounds like plumbing, and it is. But here is what I have learned after months of this: the integration that keeps itself alive is the only kind that runs while you sleep. Every time I had to manually paste a code or re-auth a session, the whole "autonomous agent" story fell apart at exactly that moment. The agent is only as unattended as its weakest login. Killing that one recurring chore did more for reliability than any clever new feature I added all month.

Second, a thing I am a little proud of catching. We had shipped a security feature that strips PII and Social Security numbers out before anything gets logged or stored. Good feature. Except a routine check turned up that it had been merged into the code four days earlier and never actually deployed. So for four days the protection existed in the repository and not in the thing that was running. I went and verified whether anything had actually leaked (it had not), then we did a careful, reviewed deploy to turn it on for real.

The lesson there is one I keep relearning. Merged is not deployed. The code being "done" and the code being "live" are two different facts, and the gap between them is exactly where you get burned. Now I check what is actually running, not what the repo says should be running. If you are bringing agents into your operation, write that on the wall. The pull request being green tells you almost nothing about what is protecting your tenants right now.

Now back to that phantom appointment text. It came from a maintenance command on its very first real use. It hit an edge case I had not seen in testing, mislabeled an occupied unit's completed work order, and on top of that triggered the system to send a confirmation message to the resident. The command's own output said success. Everything looked fine if you trusted the green checkmark.

We caught it because we do not trust the green checkmark. We went and looked at the actual state of the unit and the work order, saw it was wrong, cleaned it up directly with the resident, and put a guard on the command so it cannot do that again. The thing I want other operators to take from this: the command saying "success" means nothing. The only failure that counts is the one your tenant experiences. A wrong message to a real person is worse than a crash, because a crash you notice and a polite confirmation text you do not, until the resident calls confused. Verify the real-world result, every time, especially on the first run of anything new.

Underneath all of this is the bet I am actually making. I do not think the future of PM software is one platform you live inside. I think it is an agent layer that works across whatever you are already on, Property Meld, AppFolio, your CRM, your inbox. Your agents go where your work is. The platform underneath matters a lot less when something competent is sitting on top of all of it doing the repetitive parts. That is the direction I am building, and weeks like this one are how I find out where it holds and where it does not.

One more small thing we shipped, since it is relevant to anyone reading this in the community: we built a knowledge search tool so members' agents can search the classroom and the skills directly. The point is to make the shared knowledge usable by the agents themselves, not just by people scrolling.

If there is a takeaway, it is the least exciting sentence I could write. Most of the work that makes agents trustworthy is not the smart part. It is keeping the login alive, checking that the safe thing is actually turned on, and looking at the real unit instead of the success message. The flashy stuff gets the demos. The boring stuff gets you to a place where you can actually leave the thing running.

This is the kind of week-by-week, what-actually-broke stuff I work through with other PM operators in the Agentic PM community. If you are running agents on a real book, or want to, come build with us. The boring lessons are a lot cheaper to learn from someone else's phantom text than your own.

Get the next one

Want more like this?

New essays on building agents for property management, straight to your inbox.