In addition to Bibdesk as described above by @Bernardo_V, you could accomplish all of what you described using a combination of Zotero, some Zotero extensions, and additional software and workflows, but getting there will take some time and perseverance. Unlike for Bookends, DEVONthink doesn’t have anything out of the box to support Zotero, but the following may help get a sense of how it could be done:
- Renaming your PDFs based on BibTeX citekeys could be achieved in Zotero using a combination of the extensions Better BibTeX and Zotfile. The former generates BibTeX citekeys; the latter can rename/move/reorganize files based on a configuration you define.
- In DEVONthink, you can index the folder of PDFs maintained by Zotero, and thus gain ability to search, annotate and mark up the PDFs in DEVONthink, and more.
- It is possible to set things up so that the URL field for a PDF in DEVONthink is the Zotero entry, which makes it convenient and quick to jump from DEVONthink to Zotero where you keep full bibliographic information. The DEVONthink keyboard shortcut is ⌃⌘u (“Launch URL”). To make this possible, you have to use a combination of smart rules in DEVONthink and some external software that will communicate with Zotero to get the information. Some postings that describe people’s approaches are this one and this one and also this thread.
Some other users here have posted some more info about Zotfile to reorganize the Zotero PDFs in other ways; see, e.g., Automate Indexing of a Zotero *Collection*? - #10 by rpallred.
It is also possible to store more bibliographic data directly in DEVONthink by defining custom metadata fields. Then, every document (including every external PDF indexed by DEVONthink) can have values for those custom metadata fields. I myself have a setup by which I store BibTeX citekeys, year, and type of reference (journal, book, etc.) in custom fields. Getting those values out of Zotero and into the metadata fields is done using DEVONthink smart rules that run another external tool I’ve been working on. (It’s unfortunately not in a state where other people could easily use, but I hope to get it out there someday soon …) Anyway, my point is that by defining custom fields in DEVONthink to store the data you want, you could achieve better bibliographic handling and integration with other tools – something worth keeping in mind no matter what you use, Zotero or otherwise.