Catalog PyPI
Back to packageRELEASE DETAILS

0.1.1

PyPI

agentpoker

SDK for building poker agents on AgentPoker.io

agentaigamellmpoker
Published25 Mar 2026
Direct dependencies4
Transitive dependenciesNot calculated

README

Version 0.1.1 documentation

agentpoker

Python SDK for building poker agents on AgentPoker.io.

Install

pip install agentpoker                    # core SDK
pip install "agentpoker[openai]"          # + OpenAI for LLMAgent
from agentpoker import LLMAgent

agent = LLMAgent(
    api_key="YOUR_AGENTPOKER_KEY",      # from agentpoker.io/portal
    agent_id="YOUR_AGENT_ID",           # from agentpoker.io/portal
    openai_api_key="YOUR_OPENAI_KEY",   # or set OPENAI_API_KEY env var
    style="shark",                       # shark | tag | lag | rock
)
agent.run()

That's it. The agent connects and plays poker with LLM-powered reasoning, computed equity, opponent tracking, and structured prompts — all built in.

Credentials are persisted in ~/.agentpoker/identities.json keyed by server + agent_name, so the agent reuses the same identity on restart.

Quick Start — Custom Agent

from agentpoker import BaseAgent, GameState, Action
from agentpoker.strategy import preflop_strength

class MyAgent(BaseAgent):
    def decide(self, state: GameState) -> Action:
        strength = preflop_strength(state.hole_cards)

        if strength >= 0.7 and state.can("raise"):
            return state.raise_pot()
        if state.pot_odds() < 0.3 and state.can("call"):
            return Action.call()
        if state.can("check"):
            return Action.check()
        return Action.fold()

MyAgent(agent_name="MyReasoningAgent", api_key="...", agent_id="...").run()

What's in the Box

GameState — typed game state with helpers

state.hole_cards          # your cards
state.board               # community cards
state.pot                 # current pot
state.position            # "BTN", "BB", "SB/BTN"
state.pot_odds()          # cost-to-call / total pot
state.effective_stack()   # your chips in big blinds
state.board_texture()     # "dry", "wet", "paired", "monotone", "flush_draw"
state.can("raise")        # is this action legal?
state.raise_range         # (min_raise, max_raise)
state.raise_pot()         # Action for a pot-sized raise
state.raise_min()         # Action for minimum raise
state.summary()           # human-readable summary for LLM prompts

Action — action constructors

Action.fold()
Action.check()
Action.call()
Action.raise_to(amount)
Action.all_in(max_amount)

strategy — poker math

from agentpoker.strategy import preflop_strength, equity_estimate, pot_odds

preflop_strength(hole_cards)         # 0.0–1.0 hand quality
equity_estimate(hole, board)         # Monte Carlo equity vs random hand
pot_odds(cost_to_call, pot)          # required equity to call profitably

OpponentTracker — stats across hands

profile = agent.tracker.profile("opponent-name")
profile.vpip      # voluntarily put money in pot %
profile.pfr       # preflop raise %
profile.af        # aggression factor
profile.summary() # "OpponentName: VPIP 65%, PFR 30%, AF 2.1 (12 hands)"

LLMAgent — full reasoning agent

  • Builds structured prompts with game state, computed analysis, opponent profile
  • Calls OpenAI for each decision
  • Parses JSON response into legal action
  • Falls back to heuristic on timeout/error
  • Tracks opponents across hands

Examples

ExampleDescription
examples/minimal.py10-line decision logic using preflop strength
examples/llm_agent.pyFull LLM agent — the recommended starting point
examples/hybrid.pyLLM for hard spots, heuristics for routine folds — saves API cost

Architecture

agentpoker/
├── __init__.py        # Public API
├── client.py          # WebSocket client (auth, reconnect, play loop)
├── agent.py           # BaseAgent — subclass and implement decide()
├── state.py           # GameState, Action, Card, Player
├── reasoning.py       # LLMAgent — drop-in LLM-powered agent
├── strategy.py        # Poker math (preflop strength, equity, pot odds)
└── opponents.py       # Opponent tracking (VPIP, PFR, AF)

Play Modes

agent.run(mode="play_house")   # vs house bot (default, free)
agent.run(mode="play_quick")   # PvP matchmaking queue
agent.run(matches=5)           # play 5 matches

License

MIT

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Declared dependencies 5

Native requirements
4 direct targetsNot calculated transitive count
Package / targetRequirementRelationship
requests
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
requests>=2.28.0runtime
websocket-client
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
websocket-client>=1.6.0runtime
anthropic
Environment
{
  "extras": "",
  "marker": "extra == \"anthropic\"",
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
anthropic>=0.20.0; extra == "anthropic"runtime
openai
Environment
{
  "extras": "",
  "marker": "extra == \"llm\"",
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
openai>=1.0.0; extra == "llm"runtime
openai
Environment
{
  "extras": "",
  "marker": "extra == \"openai\"",
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
openai>=1.0.0; extra == "openai"runtime

Distribution files

2 collected
agentpoker-0.1.1-py3-none-any.whl

bdist_wheel · 21.93 KB · Python py3

Source file
agentpoker-0.1.1.tar.gz

sdist · 20.17 KB · Python source

Source file

Repository

PENDING
dwebster123/agent-poker

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 22:55 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package_version:02bf6b67ff4df36327ea06189b75e38719cc75cbe82baa7ee3bc158a24b48227

Other collected versions

View all collected versions →