Skip to content

Instantly share code, notes, and snippets.

View f0t0n's full-sized avatar

Eugene Naydenov f0t0n

View GitHub Profile
@f0t0n
f0t0n / addyosmani_agent-skils-motivation.md
Last active June 3, 2026 11:30
Why did Addy Osmani create his own spec-driven development kit while there are already so many others out there, like github spec-kit, openspec.dev, specs.md, or superpowers?

Motivation

Addy Osmani created agent-skills not as another "specification format," but as a specific behavioral framework designed to stop AI agents from "vibe coding"—the tendency of LLMs to take the shortest path to "done" by skipping the rigorous steps a senior engineer would take.

While tools like github/spec-kit or openspec.dev focus on the structure of a document (the "what"), Addy's project focuses on the workflow and psychological discipline of the agent (the "how").

1. The "Anti-Rationalization" Table (The Unique Differentiator)

The most significant innovation in Addy’s kit is the inclusion of Anti-Rationalization tables. He observed that LLMs are excellent at making excuses to skip work (e.g., "This change is too small for a test").

  • Existing Tools: Usually define a template for a spec or a plan.
  • Agent-Skills: Includes a "pre-written rebuttal" for common AI excuses. If the agent thinks, "I'll write tests later," the skill forces it to read: *"Later is the l

Keybase proof

I hereby claim:

  • I am f0t0n on github.
  • I am competera_en (https://keybase.io/competera_en) on keybase.
  • I have a public key whose fingerprint is 5EC8 2CC3 1270 4617 2D22 E44A E75F 50EE 9E79 B40B

To claim this, I am signing this object:

{
"swagger": "2.0",
"info": {
"title": "Uber API",
"description": "Move your app forward with the Uber API",
"version": "1.0.0"
},
"host": "api.uber.com",
"schemes": [
"https"
@f0t0n
f0t0n / recureduce.py
Last active March 3, 2017 14:09
Unlimited "recursion" hack
from functools import reduce
def run_flow(fns, input_value: dict) -> dict:
def flow_reducer(result, fn):
return fn(result)
return reduce(flow_reducer, fns, input_value)
def recur(fn, input_value, stop) -> dict:
@f0t0n
f0t0n / background_tasks.py
Created August 22, 2016 19:48
Background tasks using app.loop.create_task + cancellation
#!/usr/bin/env python3
"""Example for aiohttp.web.Application.on_startup signal handler
"""
import asyncio
from aiohttp import ClientSession
from aiohttp.web import Application, run_app, Response
async def fake_redis_msg(request):
@f0t0n
f0t0n / background_tasks.py
Created August 22, 2016 19:38
Background tasks with loop.create_task + cancellation
#!/usr/bin/env python3
"""Example for aiohttp.web.Application.on_startup signal handler
"""
import aiohttp
import asyncio
import contextlib
from aiohttp.web import Application, run_app, Response
#!/usr/bin/env python3
"""Example for aiohttp.web.Application.on_startup signal handler
"""
import asyncio
import aiohttp
from aiohttp.web import Application, run_app, Response
@f0t0n
f0t0n / pgmodeler.md
Last active June 16, 2016 18:57
Как я собрался генерировать ERD

#Как я собирался генерировать ERD

pgmodeler

В общем, решил я сгенерировать ERD существующей PostgreSQL базы данных. Добрые люди из украинского Python комьюнити порекомендовали pgmodeler. Посмотрел скриншоты на сайте - понравилось. Решил по-быстрому его собрать и опробовать. Когда собирал, понял, что заметка с пошаговой инструкцией может оказаться полезной. Посему излагаю.

@f0t0n
f0t0n / gitter-dev-ua-faq.md
Last active May 6, 2016 21:41 — forked from listochkin/gitter-dev-ua-faq.md
Gitter Dev-UA FAQ

FAQ по Gitter-чатам группы Dev-UA

Так получилось, что мы открываем сейчас достаточно много чатов в [Gitter.im][1]: часто это совсем новые для нас сообщества (как [PHP-чат][2], например), а часто - это уже существующие чаты, которые мы создали и администрировали в Skype (например, [Frontend-UA][3]). Не зависимо от того, новый ли это чат или "переезжающий", нам раз за разом задают одни и те же вопросы. Здесь мы собрали их и подготовили несколько ответов.

Почему Gitter?

  1. Больше 300 человек в чате (это лимит в Skype)
import aiohttp
from aiohttp import web
from .exception import RpcError
from .exception import RpcErrorCode
from .serializer import json
from .serializer import msgpack
from .constants import JSON_RPC_VERSION
class RpcWebsocketHandler(object):