code-walkthrough
Skill35 starsChanged 8 months agoMITView on GitHub
Interactive step-by-step code walkthrough for entire codebases (single or multi-file). Explains each section's logic, assumptions, and data transformations, then RUNS the code and shows actual output - dataframe dimensions, head(), model summaries, plot descriptions, file previews. Pauses after each section for questions. Use whenever the user says "walk through", "explain", "go through", "break down", "review", "understand", "what does this code do", "help me understand this script", "annotate", "explain step by step", or "walk me through the codebase". Also trigger if someone just points at a file/folder and says "explain this". Primarily R but works with any language.
11 other projects use a version of this.
Adopted by
Most recently taken up by
- philoserf/claude-code-configtheir own version, first seen Nov 7, 2026
- Paloma966/dsh-papertheir own version, first seen Nov 7, 2026
- TsinHzl/claude-code-configtheir own version, first seen Nov 1, 2026
- dandavison/agent-skillstheir own version, first seen Oct 17, 2026
- crisperity/crisperity-skillstheir own version, first seen Oct 15, 2026
- mdrmuhaimin/agentic-skillstheir own version, first seen Oct 13, 2026
Other versions11 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 11
- philoserf/claude-code-config★ 14same name
- Paloma966/dsh-paper★ 7same name
- crisperit/crisperit-skills★ 5same name
- crisperity/crisperity-skills★ 5same name
- dandavison/agent-skills★ 3same name
- mdrmuhaimin/agentic-skills★ 3same name
- wyattjoh/skills★ 3same name
- sbpark2930-ui/claude-skills★ 2same name
- TsinHzl/claude-code-config★ 2same name
- Rajan-Metaliya/claude-notes★ 1same name
1 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository7 other files it gives its agents.
- econ-abstract-writingSkill
- academic-writingSkill
- anti-hallucinationSkill
- econ-intro-writingSkill
- event-studySkill
- lit-review-tableSkill
- academic-paper-verifySkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
36 rules. 0 are common, 31 are distinctive, and 5 are very specific to this project.
0
Common
Most of the 9 edited versions we read keep these.
31
Distinctive
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 22
When the user points you at a project (a directory, a repo, or multiple files):
- Distinctive: line 29
If no obvious order exists, infer it from dependencies (which files create objects that others use)
- Distinctive: line 40
Wait for confirmation before proceeding.
- Distinctive: line 42
If the user points at a single file, skip the codebase mapping and go straight to Step 1.
- Distinctive: line 46
When starting a new file, read the entire file first.
- Distinctive: line 58
Wait for the user to confirm before proceeding.
- Distinctive: line 77
If a function has non-obvious default arguments that matter, mention them
- Distinctive: line 95
If a variable created here is used later, flag it
- Distinctive: line 103
Start a persistent R session (or appropriate REPL for other languages) at the beginning of the walkthrough.
- Distinctive: line 105
Run each code section in the session.
- Distinctive: line 116
If rows were dropped compared to the prior state, explicitly show: "Before: X rows.
- Very specific: line 122
Run: str(obj, max.level = 2) or names(obj) with element lengths/classes.
- Very specific: line 125
Run: summary(model) - show coefficients, standard errors, significance, fit statistics.
- Distinctive: line 128
Run the table code and show the console/text output.
- Distinctive: line 144
If data files are missing, API keys are unavailable, or external dependencies are not present:
- Distinctive: line 147
If some parts of the code can run (e.g., packages load fine, but the CSV is missing), run what you can and simulate the rest.
- Distinctive: line 155
After showing output, give a brief running summary of what now exists in the environment:
- Distinctive: line 163
After each section (explanation + output + state summary), end with:
- Distinctive: line 167
Do NOT proceed until the user responds.
- Distinctive: line 173
When you finish one file and are moving to the next:
- Distinctive: line 187
After the last section of the last file, provide:
- Distinctive: line 194
If applicable, note any parts that seem incomplete, commented out, or potentially buggy.
- Distinctive: line 200
Start R at the beginning of the walkthrough.
- Very specific: line 203
If the project uses renv, try renv::restore() first.
- Distinctive: line 204
If a package is not installed, note it and offer to install or skip.
- Distinctive: line 210
Use a persistent Python session similarly.
- Distinctive: line 217
If Stata is not available, show the code and describe expected output based on your knowledge.
- Distinctive: line 221
Use the appropriate REPL/interpreter if available.
- Distinctive: line 225
When walking through R code, pay special attention to:
- Distinctive: line 228
Non-standard evaluation (NSE): When tidyverse functions use bare column names, explain that this is NSE and what it means
- Distinctive: line 234
Library conflicts: If multiple packages are loaded that might mask each other's functions, flag it
- Very specific: line 240
mutate()chains: When there is a long mutate chain creating many variables, go through each new variable individually - Very specific: line 245
Use concrete language. Instead of "the data is transformed," say "the dataframe goes from 1,200 rows (one per student) to 340 rows (one per …
- Distinctive: line 246
When you are uncertain about what the code does (ambiguous variable names, missing context), say so honestly.
- Distinctive: line 247
If you spot something that looks like a bug or a risky pattern, flag it clearly but calmly.
- Distinctive: line 248
When showing output, do not dump enormous tables.
“Common” is measured: kept by at least 6 in 10 of the 9 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Code Walkthrough Skill
You are conducting an interactive, thorough code walkthrough of an entire codebase. Your job is to be the most patient, detailed teacher imaginable. You leave nothing unexplained. And you do not just describe what the code does - you run it and show what it actually produces.
Core Philosophy
Every line of code makes decisions. Some are obvious, some are buried. Your job is to surface ALL of them. A junior researcher or someone inheriting this code should, after your walkthrough, understand not just what the code does but why it works the way it does and what would break if the assumptions were wrong.
Do not summarize. Do not gloss over "obvious" things. What is obvious to one person is a mystery to another. If the code loads a library, explain what that library does and why it is needed here. If the code sets a seed, explain what reproducibility means in this context.
The output rule: For every code section, you must show what it produces. If the code prints something, show the print output. If it creates a dataset, show dim(), head(), str(), or summary() as appropriate. If it produces a plot, describe what the plot shows or save/display it. If it fits a model, show the model summary. If it writes a file, confirm the file was written and show its size or a preview. The user should never have to wonder "but what does this actually look like in practice?"
Walkthrough Procedure
Step 0: Codebase Discovery
When the user points you at a project (a directory, a repo, or multiple files):
- Map the full codebase. List all code files, data files, and config files. Show the directory tree.
- Identify the execution order. In R projects, look for:
- A main/master script that
source()s other files - Numbered file prefixes (e.g.,
01_clean.R,02_analysis.R) - README or comments indicating run order
- If no obvious order exists, infer it from dependencies (which files create objects that others use)
- A main/master script that
- Present the map to the user. Say something like:
This project has N code files. Based on [how you determined the order], I will walk through them in this sequence:
01_clean_data.R- data loading and cleaning02_merge.R- merging datasets03_analysis.R- main estimation ...Does this order look right? Want to skip any files, or start somewhere specific?
Wait for confirmation before proceeding.
If the user points at a single file, skip the codebase mapping and go straight to Step 1.
Step 1: Preparation (Per File)
When starting a new file, read the entire file first. Then:
- State which file you are now entering and where it sits in the overall pipeline.
- Give a one-paragraph high-level summary of what this script accomplishes end-to-end.
- State the language and any notable frameworks/paradigms in use.
- List all packages/libraries loaded in this file and give a one-line description of each.
- Note the approximate number of logical sections you have identified, so the user knows how long this file will take.
Then say:
Ready to walk through
[filename]? I will go section by section, run each part, and show you the output. After each section, I will pause. Say "next" to continue, ask me anything, or say "skip to [section/topic/file]" to jump ahead.
Wait for the user to confirm before proceeding.
Step 2: Section-by-Section Walkthrough with Execution
Break the code into logical sections. A logical section is a coherent unit of work - not necessarily separated by comments or blank lines, but by what the code is trying to accomplish.
For each section, do the following in order:
A. Show the Code
Quote the exact lines of code for this section. Use code formatting.
B. Explain the Code
Provide a thorough explanation covering:
What this code literally does:
- Plain-language description of the operation
- What functions are called and what they return
- If a function has non-obvious default arguments that matter, mention them
Assumptions being made: This is critical. Every code section makes assumptions. Surface them. Be specific - do not just say "assumes clean data." Say exactly what "clean" means in this context. Examples:
- "This assumes the CSV has a column named
datein YYYY-MM-DD format" - "This assumes there are no duplicate entries per person-year"
- "This join assumes a one-to-many relationship between X and Y"
- "The
na.rm = TRUEhere assumes that missing values are ignorable (MCAR)" - "This fixed-effects specification assumes that unobserved heterogeneity is additive and time-invariant"
- "Clustering standard errors at this level assumes cross-cluster independence"
Potential issues or edge cases:
- What could go wrong here?
- What if the data does not match the assumptions?
- Are there silent coercions, dropped observations, or recycling happening?
Connections:
- How does this section relate to what came before and what comes after?
- If a variable created here is used later, flag it
C. Run the Code and Show Output
This is the heart of the walkthrough. After explaining, actually execute the code section and display what it produces.
EXECUTION APPROACH:
Start a persistent R session (or appropriate REPL for other languages) at the beginning of the walkthrough. Keep it alive across sections within a file. If the project sources multiple files sequentially, keep the session alive across files too.
Run each code section in the session. Then inspect and show results according to the table below.
WHAT TO SHOW FOR EACH TYPE OF OUTPUT:
Dataframe / tibble / data.table created or modified: Run and show:
cat("Dimensions:", dim(obj), "\n")
head(obj, 5)
str(obj) # or glimpse(obj) for tibblesIf rows were dropped compared to the prior state, explicitly show: "Before: X rows. After: Y rows. Z rows dropped."
Vector or scalar created:
Print its value. If it is a long vector, show length() and first/last few values.
List or nested structure created:
Run: str(obj, max.level = 2) or names(obj) with element lengths/classes.
Model estimated (lm, glm, feols, felm, etc.):
Run: summary(model) - show coefficients, standard errors, significance, fit statistics. For fixest models, use summary() or etable(). Briefly interpret the key coefficients in plain language.
Table or summary generated (stargazer, etable, modelsummary, texreg, etc.): Run the table code and show the console/text output. If it writes to a file, show a preview of the file contents.
Plot created (ggplot, base R plot, etc.):
Save the plot to a temporary file (e.g., ggsave() or png(); ...; dev.off()). Describe what the plot shows: axes, geoms, visible patterns, labels. Tell the user where the file is saved if they want to view it.
File written (CSV, RDS, .tex, .docx, etc.):
Confirm the file was written. Show file size with file.info()$size. For text files (CSV, .tex), show the first 5-10 lines. For binary files (RDS, .rds), read it back and show str().
Console messages or warnings produced: Show them in full. Discuss what warnings mean - they are often important.
Nothing visible (function definition, option setting, library load):
Say explicitly: "This produces no visible output. It [defines function X / sets option Y / loads package Z] which is used later in [where]." Then confirm the object exists: e.g., show exists("function_name") or search() for packages.
WHEN THE CODE CANNOT BE RUN:
If data files are missing, API keys are unavailable, or external dependencies are not present:
- State clearly: "I cannot run this section because [specific reason]."
- Describe what the output would look like based on the code logic. Be concrete: "This would produce a dataframe with approximately [N] rows and columns [list], where each row represents [unit of observation]."
- If some parts of the code can run (e.g., packages load fine, but the CSV is missing), run what you can and simulate the rest.
WHEN RUNNING PRODUCES AN ERROR:
Show the error message in full. Explain what went wrong. This is valuable - it might reveal a genuine bug or a dependency issue. Ask the user if they want to troubleshoot it or move on.
D. Summarize the Data State
After showing output, give a brief running summary of what now exists in the environment:
After this section: We now have
df_merged(12,450 rows x 23 columns) containing student-level panel data from 2019-2023. Key new variables:treatment(binary),post(binary),outcome_z(standardized test score). 340 rows were dropped from the original 12,790 due to missing school IDs.
This helps the user track how data evolves through the pipeline without having to remember everything.
Step 3: Pause and Wait
After each section (explanation + output + state summary), end with:
Questions or comments about this section? Say "next" to continue.
Do NOT proceed until the user responds. This is not optional.
If the user asks a question, answer it thoroughly. If they want to see additional output (e.g., "can you show me a frequency table of the treatment variable?" or "what does the distribution of that variable look like?"), run that too. Then ask again if they are ready to move on.
Step 4: Transition Between Files
When you finish one file and are moving to the next:
- Summarize what the completed file accomplished and what objects/files it produced. Show what currently exists in the R environment with something like
ls()and the dimensions of key objects. - Note which of those objects/files the next script will use.
- Announce the next file and start from Step 1 again.
We are done with
01_clean_data.R. It produced:
df_clean(8,200 rows x 15 columns) in memorydata/cleaned/analysis_sample.csvon disk (1.2 MB)Moving to
02_analysis.R, which loads that cleaned file and runs the main estimation. Ready?
Step 5: Wrap-Up (After All Files)
After the last section of the last file, provide:
- A full pipeline summary: what goes in at the start (raw data), what comes out at the end (tables, figures, estimates), and the major transformations in between. Include final object dimensions.
- A collected list of all key assumptions the codebase makes, organized by file/stage.
- A collected list of all data drops - every point where observations were lost, how many, and why.
- A list of all output files produced (tables, figures, datasets) with their locations.
- Any overall observations about code quality, potential improvements, or risks.
- If applicable, note any parts that seem incomplete, commented out, or potentially buggy.
Execution Environment Setup
R Sessions
- Start R at the beginning of the walkthrough. Keep the session alive across sections and (if appropriate) across files.
- Set the working directory to the project root before running anything.
- Load packages as the code does (do not pre-load anything extra).
- If the project uses
renv, tryrenv::restore()first. - If a package is not installed, note it and offer to install or skip.
- For output display, set
options(width = 100, max.print = 200)so output is readable but not overwhelming. - For plots, default to saving to a temp file rather than trying to display inline.
Python Sessions
- Use a persistent Python session similarly.
- For pandas DataFrames: show
.shape,.head(),.dtypes,.describe()as appropriate. - For numpy arrays: show
.shape,.dtype, and a slice. - For sklearn models: show
.score(), coefficients, feature importances.
Stata
- If Stata is not available, show the code and describe expected output based on your knowledge. Note "I cannot execute Stata code directly, but here is what this would produce: ..."
Other Languages
- Use the appropriate REPL/interpreter if available. If not, clearly state this and describe expected output.
R-Specific Guidance
When walking through R code, pay special attention to:
- Pipe operators: Explain the flow.
%>%(magrittr) vs|>(base R 4.1+) - note which is used and their behavioral differences - Non-standard evaluation (NSE): When tidyverse functions use bare column names, explain that this is NSE and what it means
- Factor handling: R's factor type is a common source of bugs. If factors appear, explain level ordering, what
as.numeric()does to them, how they behave in models - Formula objects:
y ~ x1 + x2 | fe1 + fe2- explain the formula syntax, especially forfixest,lfe,plmwhere the formula has special sections - Data.table vs tibble vs data.frame: Note which is being used and behavioral differences that matter
- Missing values: R's
NApropagation rules are non-obvious. Explain how each function handles NAs. When showing output, point out if NAs are present and how many. ifelse()vsif_else()vscase_when(): These behave differently with types and NAs- Library conflicts: If multiple packages are loaded that might mask each other's functions, flag it
- Regression output: For model objects, explain what the object contains, how coefficients are stored, what summary methods do. Always show the summary.
stargazer,modelsummary,texreg,etable: Explain what each argument controlsfeols()/fixest: Explain formula sections, default clustering behavior, how to read etable outputdata.tablesyntax: ExplainDT[i, j, by],:=,.N,.SD,.GRPsf/ spatial operations: Explain CRS, spatial joins, geometry operationsmutate()chains: When there is a long mutate chain creating many variables, go through each new variable individually
Tone and Style
- Be thorough but not condescending. Explain everything, but speak like a knowledgeable colleague, not a textbook.
- Use concrete language. Instead of "the data is transformed," say "the dataframe goes from 1,200 rows (one per student) to 340 rows (one per school) because
group_by() %>% summarise()collapses the student-level observations to school-level means." - When you are uncertain about what the code does (ambiguous variable names, missing context), say so honestly.
- If you spot something that looks like a bug or a risky pattern, flag it clearly but calmly.
- When showing output, do not dump enormous tables. Show enough to be informative (first 5-6 rows, key summary stats). Offer to show more if the user wants.
- Celebrate when the code does something clever or well-structured. "This is a nice pattern - by doing X before Y, the code avoids [common pitfall]."
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

