AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Agnara is a Python 3.14-native capability framework for building modern services for humans, apps and AI agents. Define business capabilities once and expose them through HTTP, MCP, A2A, events and tasks. Protocol-neutral, agent-first, async, observable, secure by design, modular and built for the post-REST era. Fast by architecture, not magic.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Agnara is a Python capability runtime. Applications define a capability once
and expose it through transport adapters without making HTTP, MCP or another
protocol the semantic source of truth.
Agnara lets one application capability serve direct Python callers and explicit
transport exposures without putting protocol objects in the business model.
The execution kernel uses only the Python standard library and requires Python
3.14 or newer. The seven official distributions share one version; this tree
prepares the 1.0.3 documentation and packaging baseline.README 전문 보기 ↗Agnara is a Python capability runtime. Applications define a capability once and expose it through transport adapters without making HTTP, MCP or another protocol the semantic source of truth.
Agnara lets one application capability serve direct Python callers and explicit transport exposures without putting protocol objects in the business model. The execution kernel uses only the Python standard library and requires Python 3.14 or newer. The seven official distributions share one version; this tree prepares the 1.0.3 documentation and packaging baseline.
pip install "agnara==1.0.3"
Install agnara-http, agnara-mcp, agnara-cli or agnara-telemetry at the
same version when an application uses those surfaces. agnara-a2a and
agnara-events reserve package names and expose no runtime API.
Read VISION.md, PRINCIPLES.md and ARCHITECTURE.md for the governing model. The supported imports and compatibility rules are in PUBLIC_API.md and the generated API reference.
import asyncio
from agnara import Agnara, Risk, StandardEffect
from agnara.di import DIContainer, DIRegistry, provider
from agnara.execution import ExecutionContext, ExecutionPlan, Invocation, invoke_result
from agnara import Principal
class Ledger:
def refund(self, payment_id: str, amount_cents: int) -> str:
return f"refunded {amount_cents} cents for {payment_id}"
@provider()
def provide_ledger() -> Ledger:
return Ledger()
app = Agnara("billing")
@app.capability(
description="Refund a captured payment.",
scopes=("billing:write",),
effects=(StandardEffect.FINANCIAL_WRITE,),
risk=Risk.HIGH,
)
def refund(payment_id: str, amount_cents: int, ledger: Ledger) -> str:
return ledger.refund(payment_id, amount_cents)
async def main() -> None:
capabilities = app.compile()
dependencies = DIRegistry()
dependencies.bind(Ledger, provide_ledger)
plan = ExecutionPlan.compile(capabilities["billing.refund"], dependencies)
outcome = await invoke_result(
plan,
ExecutionContext(
Invocation(plan.definition.id, {"payment_id": "pay_123", "amount_cents": 2500}, {}),
DIContainer(dependencies),
principal=Principal("quickstart", scopes={"billing:write"}),
),
)
print(outcome)
asyncio.run(main())
The plan evaluates declared scopes before invoking the handler. The principal comes from the application or host that authenticated the caller. Risk and effect metadata describe the capability; they do not grant authorization.
| Distribution | Current role |
|---|---|
agnara | Capability registry, compiled plans, DI, policy, canonical outcomes, streaming, direct idempotency and introspection. |
agnara-http | ASGI HTTP, OpenAPI, documentation UIs, filtered discovery, Explorer and SSE. |
agnara-mcp | Version-pinned MCP tool projection, authorization and invocation for the documented subset. |
agnara-cli | Project/app scaffolding, inspection, graph, context and OpenAPI export commands. |
agnara-telemetry | Explicit OpenTelemetry metrics and tracing hooks; the application owns its SDK and exporter. |
agnara-a2a, agnara-events | Reserved namespaces with no public runtime API. |
Compiled snapshots and policies remain transport neutral. Streaming is pull based in the kernel and has an HTTP SSE projection; it is not projected by the MCP or reserved packages. Idempotency is explicit for direct complete-result calls and is not an HTTP or MCP request-key feature. Confirmation requires an application verifier. Introspection applies visibility rules before exporting data; hiding an operation in a browser UI is not authorization.
Agnara can run standalone, inside a host framework, or beside host routes. The host keeps ownership of authentication, routing, persistence and lifecycle. See interoperability, security and the threat model for evidence and limits.
The CLI and scaffolding guide covers generated projects.
The container guide covers the reference runtime and
digest pinning. Documentation map identifies the
owner of each current contract. Public API stability is governed by
docs/public-api.json; the quality gates and
contribution guide describe verification and review.
uv sync
uv run ruff check .
uv run ruff format --check .
uv run ty check
uv run pytest
Publication is a reviewed dispatch from main. The workflow verifies the
complete distribution set before it creates a tag; see
docs/MAINTAINERS_RELEASE.md.
The reference container is published to GHCR and Docker Hub separately from
the Python distributions. PyPI is the Python package index; immutable release
tags and the mutable :edge image have different purposes. See the container
guide before pinning a deployment.
Apache-2.0. See LICENSE.