Garrick Aden-Buie
banner
grrrck.xyz
Garrick Aden-Buie
@grrrck.xyz
r + python + data + web things. team shiny at posit (rstudio). open source all the things

https://garrickadenbuie.com
https://github.com/gadenbuie
Pinned
I made a starter pack with #Shiny for #RStats and #Python devs and friends! And if you're a Shiny person and want to be included, let me know.
go.bsky.app/BFEQ1HY
I call these `f()` and `f_impl()`
January 16, 2026 at 8:42 PM
Reposted by Garrick Aden-Buie
Speak at posit::conf(2026) and share your R & Python stories!

Accepted speakers get:
✨ Travel & lodging help
✨ Free conference pass
✨ Professional coaching

Apply by Feb 6 to join us Sept 14-16 in Houston, TX!

Submit here: pos.it/conf-talk-2026

#positconf2026 #rstats #pydata
January 15, 2026 at 3:40 PM
There are a *lot* of tools! You can reference them by group or pick specific tools by name so you get just the ones you want/need. posit-dev.github.io/btw/referenc...
Tools: Register tools from btw — btw_tools
The btw_tools() function provides a list of tools that can be registered with an ellmer chat via chat$register_tools() that allow the chat to interface with your computational environment. Chats retur...
posit-dev.github.io
January 9, 2026 at 2:16 AM
Oops, I misspoke, it's actually the "env" group that describes objects in your environment to LLMs. ("session" is for sessioninfo-style tools). The env tools _describe_ things like data frames but don't send the whole dataset; that helps LLMs write data analysis code with less hallucinations
January 9, 2026 at 2:14 AM
Reposted by Garrick Aden-Buie
Soooo if you use #RStats and Claude Code:
R console: install.packages("btw")
Terminal: claude mcp add -s "user" r-btw -- Rscript -e "btw::btw_mcp_server()"
And now Claude Code can answer questions about ANY R package installed on your system.
January 7, 2026 at 3:00 AM
Depending on your use case, you might be interested in other {btw} tool groups too:

'run' for the tool to run R code
'search' for tools that search cran
'session' to let claude inspect variables in an R session
January 7, 2026 at 8:10 PM
One small tweak I make personally: you can limit which groups of tools are enabled to reduce tokens used for tool definitions and avoid conflicts with Claude's built-in tools. I use

btw::btw_mcp_server(tools = list('docs', 'pkg'))

for reading help pages and pkg dev tools...
January 7, 2026 at 8:10 PM
January 1, 2026 at 12:49 AM
Happy UTC New Year!! 🎉 🥂
January 1, 2026 at 12:02 AM
Reposted by Garrick Aden-Buie
Turn Claude into an expert on writing {testthat} #Rstats 📦 version 3 R tests with the Claude Testing R Packages skill by @posit.co
github.com/posit-dev/sk...
That repo has other skills including how to use brand.yml with Quarto and Shiny
github.com/posit-dev/sk...
#GenAI
skills/r-lib/testing-r-packages at main · posit-dev/skills
A collection of Claude Skills from Posit. Contribute to posit-dev/skills development by creating an account on GitHub.
github.com
December 24, 2025 at 12:50 PM
oh! Also in this release: 4 new tools for common #RStats package dev tasks: running tests, checking test coverage, running R CMD check and rebuilding documentation. These tools are a great way to get Claude Code and Codex to run tests 🧪 without burning tokens 🔥
posit-dev.github.io/btw/referenc...
December 23, 2025 at 6:00 PM
Happy holidays! 🎄 I snuck in a {btw} release just before CRAN went on vacation for the year. {btw} is an #RStats package full of tools for LLMs, including a new tool for running R code. Here's a quick demo using `btw_app()` to create a quick festive ggplot2 from holiday movie titles. Cheers! 🧑‍🎄
December 23, 2025 at 4:40 PM
Reposted by Garrick Aden-Buie
I see a lot of complaints about untested AI slop in pull requests. Submitting those is a dereliction of duty as a software engineer: Your job is to deliver code you have proven to work simonwillison.net/2025/Dec/18/...
Your job is to deliver code you have proven to work
In all of the debates about the value of AI-assistance in software development there’s one depressing anecdote that I keep on seeing: the junior engineer, empowered by some class of …
simonwillison.net
December 18, 2025 at 2:57 PM
For months I've had a pesky message that shows up in my #RStats test logs and today I realized I can figure out exactly where it's coming from with testthat's location reporter

Rscript -e 'devtools::test(reporter = "location")' 2>&1 | tee test.log
December 18, 2025 at 3:44 PM
😂 “legally chill”
December 17, 2025 at 12:57 AM
That makes sense! It’s unfortunate that OpenAI change the default in a way that make the model comparisons so different.

It would be interesting to see how those models perform with medium reasoning, especially if it’s required for solid #rstats performance, but I get why you’d not too
December 12, 2025 at 11:46 PM
Was this your subtle way of telling me I should read the article? If so, it didn't work, I'm continuing to speculate based on headlines and things I'm seeing on bluesky
December 12, 2025 at 9:27 PM
ah yeah that would make sense! (this is what I meant by "what's going on") It's surprising that compared to GPT-5, 5.1 and 5.2 pretty much tank the eval.

Would it make sense to add a "with reasoning" variant for those models? Now I'm curious about reasoning levels in the other models too... 🤔
December 12, 2025 at 9:26 PM
Wait, what’s going on with GPTs 5.1 and 5.2 in the lower left corner? 🧐
December 12, 2025 at 8:43 PM
But there’s a PEP for that!
December 12, 2025 at 1:15 AM
Reposted by Garrick Aden-Buie
One of the many reasons AI can't produce good writing is it can't hate its own writing. It can't think to itself "Maybe I'm illiterate" during the writing process. And that's essential
December 9, 2025 at 8:45 PM
The other option is to put the app in a folder in inst/ and export a function that calls runApp() on that directory (using system.file() to find that path). This option is best when the Shiny app is ancillary to the pkg. Because the code is in inst/ it’s hidden from CRAN checks, but harder to test
December 10, 2025 at 2:34 AM
Broadly I think there are two choices. Which is better depends on your package and how central the app is to the pkg.

If the package exists just to create the app, export a function that creates the shinyApp() object. All the supporting code goes in the pkg (in R/). Lean on small fns and unit tests
December 10, 2025 at 2:34 AM
Reposted by Garrick Aden-Buie
For…reasons, I've been investigating non-US alternatives for some of the services I use.

TIL that @BunnyCDN offers a drop-in replacement for Google Fonts: fonts.bunny.net/

Also Bunny itself is a great EU-based alternative to most of what Cloudflare offers.
March 8, 2025 at 3:56 PM