Skip to main content

Production primitives for autonomous AI agents

Project description

agentkit

Production primitives for autonomous AI agents.

Built from 57 sessions running a live autonomous agent managing real money for 50+ days without human intervention.

Not theory. Not a tutorial. Production-tested.

pip install bitbot-primitives

Why agentkit?

Most agent frameworks focus on tool calling and prompt chaining. That's the easy part.

The hard part is what happens when your agent runs for weeks:

  • How does it learn from mistakes without forgetting successes?
  • How does it know when it's in unfamiliar territory?
  • How does it detect when its own signals contradict each other?
  • How does it avoid repeating the same error 47 times?
  • How does it know when to stop?

These problems don't appear in demos. They appear at 3am on day 23 when your agent has been running autonomously and you're asleep.

agentkit solves them.

The 8 Primitives

1. LessonsMemory

Agents that learn from outcomes, not just instructions.

from agentkit import LessonsMemory

memory = LessonsMemory("lessons.json")

# Record what happened
memory.record(
    text="Buying during extreme fear with weak momentum = loss",
    pnl_impact=-12.50,
    outcome="LOSS",
    conditions={"fear_greed": 12, "momentum": -0.3}
)

# Inject top lessons into your next prompt
prompt += memory.to_prompt_block(5)

Lessons are ranked by impact * recency * frequency. Recent high-impact lessons surface first. Old lessons decay but don't disappear.

2. EpistemicHumility

Agents that know what they don't know.

from agentkit import EpistemicHumility

humility = EpistemicHumility("knowledge.json")

assessment = humility.assess({
    "market_regime": "bear",
    "volatility": "extreme",
    "signal": "weak_buy"
})

if assessment["familiarity"] == "UNKNOWN":
    # Never seen this before — reduce action size
    size *= assessment["size_modifier"]  # 0.5x

# After acting, record the experience
humility.record(conditions)

Tracks every condition combination your agent has operated in. Returns KNOWN (3+), RARE (1-2), or UNKNOWN (0) with size modifiers.

3. ContradictionDetector

Surface conflicts before your agent acts.

from agentkit import ContradictionDetector

detector = ContradictionDetector()

detector.add_rule(
    name="momentum_vs_sentiment",
    severity="HIGH",
    check=lambda ctx: ctx["momentum"] > 0 and ctx["sentiment"] < 20,
    detail=lambda ctx: f"Momentum bullish but sentiment fearful"
)

report = detector.analyze(context)
if report["level"] == "MAJOR_CONFLICT":
    # Don't act — signals disagree
    prompt += report["prompt_block"]

Scores contradictions 0-10. CONSENSUS, MINOR_CONFLICT, CONFLICT, MAJOR_CONFLICT.

4. OutcomeTracker

Link every decision to its result.

from agentkit import OutcomeTracker

tracker = OutcomeTracker("outcomes.json")

# Record the decision
decision_id = tracker.record_decision(
    action="BUY",
    reasoning="Strong signal score, low fear",
    context={"signal": 6, "fear_greed": 25}
)

# Later, record what happened
tracker.record_outcome(
    decision_id=decision_id,
    result="WIN",
    pnl=15.30,
    learned="Low F&G entries during signal alignment work"
)

# Get win rate by condition
stats = tracker.stats_by_condition("fear_greed", buckets=[0, 25, 50, 75, 100])

5. CircuitBreaker

Automatic safety limits.

from agentkit import CircuitBreaker

breaker = CircuitBreaker(
    max_consecutive_losses=3,
    max_drawdown_pct=15.0,
    cooldown_seconds=1800
)

# Check before acting
status = breaker.check(
    consecutive_losses=current_losses,
    drawdown_pct=current_drawdown
)

if status["blocked"]:
    print(f"Blocked: {status['reason']}")
    print(f"Resumes: {status['resumes_at']}")
else:
    # Safe to proceed
    execute_action()

6. Playbook

Rules that evolve from patterns.

from agentkit import Playbook

playbook = Playbook("playbook.json")

# Add a rule learned from experience
playbook.add_rule(
    name="fear_entry",
    trigger="fear_greed < 20 AND signal_score > 3",
    action="size *= 1.5",
    source="LEARNED",
    evidence={"wins": 7, "losses": 2, "avg_pnl": 8.50}
)

# Check which rules apply
applicable = playbook.evaluate(context)
for rule in applicable:
    print(f"Apply: {rule['name']}{rule['action']}")

# Confirm or reject rules based on outcomes
playbook.confirm_rule("fear_entry", outcome="WIN", pnl=12.0)

Rules have states: CANDIDATE → CONFIRMED → PROVEN. Poor performers get demoted or removed automatically.

7. Reflexivity

Detect when momentum creates its own reality.

from agentkit import Reflexivity

reflex = Reflexivity()

# Feed it market data
score = reflex.update(
    price=67000,
    volume=1200000,
    sentiment=72,
    momentum_1h=0.8
)

print(f"Reflexivity: {score}")  # -7 to +7
print(f"Stage: {reflex.stage}")  # BUST → NEUTRAL → BOOM

if reflex.stage in ["LATE_BOOM", "BLOWOFF"]:
    # Momentum driving price — reduce exposure
    size *= 0.25

Based on Soros reflexivity theory. Detects self-reinforcing feedback loops.

8. SelfMetrics

Agent performance tracking.

from agentkit import SelfMetrics

metrics = SelfMetrics("metrics.json")

# Record every action
metrics.record_action(
    action="BUY",
    size=50.0,
    context={"signal": 5, "regime": "normal"}
)

# Record outcomes
metrics.record_outcome(pnl=12.50, fees=0.50)

# Get performance report
report = metrics.report()
print(f"Win rate: {report['win_rate']}%")
print(f"Sharpe: {report['sharpe_ratio']}")
print(f"Avg hold time: {report['avg_hold_hours']}h")
print(f"Best condition: {report['best_condition']}")

Design Philosophy

1. File-based persistence. JSON files, not databases. Your agent should run on a $6/month server, not require infrastructure.

2. Prompt-ready output. Every module has to_prompt_block(). The primitives are designed to inject context into LLM prompts.

3. Decay over deletion. Old lessons decay in weight but persist. Your agent's history is never erased, just de-prioritized.

4. Composable. Use one module or all eight. They don't depend on each other. Mix with any agent framework.

5. Observable. Every module has stats(). You can inspect your agent's learning at any time.

Installation

pip install bitbot-primitives

Or from source:

git clone https://github.com/johhnyg/agentkit
cd agentkit
pip install -e .

Requirements

  • Python 3.9+
  • No external dependencies (stdlib only)

Origin

These primitives were extracted from a live trading bot that has been running autonomously since February 2026. The bot manages real money, makes its own decisions, and learns from outcomes — with no human in the loop for weeks at a time.

Every pattern in agentkit exists because we hit a wall without it.

License

MIT

Contributing

Issues and PRs welcome at github.com/johhnyg/agentkit.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bitbot_primitives-0.1.0.tar.gz (20.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bitbot_primitives-0.1.0-py3-none-any.whl (22.6 kB view details)

Uploaded Python 3

File details

Details for the file bitbot_primitives-0.1.0.tar.gz.

File metadata

  • Download URL: bitbot_primitives-0.1.0.tar.gz
  • Upload date:
  • Size: 20.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for bitbot_primitives-0.1.0.tar.gz
Algorithm Hash digest
SHA256 0b749a2fde694ed019fc515e88719b8b81ac1fcab0a3c275a8be78bf9acfa489
MD5 7de8590273dca9ddd2deb5768f72a456
BLAKE2b-256 f3c65ac84e47102907e129a0b21686e4c2a278ac46d0243b33c1c97ca700beb6

See more details on using hashes here.

File details

Details for the file bitbot_primitives-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for bitbot_primitives-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c2c45c66324cedfbe1d06d6d4bca81060c7e4c41c233b4d18367ccd432d15132
MD5 36c17f2d2fb6ea3bc03d52be4ddca3a0
BLAKE2b-256 f8083c728be96247051363a1584815db7f7065978115d316c0e878e33635c6a9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page