Skip to content

Commit caa2832

Browse files
authored
Merge pull request #5 from hatchet-dev/icepick
rename -> icepick
2 parents ea95c1e + b428ab3 commit caa2832

File tree

90 files changed

+293
-272
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

90 files changed

+293
-272
lines changed

README.md

Lines changed: 46 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,32 @@
11
<div align="center">
22
<picture>
3-
<source media="(prefers-color-scheme: dark)" srcset="./static/pickaxe_dark.png">
4-
<img width="200" alt="Hatchet Logo" src="./static/pickaxe_light.png">
3+
<source media="(prefers-color-scheme: dark)" srcset="./static/icepick_dark.png">
4+
<img width="200" alt="Hatchet Logo" src="./static/icepick_light.png">
55
</picture>
66
</a>
77

8-
### Pickaxe: A Typescript library for building AI agents that scale
8+
### Icepick: A Typescript library for building AI agents that scale
99

10-
[![Docs](https://img.shields.io/badge/docs-pickaxe.hatchet.run-E64327)](https://pickaxe.hatchet.run) [![License: MIT](https://img.shields.io/badge/License-MIT-purple.svg)](https://opensource.org/licenses/MIT) [![NPM Downloads](https://img.shields.io/npm/dm/%40hatchet-dev%2Fpickaxe)](https://www.npmjs.com/package/@hatchet-dev/pickaxe)
10+
[![Docs](https://img.shields.io/badge/docs-icepick.hatchet.run-E64327)](https://icepick.hatchet.run) [![License: MIT](https://img.shields.io/badge/License-MIT-purple.svg)](https://opensource.org/licenses/MIT) [![NPM Downloads](https://img.shields.io/npm/dm/%40hatchet-dev%2Ficepick)](https://www.npmjs.com/package/@hatchet-dev/icepick)
1111

1212
[![Discord](https://img.shields.io/discord/1088927970518909068?style=social&logo=discord)](https://hatchet.run/discord)
1313
[![Twitter](https://img.shields.io/twitter/url/https/twitter.com/hatchet-dev.svg?style=social&label=Follow%20%40hatchet-dev)](https://twitter.com/hatchet_dev)
14-
[![GitHub Repo stars](https://img.shields.io/github/stars/hatchet-dev/pickaxe?style=social)](https://github.com/hatchet-dev/pickaxe)
14+
[![GitHub Repo stars](https://img.shields.io/github/stars/hatchet-dev/icepick?style=social)](https://github.com/hatchet-dev/icepick)
1515

1616
</div>
1717

18-
Pickaxe is a simple Typescript library for building AI agents that are fault-tolerant and scalable. It handles the complexities of durable execution, queueing and scheduling, allowing you to focus on writing core business logic. [It is not a framework](#philosophy).
18+
Icepick is a simple Typescript library for building AI agents that are fault-tolerant and scalable. It handles the complexities of durable execution, queueing and scheduling, allowing you to focus on writing core business logic. [It is not a framework](#philosophy).
1919

20-
Everything in Pickaxe is just a function that **you have written**, which makes it easy to integrate with your existing codebase and business logic. You can build agents that call tools, other agents, or any other functions you define:
20+
Everything in Icepick is just a function that **you have written**, which makes it easy to integrate with your existing codebase and business logic. You can build agents that call tools, other agents, or any other functions you define:
2121

2222
https://github.com/user-attachments/assets/b28fc406-f501-4427-9574-e4c756b29dd4
2323

24-
_Not sure if Pickaxe is a good fit? [Book office hours](https://cal.com/team/hatchet/office-hours)_
24+
_Not sure if Icepick is a good fit? [Book office hours](https://cal.com/team/hatchet/office-hours)_
2525

2626
## Code Example
2727

2828
```ts
29-
import { pickaxe } from "@hatchet-dev/pickaxe";
29+
import { icepick } from "@hatchet-dev/icepick";
3030
import z from "zod";
3131
import { myTool1, myTool2 } from "@/tools";
3232

@@ -38,11 +38,11 @@ const MyAgentOutput = z.object({
3838
message: z.string(),
3939
});
4040

41-
export const myToolbox = pickaxe.toolbox({
41+
export const myToolbox = icepick.toolbox({
4242
tools: [myTool1, myTool2],
4343
});
4444

45-
export const myAgent = pickaxe.agent({
45+
export const myAgent = icepick.agent({
4646
name: "my-agent",
4747
executionTimeout: "15m",
4848
inputSchema: MyAgentInput,
@@ -74,71 +74,71 @@ export const myAgent = pickaxe.agent({
7474
Getting started is as easy as two commands:
7575

7676
```
77-
pnpm i -g @hatchet-dev/pickaxe-cli
78-
pickaxe create first-agent
77+
pnpm i -g @hatchet-dev/icepick-cli
78+
icepick create first-agent
7979
```
8080

81-
This will prompt you to create a new Pickaxe project from a template to see an end to end example of Pickaxe in action.
81+
This will prompt you to create a new Icepick project from a template to see an end to end example of Icepick in action.
8282

83-
For a full quickstart, check out our [documentation](https://pickaxe.hatchet.run/quickstart).
83+
For a full quickstart, check out our [documentation](https://icepick.hatchet.run/quickstart).
8484

8585
## Benefits
8686

87-
Pickaxe is centered around the benefit of **durable execution**, which creates automatic checkpoints for agents so that they can easily recover from failure or wait for external events for a very long time without consuming resources. This is achieved by using a durable task queue called [Hatchet](https://github.com/hatchet-dev/hatchet).
87+
Icepick is centered around the benefit of **durable execution**, which creates automatic checkpoints for agents so that they can easily recover from failure or wait for external events for a very long time without consuming resources. This is achieved by using a durable task queue called [Hatchet](https://github.com/hatchet-dev/hatchet).
8888

89-
Additionally, Pickaxe agents are:
89+
Additionally, Icepick agents are:
9090

9191
- **💻 Code-first** - agents are defined as code and are designed to integrate with your business logic.
92-
- **🌐 Distributed** - all agents and tools run across a fleet of machines, where scheduling is handled gracefully by Pickaxe. When your underlying machine fails, Pickaxe takes care of rescheduling and resuming the agent on a different machine.
92+
- **🌐 Distributed** - all agents and tools run across a fleet of machines, where scheduling is handled gracefully by Icepick. When your underlying machine fails, Icepick takes care of rescheduling and resuming the agent on a different machine.
9393
- **⚙️ Configurable** - simple configuration for retries, rate limiting, concurrency control, and much more
94-
- **☁️ Runnable anywhere** - Pickaxe agents can run on any container-based platform (Hatchet, Railway, Fly.io, Porter, Kubernetes, AWS ECS, GCP Cloud Run)
94+
- **☁️ Runnable anywhere** - Icepick agents can run on any container-based platform (Hatchet, Railway, Fly.io, Porter, Kubernetes, AWS ECS, GCP Cloud Run)
9595

9696
## Scalability
9797

98-
Pickaxe is designed for scale: specifically, massive throughput and parallelism. Hatchet has run agentic workloads which spawn hundreds of thousands of tasks for a single execution, and runs billions of tasks per month.
98+
Icepick is designed for scale: specifically, massive throughput and parallelism. Hatchet has run agentic workloads which spawn hundreds of thousands of tasks for a single execution, and runs billions of tasks per month.
9999

100100
## Philosophy
101101

102-
Pickaxe is not a framework. Agents and tools are simply functions that you have written. This means you can choose or build the best memory, knowledge, reasoning, or integrations. It does not impose any constraints on how you design your tools, call LLMs, or implement features like agent memory. Pickaxe is opinionated about the infrastructure layer of your agents, but not about the implementation details of your agents.
102+
Icepick is not a framework. Agents and tools are simply functions that you have written. This means you can choose or build the best memory, knowledge, reasoning, or integrations. It does not impose any constraints on how you design your tools, call LLMs, or implement features like agent memory. Icepick is opinionated about the infrastructure layer of your agents, but not about the implementation details of your agents.
103103

104104
## Documentation
105105

106106
### Concepts
107107

108-
- [**Overview**](https://pickaxe.hatchet.run/concepts/overview) - an overview of the Pickaxe execution model
109-
- [**Agents**](https://pickaxe.hatchet.run/concepts/agents) - agents are functions which call other tools and agents.
110-
- [**Tools**](https://pickaxe.hatchet.run/concepts/tools) - tools are functions that perform specific tasks and can be called by agents.
111-
- [**Toolbox**](https://pickaxe.hatchet.run/concepts/toolbox) - a toolbox is a collection of tools with AI-powered selection capabilities.
108+
- [**Overview**](https://icepick.hatchet.run/concepts/overview) - an overview of the Icepick execution model
109+
- [**Agents**](https://icepick.hatchet.run/concepts/agents) - agents are functions which call other tools and agents.
110+
- [**Tools**](https://icepick.hatchet.run/concepts/tools) - tools are functions that perform specific tasks and can be called by agents.
111+
- [**Toolbox**](https://icepick.hatchet.run/concepts/toolbox) - a toolbox is a collection of tools with AI-powered selection capabilities.
112112

113113
### API Reference
114114

115-
- [`pickaxe.start`](https://pickaxe.hatchet.run/api-reference/start)
116-
- [`pickaxe.agent`](https://pickaxe.hatchet.run/api-reference/agent)
117-
- [`pickaxe.tool`](https://pickaxe.hatchet.run/api-reference/tool)
118-
- [`pickaxe.toolbox`](https://pickaxe.hatchet.run/api-reference/toolbox)
115+
- [`icepick.start`](https://icepick.hatchet.run/api-reference/start)
116+
- [`icepick.agent`](https://icepick.hatchet.run/api-reference/agent)
117+
- [`icepick.tool`](https://icepick.hatchet.run/api-reference/tool)
118+
- [`icepick.toolbox`](https://icepick.hatchet.run/api-reference/toolbox)
119119

120120
### Use-Cases and Patterns
121121

122-
- [Prompt chaining](https://pickaxe.hatchet.run/patterns/prompt-chaining)
123-
- [Routing](https://pickaxe.hatchet.run/patterns/routing)
124-
- [Parallelization](https://pickaxe.hatchet.run/patterns/parallelization)
125-
- [Evaluator-optimizer](https://pickaxe.hatchet.run/patterns/evaluator-optimizer)
126-
- [Multi-agent](https://pickaxe.hatchet.run/patterns/multi-agent)
127-
- [Human-in-the-loop](https://pickaxe.hatchet.run/patterns/human-in-the-loop)
122+
- [Prompt chaining](https://icepick.hatchet.run/patterns/prompt-chaining)
123+
- [Routing](https://icepick.hatchet.run/patterns/routing)
124+
- [Parallelization](https://icepick.hatchet.run/patterns/parallelization)
125+
- [Evaluator-optimizer](https://icepick.hatchet.run/patterns/evaluator-optimizer)
126+
- [Multi-agent](https://icepick.hatchet.run/patterns/multi-agent)
127+
- [Human-in-the-loop](https://icepick.hatchet.run/patterns/human-in-the-loop)
128128

129129
## Comparison to Existing Tools
130130

131131
### vs Frameworks (Mastra, Voltagent)
132132

133-
Pickaxe is **not a framework**. It is not opinionated on how you structure your LLM calls, business logic, prompts, or context; we expect you to write these yourself (though Pickaxe does have a few utilities for tool-picking and bundles the AI SDK for calling LLMs).
133+
Icepick is **not a framework**. It is not opinionated on how you structure your LLM calls, business logic, prompts, or context; we expect you to write these yourself (though Icepick does have a few utilities for tool-picking and bundles the AI SDK for calling LLMs).
134134

135-
Pickaxe is designed to be extended and modified -- for example, you could build your own agent library on top of Pickaxe.
135+
Icepick is designed to be extended and modified -- for example, you could build your own agent library on top of Icepick.
136136

137137
### vs Temporal
138138

139-
Pickaxe's execution model is most similar to [Temporal](https://github.com/temporalio/temporal) with a simplified execution model and with more control for workflow scheduling:
139+
Icepick's execution model is most similar to [Temporal](https://github.com/temporalio/temporal) with a simplified execution model and with more control for workflow scheduling:
140140

141-
| Feature | Pickaxe | Temporal |
141+
| Feature | Icepick | Temporal |
142142
| ------------------------------------------- | ------- | -------- |
143143
| **Durable Execution** |||
144144
| **Event Listeners within Workflows** |||
@@ -156,7 +156,7 @@ Pickaxe's execution model is most similar to [Temporal](https://github.com/tempo
156156

157157
## Agent Best Practices
158158

159-
When writing agents with Pickaxe, it's useful to follow these rules:
159+
When writing agents with Icepick, it's useful to follow these rules:
160160

161161
1. Agents should be **stateless reducers** with **no side effects**. They should not depend on external API calls, database calls, or local disk calls; their entire state should be determined by the results of their tool calls. See the [technical deep-dive](#technical-deep-dive) for more information.
162162

@@ -170,7 +170,7 @@ Contributions are welcome! Please start a discussion in [Discord](https://hatche
170170

171171
## Technical Deep-Dive
172172

173-
Pickaxe is a utility layer built on top of [Hatchet](https://github.com/hatchet-dev/hatchet). It is built on the concept of a **durable task queue**, which means that every task which gets called in Hatchet is stored in a database. This is useful because tasks can easily be replayed and recover from failure, even when the underlying hardware crashes. Another way to look at it: Hatchet makes _distributed systems incredibly easy to deploy and maintain_.
173+
Icepick is a utility layer built on top of [Hatchet](https://github.com/hatchet-dev/hatchet). It is built on the concept of a **durable task queue**, which means that every task which gets called in Hatchet is stored in a database. This is useful because tasks can easily be replayed and recover from failure, even when the underlying hardware crashes. Another way to look at it: Hatchet makes _distributed systems incredibly easy to deploy and maintain_.
174174

175175
For agents, this is particularly useful because they are extremely long-running, and thus need to be resilient to hardware failure. Agents also need to manage third-party rate limits and need concurrency control to prevent the system from getting overwhelmed.
176176

@@ -185,7 +185,7 @@ Event log:
185185
-> Start extract_from_document...
186186
```
187187

188-
Now, let's say that the machine which the agent is running on crashes during the last step. In order to recover from failure, Pickaxe will automatically replay all steps up to this point in the execution history:
188+
Now, let's say that the machine which the agent is running on crashes during the last step. In order to recover from failure, Icepick will automatically replay all steps up to this point in the execution history:
189189

190190
```
191191
Event log:
@@ -197,11 +197,11 @@ Event log:
197197
-> (later) Finish extract_from_document
198198
```
199199

200-
In other words, the execution history is cached by Pickaxe, which allows the agent to recover gracefully from failure, instead of having to replay a bunch of work. Another way to think about it is that the agent automatically "checkpoints" its state.
200+
In other words, the execution history is cached by Icepick, which allows the agent to recover gracefully from failure, instead of having to replay a bunch of work. Another way to think about it is that the agent automatically "checkpoints" its state.
201201

202202
This execution model is much more powerful when there's a requirement to wait for external systems, like a human reviewer or external event. Building a system that's resilient to failure becomes much more difficult, because if the agent starts from scratch, it may have lost the event which allowed execution to continue. In this model, the event automatically gets stored and replayed.
203203

204-
Beyond Hatchet, there are two other points of inspiration for Pickaxe:
204+
Beyond Hatchet, there are two other points of inspiration for Icepick:
205205

206-
- [12-factor agents](https://github.com/humanlayer/12-factor-agents) -- this is the foundation for why Pickaxe advocates owning your control flow, context window, and prompts
207-
- Anthropic's [Building Effective Agents](https://www.anthropic.com/engineering/building-effective-agents) -- we have ensured that each pattern documented in Anthropic's post are compatible with Pickaxe
206+
- [12-factor agents](https://github.com/humanlayer/12-factor-agents) -- this is the foundation for why Icepick advocates owning your control flow, context window, and prompts
207+
- Anthropic's [Building Effective Agents](https://www.anthropic.com/engineering/building-effective-agents) -- we have ensured that each pattern documented in Anthropic's post are compatible with Icepick

cli/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
## @hatchet-dev/pickaxe-cli
1+
## @hatchet-dev/icepick-cli
22

3-
Contains the CLI for Pickaxe.
3+
Contains the CLI for Icepick.

cli/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
{
2-
"name": "@hatchet-dev/pickaxe-cli",
2+
"name": "@hatchet-dev/icepick-cli",
33
"version": "0.1.26",
44
"main": "dist/index.js",
55
"bin": {
6-
"pickaxe": "./dist/index.js"
6+
"icepick": "./dist/index.js"
77
},
88
"scripts": {
99
"build": "tsc",
@@ -14,7 +14,7 @@
1414
"test:coverage": "jest --coverage",
1515
"dump-version": "node -e \"console.log('export const HATCHET_VERSION = \\'' + require('./package.json').version + '\\';');\" > src/version.ts",
1616
"tsc:build": "npm run dump-version && tsc && resolve-tspaths",
17-
"prepublish": "cp package.json dist/package.json; cp README.md dist/; cp -r templates dist/; node -e \"const pkg=JSON.parse(require('fs').readFileSync('dist/package.json','utf8')); pkg.main='index.js'; pkg.bin.pickaxe='./index.js'; require('fs').writeFileSync('dist/package.json',JSON.stringify(pkg,null,2));\"",
17+
"prepublish": "cp package.json dist/package.json; cp README.md dist/; cp -r templates dist/; node -e \"const pkg=JSON.parse(require('fs').readFileSync('dist/package.json','utf8')); pkg.main='index.js'; pkg.bin.icepick='./index.js'; require('fs').writeFileSync('dist/package.json',JSON.stringify(pkg,null,2));\"",
1818
"publish:ci": "rm -rf ./dist && npm run dump-version && npm run tsc:build && npm run prepublish && cd dist && npm publish --access public --no-git-checks"
1919
},
2020
"keywords": [

0 commit comments

Comments
 (0)