Skip to content

Instantly share code, notes, and snippets.

View skatkov's full-sized avatar
🏠

Stanislav (Stas) Katkov skatkov

🏠
View GitHub Profile
@AUAggy
AUAggy / stop-ai-agents-using-your-ssh-keys.md
Last active October 27, 2026 12:58
AI coding agents with shell access can use the same SSH keys, agent, and open sessions you can. A practical cleanup: isolate the agent, retire stale hosts and keys, and move admin logins to a hardware key with touch and PIN.

Stop AI agents from using your SSH keys: clean up the access you forgot

If you know how to use SSH but have collected old hosts, mystery keys, and years of copied configuration, this cleanup is for you. Shell examples use macOS/Linux unless marked PowerShell. On Windows, your SSH files normally live in %USERPROFILE%\.ssh.

The short version

Your laptop can become a route into every server that still accepts your SSH keys. An AI tool with unrestricted access to your account can use the same files and connections you can. Malware can do the same.

Start with three changes: remove access you no longer need, protect your logins with a hardware security key and PIN, and keep AI tools away from your administrator credentials. You do not need a certificate server or a new platform to do this.

@Shpigford
Shpigford / CLAUDE.md
Created January 6, 2026 20:04
The starting CLAUDE.md file I (@Shpigford) use for all new dev projects. This assumes using Rails + Inertia.js, but many of the rules can be ported over to other languages/frameworks.

CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

About Yeetsheet

The name of this project is "Yeetsheet". Yeetsheet is a spreadsheet automation tool. It connects to Google Sheets, Excel, and Airtable. Core functionality: watch spreadsheets for changes, run transformations on cell data, sync data between multiple spreadsheet sources, and send notifications based on conditions. Users create automations through a visual node-based editor rather than code. Common use cases include consolidating data from multiple sheets into one, auto-populating templates when source data changes, and validating data against rules. Has a REST API for programmatic access. Data transformations support filtering, mapping, lookups, and basic aggregations.

Development Commands

@subtleGradient
subtleGradient / vt-hig.pdf
Last active December 26, 2025 10:51
VT-HIG Cheat Sheet -- Virtual Terminal Human Interface Guidelines
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
# config/initializers/rollout.rb
ROLLOUT_OPTIONS = YAML.load_file(Rails.root.join(“config”, “rollout.yml”))[Rails.env]
require "digest"
require "rack"
# This class encapsulates a unit of work done for a particular tenant, connected to that tenant's database.
# ActiveRecord makes it _very_ hard to do in a simple manner and clever stuff is required, but it is knowable.
#
# What this class provides is a "misuse" of the database "roles" of ActiveRecord to have a role per tenant.
# If all the tenants are predefined, it can be done roughly so:
#
# ActiveRecord::Base.legacy_connection_handling = false if ActiveRecord::Base.respond_to?(:legacy_connection_handling)
@lazaronixon
lazaronixon / _form.html.erb
Last active September 22, 2025 15:08
Hotwire Event-Driven Update Pattern
<%= form_with model: citizen, class: "card flex flex-col gap", data: { controller: "form" } do |form| %>
<div class="flex flex-col gap mb-2">
<div class="flex flex-col gap-half">
<% countries = Country.order(:name) %>
<%= label_tag :country_id, "Country", class: "text-sm font-medium leading-none" %>
<%= select_tag :country_id, options_from_collection_for_select(countries, :id, :name, citizen.country_id), include_blank: "Select one", class: "input", data: { action: "form#submit", form_submitter_param: "on_country_change" } %>
</div>
<div class="flex flex-col gap-half">
<% states = State.where(country_id: citizen.country_id).order(:name) %>
@marckohlbrugge
marckohlbrugge / assistant.rb
Created January 12, 2025 22:56
Overview of my LLM-powered prototype. Very rough code.
# Add these gems to your Gemfile
gem "rails" # not strictly needed, but I use ActiveConcern, etc
gem "raix" # helpful gem to reduce code needed for function calling etc
gem "thor" # to make a CLI app (not needed if you make a web app)
gem "http" # my preferred gem to make API calls
# This is the main app (`app/models/ai_chat/cli.rb`)
module AIChat
class Cli
# Thor
@mxgrn
mxgrn / audit-logs.sql
Created December 9, 2024 10:13
Track Postgres table changes in audit_logs
-- Step 1: Create the audit logs table
CREATE TABLE audit_logs (
id SERIAL PRIMARY KEY,
table_name TEXT NOT NULL,
operation TEXT NOT NULL,
json_diff JSONB,
inserted_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Step 2: Create the trigger function

Implementing Advisory Locks in SQLite3

In my Rails model, I initially had a function to handle advisory locks in PostgreSQL. Here's the code, which works as expected:

# Postgresql version
def with_advisory_lock
  self.class.connection.execute("SELECT pg_advisory_lock(#{self.id})")
  yield
@egeozcan
egeozcan / index.html
Created October 18, 2024 08:40
image viewer
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Fullscreen Image Viewer</title>
<style>
body {
font-family: Arial, sans-serif;
}