Skip to content

Instantly share code, notes, and snippets.

View eterps's full-sized avatar

Erik Terpstra eterps

View GitHub Profile

Understanding aico history: Managing the AI's Focus

The aico history commands are a powerful feature for controlling the context sent to the AI. Every time you run aico ask or aico edit, your entire active conversation history is sent along with your new prompt. This is how the AI "remembers" what you've discussed, such as a plan you created in a previous step.

However, as a conversation gets longer, the context can become very large. This has two main effects:

  1. It increases cost and token usage. More history means a larger payload for the API call.
  2. It can distract the AI. Early brainstorming or corrected mistakes might not be relevant to the current task, but the AI will still see them.

The aico history subgroup lets you solve this by telling aico: "For the next prompt, only use the conversation starting from this specific point." The older messages are not deleted; they are simply ignored for future API calls until you decide otherwise.

{
"mason-org/mason-lspconfig.nvim",
opts = {
ensure_installed = { 'basedpyright', 'ruff', 'prettierd', 'prettier', 'shfmt',
'mdformat', 'standardrb', 'stylua', 'terraform-ls', 'tflint', 'yamlfmt' },
automatic_enable = {
exclude = { "lua_ls", "basedpyright" },
}
},
dependencies = {
<h1>I blog with minimal HTML</h1>
<p>published: 10/02/25 (dd/mm/yy)<br>
updated: not yet
<p>Inspired from <a href=https://devpoga.org/i-blog-with-raw-html">I blog in raw HTML</a>
<p>The blog you're reading is written in minimal HTML.
<p>This (english) blog is at it's first incarnation, the longest lived one (so far). But I have a french blog available too.
@eterps
eterps / select.rb
Last active December 12, 2024 15:20
Select
require 'sinatra'
require 'json'
TECH_TAGS = %w[javascript python ruby java rust golang react vue angular typescript]
get('/') { erb :index }
get('/suggest') { TECH_TAGS.grep(/#{params[:q]}/i).to_json }
get('/search') { erb :_results, layout: false, locals: { tags: params[:tags].to_s.split(',').reject(&:empty?) } }
__END__
@eterps
eterps / output.txt
Last active November 25, 2024 21:01
Polislite algorithm (inspired by pol.is)
Consensus Statements:
- Climate change requires immediate action (strong agreement)
Divisive Statements:
- Nuclear power is necessary for clean energy
- Carbon tax should be implemented globally
- Individual actions matter for sustainability
- Companies should be held liable for emissions
Group Positions:
from dataclasses import dataclass
@dataclass
class UnitQuantity:
value: int
@dataclass
class KilogramQuantity:
@eterps
eterps / app.tsx
Last active December 14, 2023 16:08
/** @jsx jsx */
import { Hono, Context } from "https://deno.land/x/hono/mod.ts";
import { basicAuth } from "https://deno.land/x/hono/middleware.ts";
import { serveStatic } from "https://deno.land/x/hono/middleware.ts";
import { jsx } from "https://deno.land/x/hono/middleware.ts";
import { env } from "https://deno.land/x/hono/helper.ts";
import { getProject, setProject } from './project.ts';
import { renderPrompt } from './prompt.ts';
import { getAIOutput } from './ai.ts';
@eterps
eterps / init.lua
Created November 4, 2023 14:57
Starter neovim configuration
local lazypath = vim.fn.stdpath 'data' .. '/lazy/lazy.nvim'
if not vim.loop.fs_stat(lazypath) then
vim.fn.system({
'git',
'clone',
'--filter=blob:none',
'https://github.com/folke/lazy.nvim.git',
'--branch=stable', -- latest stable release
lazypath,
})
@eterps
eterps / syscall.rs
Created October 6, 2022 10:26
Call write syscall on x86-64 Linux in Rust
use std::arch::asm;
fn main() {
let str = b"Hello world\n";
unsafe {
let res = syswrite(str.as_ptr() as u64, str.len() as u64);
println!("res: {}", res);
}
}
% bouncing balls
-initialization(main).
main :-
poke(0x4c00, [0x3c, 0x7e, 0xff, 0xff, 0xff, 0xff, 0x7e, 0x3c], D1),
set_colors(0x0ce9, 0x01c0, 0x0ce5, D2),
start(D1, D2).
start([], []) :-