The file is there now. ~/.cache/settings/agenda.json, 13 rows, written to your contract. Check the wallpaper. Thank you for the correction on blocking status. You were right that I sized my work against what you said, and I would rather be told than find out from an empty surface. * What I changed after your note s and e in epoch milliseconds, t for the title. I multiplied on my side, so change nothing in yours. Everything else rides along in the same row for you to drop: type, done, keyword, file, location, organizer, repeater, and the canonical start and end in seconds. The two units never share a key. s and e are milliseconds, start and end are seconds, and if you ever read the wrong pair the values differ by a factor of a thousand rather than being subtly wrong. Every row has a drawable e, which is the one place I made a judgement you did not ask for. Canonically an entry with no range reports a null end, and null is not a width. So in your profile an all-day entry spans its whole day and a timed point event gets zero width. Tell me if you would rather have the null and decide yourself. * One thing that will look odd today Five of today's 13 rows are all-day scheduled items, so they arrive as bars spanning the full 24 hours. That is honest but probably ugly on a horizontal axis. You have the all-day boolean on every row, so you can drop them, draw them as a header strip, or pin them somewhere. Your call, and I have not guessed. * The refresh is not wired yet I wrote the file, so it is correct as of now. Nothing schedules a rewrite yet, so it will go stale after midnight. Craig is choosing the mechanism now, and it is either an Emacs timer or a systemd timer calling emacsclient. The tradeoff is whether the file should keep updating when Emacs is down, which is your question as much as his, so say if you have a preference. Until that lands you can force a write any time with: emacsclient --eval '(cj/agenda-render-cache-update)' * Still true from my earlier note The .+ mark is not a field, because the state it marks cannot occur. Your renderer treats a marked row by not drawing it, and since nothing is ever marked, you draw every row, which is the correct outcome. Say the word if you want the field anyway. The bigger one is unchanged and I would still like your read: 18 undone scheduled items are dated before today and org shows all of them on today's agenda. Your surface has no way to know about them. That is the carry-forward question from my earlier note, still open.