Getting started with sidekick
side.Rmdside::kick() is a coding agent for data science in
RStudio, implemented entirely in R. Think of it something like Claude
Code or Codex; it’s situated in your project directory and can use tools
to explore its surroundings. In addition, though, it has tools that
allow it to explore your active R session and run R code in it.
Installation
To get started, install with:
pak::pak("simonpcouch/side")The application requires RStudio and will not launch in Positron or
other R environments. side::kick() is intended for use with
RStudio’s Sidebar, a full-height pane that’s currently only
available in RStudio Dailies.
Install RStudio, then search for “Sidebar” in the command palette.
Choosing a model
side::kick() can use any model provider available in
ellmer::chat() to power the application. The app uses the
side.client option (or the side::kick(client)
argument if you prefer) to configure the ellmer Chat that powers the
app; that option can be set to any ellmer::Chat object.
When you call kick() without a client configured, a
setup flow will guide you through selecting a model. The setup flow will
check which providers are available based on your API keys (stored in
environment variables) from a preferred subset of providers, allow you
to select from available providers, and ask if you want to save this
configuration just for the current R session or in this and
future R sessions (by adding it to your .Rprofile).
You can also configure a client manually by setting the
side.client option:
# For the current session only ------------------------
options(side.client = ellmer::chat_anthropic(model = "claude-sonnet-4-5"))
# In .Rprofile for all sessions -----------------------
usethis::edit_r_profile()
# Then, add:
options(side.client = ellmer::chat_anthropic(model = "claude-sonnet-4-5"))side::kick() was developed with Claude Sonnet
4.5 in mind; use that model for best results. That said, any
frontier non-thinking (or quickly-thinking) model like GPT 4.1 or Gemini
2.5 Pro will do fine. As of late 2025, I do not recommend using local
(e.g. chat_ollama()) models, but you can give it a try!
Key features
The agent can see your active R session to explore
your computational environment. It has access to objects, data frames,
and loaded packages via btw tools for environment introspection. This
means you can ask it questions about your data and iterate on analyses.
By default, the agent will run code in a child of your global
environment so that it cannot create objects in your environment that
can’t be easily reproduced. To get side::kick() to assign
in your global environment, ask it to write its analysis code in a file
as it goes so that you can reproduce your analyses later.
side::kick() can also read and write
files. File writes trigger an approval workflow, giving you a
chance to review changes before they’re applied. The diff display shows
context around changes, making it easy to understand what the agent is
proposing.
side::kick() can also execute shell
commands to e.g. interface with git or move files around.
Potentially destructive commands trigger an approval workflow, similar
to file writes. This gives you control over what gets executed while
still allowing the agent to help with routine command-line tasks.
When working on complex tasks, the agent can create and execute plans. This allows it to break down multi-step work and track progress through extended sessions, helping maintain context over longer-horizon tasks. Plans are displayed in the chat interface so you can see what the agent is working on at any given time.
You can stop execution mid-stream and reroute the agent without losing conversation history by pressing Esc. Interactive approval for write operations means you’re always in control of what changes are applied to your project. If the agent is heading in the wrong direction, interrupt it and provide new guidance.
Chat history persists across R sessions, so you can pick up where you left off after closing RStudio. The app stores the three most recent chats for a given project, and 15 chats across all projects maximum; for typical chats, this is a few megabytes of stored content total.
Finally, the agent can fetch and apply
skills–markdown files describing task-specific procedures. This
allows you to customize the agent’s behavior for project-specific
workflows, ensuring it follows your preferred patterns and practices.
You can add custom skills in ~/.config/side/skills on
macOS/Linux or %APPDATA%/side/skills on Windows. User
skills override built-in skills with the same name.
Customizing behavior
You can customize the assistant’s behavior for your project by
creating a CLAUDE.md, btw.md,
llms.txt, or AGENTS.md file in your project
directory. The assistant will read the first file it finds (searching in
the order shown above) and include its contents in the system prompt,
allowing you to provide project-specific instructions, coding
conventions, or context.
For example, you might create a CLAUDE.md file with
instructions like:
Prefer base R over tidyverse.
The agent will follow these instructions when working in your project, helping maintain consistency with your preferred patterns and practices.