LLM subscriptions
A ready-to-run example is available here.
Use your existing ChatGPT Plus or Pro subscription to access OpenAI's Codex models without consuming API credits. The SDK handles OAuth authentication, credential caching, and automatic token refresh.
How it works
Call subscription_login()
The LLM.subscription_login() class method handles the entire authentication flow:
from faheemcode.sdk import LLM
llm = LLM.subscription_login(vendor="openai", model="gpt-5.2-codex")
On first run, this opens your browser for OAuth authentication with OpenAI. After successful login, credentials are cached locally in ~/.faheem-code/auth/ for future use.
Use the LLM
Once authenticated, use the LLM with your agent as usual. The SDK automatically refreshes tokens when they expire.
Supported models
The following models are available via ChatGPT subscription:
| Model | Description |
|---|---|
gpt-5.2-codex | Latest Codex model (default) |
gpt-5.2 | GPT-5.2 base model |
gpt-5.1-codex-max | High-capacity Codex model |
gpt-5.1-codex-mini | Lightweight Codex model |
Configuration options
Force fresh login
If your cached credentials become stale or you want to switch accounts:
llm = LLM.subscription_login(
vendor="openai",
model="gpt-5.2-codex",
force_login=True, # Always perform fresh OAuth login
)
Disable browser auto-open
For headless environments or when you prefer to manually open the URL:
llm = LLM.subscription_login(
vendor="openai",
model="gpt-5.2-codex",
open_browser=False, # Prints URL to console instead
)
Check subscription mode
Verify that the LLM is using subscription-based authentication:
llm = LLM.subscription_login(vendor="openai", model="gpt-5.2-codex")
print(f"Using subscription: {llm.is_subscription}") # True
Credential storage
Credentials are stored securely in ~/.faheem-code/auth/. To clear cached credentials and force a fresh login, delete the files in this directory.
Ready-to-run example
"""Example: Using ChatGPT subscription for Codex models.
This example demonstrates how to use your ChatGPT Plus/Pro subscription
to access OpenAI's Codex models without consuming API credits.
The subscription_login() method handles:
- OAuth PKCE authentication flow
- Credential caching (~/.faheem-code/auth/)
- Automatic token refresh
Supported models:
- gpt-5.2-codex
- gpt-5.2
- gpt-5.1-codex-max
- gpt-5.1-codex-mini
Requirements:
- Active ChatGPT Plus or Pro subscription
- Browser access for initial OAuth login
"""
import os
from faheemcode.sdk import LLM, Agent, Conversation, Tool
from faheemcode.tools.file_editor import FileEditorTool
from faheemcode.tools.terminal import TerminalTool
# First time: Opens browser for OAuth login
# Subsequent calls: Reuses cached credentials (auto-refreshes if expired)
llm = LLM.subscription_login(
vendor="openai",
model="gpt-5.2-codex", # or "gpt-5.2", "gpt-5.1-codex-max", "gpt-5.1-codex-mini"
)
# Alternative: Force a fresh login (useful if credentials are stale)
# llm = LLM.subscription_login(vendor="openai", model="gpt-5.2-codex", force_login=True)
# Alternative: Disable auto-opening browser (prints URL to console instead)
# llm = LLM.subscription_login(
# vendor="openai", model="gpt-5.2-codex", open_browser=False
# )
# Verify subscription mode is active
print(f"Using subscription mode: {llm.is_subscription}")
# Use the LLM with an agent as usual
agent = Agent(
llm=llm,
tools=[
Tool(name=TerminalTool.name),
Tool(name=FileEditorTool.name),
],
)
cwd = os.getcwd()
conversation = Conversation(agent=agent, workspace=cwd)
conversation.send_message("List the files in the current directory.")
conversation.run()
print("Done!")
You can run the example code as-is.
export LLM_API_KEY="your-api-key"
export LLM_MODEL="anthropic/claude-sonnet-4-5-20250929" # or openai/gpt-4o, etc.
cd software-agent-sdk
uv run python examples/01_standalone_sdk/35_subscription_login.py
# https://app.faheemcode.ai/settings/api-keys
export LLM_API_KEY="example-user-api-key"
export LLM_MODEL="faheemcode/claude-sonnet-4-5-20250929"
cd software-agent-sdk
uv run python examples/01_standalone_sdk/35_subscription_login.py
Next steps
- LLM Registry - Manage multiple LLM configurations
- LLM Streaming - Stream responses token-by-token
- LLM Reasoning - Access model reasoning traces