Build reactive agents in TypeScript with state, triggers, conditions, and actions.
Zero runtime dependencies. Full TypeScript support. Designed for in-process automation, workflow orchestration, and AI-assisted actions.
import { Agent } from '@agentiny/core';
const agent = new Agent({ initialState: { count: 0 } });
agent.when(
(state) => state.count > 5,
[(state) => console.log('Milestone reached:', state.count)],
);
await agent.start();
agent.setState({ count: 10 });
await agent.settle();| Package | Purpose | Status |
|---|---|---|
| @agentiny/core | Core trigger-condition-action framework | Foundation |
| @agentiny/utils | Retry, timeout, and validation helpers | Ready |
| @agentiny/openai | OpenAI-backed agent actions | Ready |
| @agentiny/anthropic | Anthropic-backed agent actions | Ready |
| @agentiny/gemini | Google Gemini-backed agent actions | Ready |
npm install @agentiny/coreimport { Agent } from '@agentiny/core';
interface AppState {
temperature: number;
alarm: boolean;
}
const agent = new Agent<AppState>({
initialState: { temperature: 0, alarm: false },
});
agent.when(
(state) => state.temperature > 30,
[(state) => (state.alarm = true), (state) => console.log('Alert!')],
);
agent.when(
(state) => state.temperature <= 25,
[(state) => (state.alarm = false), (state) => console.log('Normal')],
);
await agent.start();
agent.setState({ temperature: 35 });
agent.setState({ temperature: 20 });
await agent.stop();every(interval, ...) fires repeatedly. The interval is either milliseconds or a
duration string (ms, s, m, h). at(time, ...) fires at a wall-clock time
in the host's local timezone — "HH:MM" (24h) or "9:30pm" / "9:30 AM" (12h);
repeats daily, or pass { once: true } for a single-shot.
agent.every('2h', [refreshFeed]);
agent.every('5s', [poll], { immediate: true });
agent.at('21:30', [sendDailyReport]);
agent.at('00:00', [resetCounters], { once: true });import { Agent } from '@agentiny/core';
import { createAnthropicAction } from '@agentiny/anthropic';
const aiAction = createAnthropicAction({
prompt: (state) => `Respond to: ${state.userInput}`,
model: 'claude-3-sonnet-20240229',
apiKey: process.env.ANTHROPIC_API_KEY,
});
const agent = new Agent({ initialState: { userInput: '' } });
agent.when((state) => state.userInput.length > 0, [aiAction]);- Triggers decide when an agent should act, using state checks, named events, or wall-clock time.
- Conditions add extra guards before actions run.
- Actions mutate state or perform side effects.
settle()waits for cascading trigger/action chains to finish.waitFor(predicate)resolves with the state once a specific condition is met.
- Core README - Full core package documentation
- Utils - Retry, timeout, and validation helpers
- OpenAI - OpenAI integration
- Anthropic - Anthropic integration
- Gemini - Google Gemini integration
git clone https://github.com/keldrik/agentiny.git
cd agentiny
npm installCommon commands:
npm run typecheck
npm run lint
npm run format
npm run build
npm run test:run -w @agentiny/coreMIT - See LICENSE for details.